-*- org -*-
+* upcoming/planned/todo
+** Language:
+- Semantic patch for other languages
+- Support metavariables, virtual rules and virtual identifiers
+ in initialize and finalize rules
+- Support for matching #ifdef, etc.
+- function-typed metavariables
+- virtual typedef, declarer name, iterator name
+- regexps for type metavariables
+- 'symbol' metadeclaration for C identifiers that are guaranteed not intended as meta variables.
+
+** Features:
+- New scripting languages
+- more than one SP on the command line
+
+** Bugfix:
+- Add more information in documentation, man pages and wiki
+- typedefs from C code should not be used before their point of inference
+ (saved_typedefs in cprogram_of_file)
+
+* 1.0.0
+** Language:
+- Addition of initializer list metavariables. Thanks to Michael Stefaniuc
+ for noticing the need for them.
+- Allow multiple position variables per token
+- ++ can now be associated with - code
+- Allow /* */ comments as smpl comments, not only as + code
+- Add support for && (label addresses)
+- local idexpression metavariable no longer matches static local x
+- Consider using to be a comment in C++ code. Patch submitted by Jani Monoses.
+- Command line cocci
+- print_main etc for ocaml Coccilib
+- =~ not ~= is used to indicate a regular expression constraint on an
+ identifier. And !~ for a nonmatch.
+- allow long double, short int, long int, and long long int in SmPL code.
+- gcc constructors allowed in SmPL. Thanks to Uwe Kleine-Koenig for
+ pointing out the problem.
+- Allow ! to appear before () in depends. Thanks to SF Markus Elfring for
+ noticing the problem.
+- Can add code containing #pragma or #line.
+- Multicharacter command-line options now begin with -- and contain -
+ rather than _.
+- Allow multiple types of hidden metavariables, each preceded by @.
+ Position variables can be attached to these.
+- Python code now receives a structure containing a list of matched
+ elements for list metavariables. Thanks to Michael Stefaniuc for
+ suggesting this features.
+- Python code now receives expressions and identifiers as ordinary strings,
+ not as elements of specific structures.
+
+** Features:
+- Preserve spacing before // comments when not at the beginning of a line
+- Adjusted parsing of endif to put it after jump code
+- Improve warning message when using -use_cache
+- More helpful initial value for exported variables in python
+- Support - on expression nests
+- Better handling of the case of a matched declaration that should only
+ be replaced by other top level things.
+- Allow a semantic patch beginning and ending with braces to match the
+ complete body of a function if the braces are not removed and if nothing
+ is added before the first brace or after the last one.
+- Add -cache_prefix option, to specify where to put cached files.
+- Allow module_init(foo); to match module_init(foo) (or likewise for any
+ declarer), when no transformation is specified on the semicolon.
+- Add Coccilib.exit() for ocaml code and cocci.exit() for python code,
+ to abort the treatment of the current file.
+- Don't multiply print the same patch for the same file
+- Drop date in diff
+- Don't repeat smpl type warnings
+- -sp_file/-cocci_file are now optional. If not present an argument that
+ ends in .cocci is assumed to be the name of the file containing the
+ semantic patch.
+- Allow limiting the size of a named cache using -cache_limit
+- Cache name specified with -cache_prefix is extended according to the
+ index (parallelism), if any.
+- Allow multi-character constants in C code and SmPL code. Thanks to Kamil
+ Pilch for pointing out the problem.
+- Better parsing of K&R C functions. No longer convert all parameters to
+ typedefs.
+- Implement newes as a hash table, for more efficiency on big sets of
+ environments.
+- A local variable that is declared without a type is not considered to be
+ a local variable. Actually, such a variable is probably really a macro
+ that expends to a declaration, and this macro is not the variable name.
+- Allow iteration to make modifications when the modifications are done
+ inplace.
+- -debug gives information about defined virtual rules and about virtual
+ identifier bindings.
+- no more crashing on c++-like code without the c++ argument.
+- dependencies can have ! on ()
+- Give ocaml code access to Flag and thus the current file name.
+- Slightly more efficient handling of lists.
+- Slightly better error message in the case of inconsistent paths
+- Improve limited size caching
+
+** Bugfix:
+- Corrected parsing of script strings delimited by a single quote. Thanks
+ to Eugeniy Meshcheryakov for reporting the problem.
+- Improved indentation of added ifdefs.
+- Allow added comments and #ifdefs to precede other added code. Thanks to
+ Jani Monoses for noticing the problem.
+- Corrected failure to due missing ocamlfind. Thanks to Derek M. Jones for
+ reporting the problem.
+- Allow fake nodes to be - in the allminus case, to drop tokens related to
+ a function definition or forward declaration but before the first code
+ mentioned in the semantic patch.
+- Drop __init etc when deleting a whole function.
+- Cause appropriate newlines to be preserved when multiple matches (trees)
+ contain adjacent modifications derived from the same SmPL code.
+- check_meta takes into account fresh identifier seed information.
+- Types for worth-trying optimization should not be followed by space
+- Improved filtering of result of matching atomic patterns
+- Drop positions before creating function prototype rules
+- Adjust position of { introduced by adding multiple statements in a
+ single-statement position
+- Drop newline after function call ( when all arguments on that line are
+ eliminated
+- Accept removal of a single declaration, replaced by arbitrary,
+ non-declaration code
+- smpl_spacing takes into account newlines, indentation
+- Improved prevention of transformations on toplevel { ... } from causing
+ changes outside function boundaries; also outside ifs, whiles, etc.
+ Changes are still allowed on { ... } present for other reasons.
+- Fix bug in include_match that caused everything to halt when all matches
+ were discarded
+- Don't call Insert_plus on rules that cannot be evaluated due to failed
+ dependencies.
+- Allow variable declaration right after a case in switch.
+- The top of a loop is also after the body of a loop, for ... in loop body
+- Do not anchor Str regexp at the beginning of the string to check
+- Type annotation for C code uses most recent env for typedefs when
+ possible. Thanks to Andrea Canciani for pointing out the problem.
+- Pretty print pointer types without a trailing space. Thanks to Michael
+ Stefaniuc for pointing out the problem.
+- Propagate dependencies further in get_constants2
+- Make lexer more dos friendly
+- slightly better handling of long long
+- Strip constraints from metavariables in function prototype treatment
+ before comparison, due to incomparability of pcre regexps.
+- Fixed obsolete regexp doc, thanks to Dmitry Osmakov
+- Improved x || ... || y to avoid double modification
+- Transparently allow \( \| and \) to be on lines beginning with -. The -
+ has no effect.
+- Remove memory leak related to pr2_once management. Thanks to Robert
+ Gomulka for helping to solve the problem. Don't use once hashtable if
+ messages won't be printed anyway.
+- Change the type of subtraction mixing pointer and array to have int result.
+ Thanks to Robert Gomulka for noticing the problem.
+- Fix interpretation of dependencies in the presence of virtual rules.
+ Ignore constraints on inherited position metavariables in a rule that
+ will be ignored.
+- Better support meta iterator and meta declarer tokens, and symid tokens.
+- Better indentation after added noindent.
+- Fixed length bug in the treatment of structures.
+- Allow inheriting declaration/field metavariables.
+- Don't drop spaces after parentheses in when no minus code present.
+ Thanks to Terry Wilson for reporting the problem.
+- Keep inherited metavariables in asttomember (preprocessing for matching)
+- allminus for types, to allow removing const, not just matching it
+- improved pretty printing when something is added before a closed brace
+- Allow matching on nameless structs. Thanks to Ron Minnich for reporting
+ the problem.
+- Pretty printing of const/volatile arrays in smpl code.
+
+* 0.2.5
+** Language:
+- Make a very small attempt to parse C++ code, amounting to accepting
+ identifiers containing ::, tilde, and template invocations. Use the
+ option -c++. This is not likely to be very useful in practice.
+- Added metavariable metavariable type.
+- Add disjunctions on identifiers in some contexts
+- Pretend that & indicates a pointer in -c++ mode
+- Support for new and delete
+- Allow arrays in smpl parameter declarations. Thanks to Jesper Louis
+ Andersen for pointing out the problem.
+- Field list metavariables
+- Add the ability to add __attributes__ (NB, no matching on attributes)
+- Slightly improved the error message for transformation on multiple
+ variable declaration. Thanks to Jonathan Nieder for pointing out the
+ problem.
+
+** Features:
+- support transformations on variables (only) in declarations that declare
+ multiple variables
+- allow #endif XXX in C code
+- relax_include_path now applied to non local includes too, in which case
+ it tries to find a unique file with a suffix of the provided name.
+ this is useful for directories that are intended to be symbolic links.
+- support matching and removing #undef
+- support for iteration in ocaml, requires use of -no_show_diff
+- calls to likely and unlikely propagate test expression status to their
+ arguments
+- reuse typedefs and macros from complete parsing when reparsing the
+ transformed code
+- better explanation when presenting glimpse tokens
+- optimization for an if branch that is just { ... }
+- spatch -control_flow_to_file file.c generates a file file.dot
+- include files with names ending in .cpp if -c++ option is given
+- removed use of the no longer supported sexplib function Conv.hashtbl_of_sexp
+- add information about which Fedora packages are needed
+
+** Bugfix:
+- improved parsing of expressions to allow ... to the right of operators in
+ more places
+- Fix check_config for Python 2.7 on Fedora 14 (Reported-by: Michael Stefaniuc)
+- Check for ocamlfind in configure (Reported-by: Paul E. McKenney)
+- Postpone use of ocamlfind at runtime to report fewer errors
+- Add support for Python 2.4 binding with the provided pycaml library
+- Allow '@' in script code. Thanks to Laurent Reveillere for noticing the
+ problem.
+- Remove an optimization of x or true to true in asttoctl2 for the case
+ where x may make a modification, eg the case of -thing ?-thing
+- Allow adding comments before a function.
+- Introduction of newlines in function arguments needs to take into account
+ that the code added by SmPL can include newlines. Thanks to Thomas
+ Gleixner for finding the problem.
+
+* 0.2.4
+** Language:
+- scripts now have names and can declare metavariables that are seen by
+ SmPL as identifier metavariables, see demos/{python,ocaml}tococci.cocci
+- declaration (match variable declarations) and field (match structure
+ field declarations) metavariables
+- matching of array initializations and of enum declarations
+
+** Features:
+- compatability with Python 2.7. Thanks to Richard W.M. Jones for pointing
+ out the problem
+- python and ocaml string representations of parameter lists and expression
+ lists
+- try simpler patterns on glimpse failure
+- graceful and immediate failure when a virtual rule is defined on the
+ command line, but not in the rule
+- spatch returns -1 when a virtual rule is requested that is not supported
+- no transformation when using * with the option -no_show_diff
+- expanded +++ file name for match output
+- struct *^* and enum *^* metavariable types
+- allow an assignment to match a variable initialization, even if multiple
+ variables are declared at the same time.
+- add the option -recursive_includes
+- added the option -use_idutils. The requires the previous use of the
+ script idutils_index.sh
+
+** Bugfix:
+- detect used after metavariables in simple statement metavariable match
+- allow inheriting position variables over rules that make transformations
+ but depend on virtual rules that are not defined on the command line
+- treat top-level tokens in decl visitor. Thanks to Peter Tummeltshammer
+ for noticing a resulting problem.
+- improve typing of the result of an assignment expression
+- eliminate some recursive calls in C code parsing to avoid stack overflows
+- better pretty printing of #define when the whole line is removed
+- better pretty printing of asm code containing
+ "::[input]"r"(&coherence_data[i])"
+- allow pretty printing of C code with nameless bit fields
+- avoid adding an error message to standard output if ocamlfind is not
+ found
+- struct/union/enum-typed metavariables with a metavariable type name
+- better management of whitespace between deleted lines. Thanks to
+ Andriy Gapon for noticing the problem.
+- improved parsing recovery for badly parsed struct/enum typedefs
+- drop expanded tokens in sgrep output. Thanks to Andriy Gapon for
+ noticing the problem.
+- constant strings have array type, not pointer type. Thanks to Vasiliy
+ Kulikov for noticing the problem.
+- improve indentation when adding code after a function call with indented
+ arguments.
+- return type of sizeof converted to unsigned long. Thanks to Vasiliy
+ Kulikov for noticing the problem.
+- improve spacing when adding structure initializers. Thanks to Vasiliy
+ Kulikov for noticing the problem.
+
+* 0.2.3
+** Language:
+- <= constraints relating an expression metavariable to one or more
+ inherited expression metavariables that it should be a subexpression of
+- the -inplace and -outplace options have been renamed -in_place and
+ -out_place. -in_place no longer makes a backup. A backup can be
+ requested using the option -backup_suffix, eg -backup_suffix .bk
+- identifiers can be constrained to be different from an inherited
+ identifier metavariable, or from a set containing both concrete
+ identifiers and inherited identifier metavariables.
+- support for ocaml scripting
+- ast available in ocaml scripts
+
+** Features:
+- drop inconsistent paths check when only one node was matched
+- allow #define id with no definition
+- attempt to add newlines in the generated code when function calls in the
+ smpl cause passing column 80
+- allow - in front of statement level nests, if everything inside the nest
+ is also -
+- 'configure' looks for some system libraries: menhirLib, sexplib, pycaml.
+ Not available libraries are replaced by a copy provided with the sources.
+- added static for a function goes just before what is specified in the
+ semantic patch, not before any comments etc.
+- Add a new option, -ignore_unknown_options, to ease the integration
+ of Coccinelle as a checker in a toolchain.
+- error in python code causes immediate abort of spatch
+- use the same algorithm for collecting grep tokens as for collecting
+ glimpse tokens
+- Add scripts/spatch.bash_completion for automatic completion of common
+ options under the bash shell.
+- Print rule name when a script rule crashes
+- Allow the declaration of an expression list or parameter list
+ metavariable to specify the number of expressions or parameters,
+ respectively.
+
+** Bugfix:
+- drop inconsistent paths check when only one node was matched
+- better take into account virtual rules when selecting glimpse tokens
+- print diff when only a comment is added
+- the type of the C code !x should be int regardless of the type of x
+- allow python code at the beginning of an included file
+- better adjustment of whitespace when deleting adjacent lines. Thanks to
+ Wolfram Sang for pointing out the problem.
+- allow metavariables to be inherited from included files
+- allow ? on goto
+- more graceful failure on finding a strange character in a macro parameter
+ list
+- support Parameter metavariables
+- add space after the last comma in an added portion of an argument list
+- SmPL nameless struct should only match a nameless struct, not a nameless
+ union. Thanks to Peter Tummeltshammer for pointing out the problem.
+- adjustments to storage don't modify inline as well
+- matching and transformation allowed on inline
+- allow removed field between two ... in structure initialization
+- allow removing an entire structure initialization
+- manage labels within do while 0 macros
+- added space after : in printing a conditional expression. Thanks to Josh
+ Triplett for noticing the problem.
+- dropped trailing whitespace when code at the end of a line is deleted.
+ Thanks to Josh Triplett for noticing the problem.
+- Fixed environment management when script rule uses cache. Thanks to
+ Bissyande for finding the problem.
+- when false matches if with no else
+- ensure { ... } with whencode checks to the end of the function. Thanks to
+ Rene Rydhof Hansen for finding the problem.
+
+* 0.2.2
+** Language:
+- Added ToTestExpression to iso language, see standard.iso for an
+ explanation
+- Added depends on to initialize and finalize script code
+
+** Features:
+- Update Emacs mode (cocci.el) to support 'virtual' rules and fix other
+ keywords sush as 'depends on', 'using', 'disable'
+- better treatment of != 0 in isos, communtativity for ==/!= for all
+ constants
+- allow adding // comments and blank lines (even after cocci + code)
+- Add support for multiple -I options
+
+** Bugfix:
+- correct interaction between virtual rules and included .cocci files
+- improvement in treatment of ! in isos, to avoid duplicating + code
+- improvement in treatment of metavars as isos, to avoid duplicating + code
+ between toplevel and variable instantiation
+- test expression of smpl conditional, etc no longer assumed to have type
+ int
+- correct + line numbers in the patch produced when using *
+- iso constant metavariable matches an identifier whose name is all capital
+ letters, eg NULL
+- allow / at the end of the name of a directory (-dir) or patch prefix
+ (-patch)
+- dropped space in + code after the binding of a type metavariable that is
+ a pointer type
+- better handling of . or .. in -dir name
+- allow keywords and metavariable names in identifier constraints (not sure
+ keywords is very useful, though)
+- no lubtype on arguments of && and || in SmPL
+- allow unknown as type for array indices in SmPL
+- support matching of static annotation on functions that are both static
+ and inline
+- support ENOTDIR error in Common.lfile_exists, to allow for the case where
+ an include file is in a subdirectory that exists but is an ordinary file,
+ not a directory.
+- better management of unbound position variables that appear in
+ constraints
+- cause python parser to skip over // comments, hoping that // is not
+ meaningful inside python
+- require + on every line of a multiline comment
+- correct calculation of line numbers when there is script code
+- always annotate arguments of && || and ! as test expressions in C code.
+
+* 0.2.1
+** Language:
+- Add virtual identifiers
+- Add coccilib.report and coccilib.trac Python modules
+- coccilib.org and coccilib.report are imported by default but not loaded
+ in the current scope.
+
+** Features:
+- Parse_error_msg now more helpful. New option -verbose_parsing for even
+ more information.
+- Improve Python import handling. They are imported once during script
+ initialization.
+
+** Bugfix:
+- correct treatment of depends on with || for virtual rules
+
+* 0.2.0
+** Language:
+
+** Features:
+- Remove duplicated code in disjunctions
+- Better error message when grep finds nothing relevant. Thanks to Joe
+ Perches for the suggestion.
+- added -keep_comments option for the unparsing of the transformed code
+- Option "-version" now also gives information about built-in
+ Python binding support.
+- slightly faster environment manipulation in pathological cases
+- hack added to accept well-formed #define after function header
+
+** Bugfix:
+- Proper consideration of #define macro arguments in checking for the use
+ of metavariables and in computing the line numbers of complex terms
+- Better parsing of included .cocci files
+- Put included .cocci files in the right order
+- Bind position variables only once for #include
+- Fix bug in include_match that caused everything to halt when all matches
+ were discarded
+- Merge unlikely/likely iso rules under a iso rule named unlikely
+- Some fixes to coccicheck rules, thanks to Andrew Lunn
+- Support groups in regular expression, thanks to Michael Stefaniuc
+
+* 0.1.11
+
+** Language:
+- Meta-identifier/function and constant could be filtered from SmPL by
+ regular expressions using the "~=" and "!~=" operators followed by
+ an OCaml regular expression (see man Str) in double quote.
+- Virtual rules, which can be referenced in depends, and set and unset
+ using the command-line options -D
+- ++ for multiple additions
+
+** Features:
+- coccicheck: a framework to check a series of SmPL files on a project
+ see scripts/coccicheck for more information
+
+** Bugfix:
+- bind position variables to the correct starting position in the case of a
+ complex statement such as an if or while. Thanks to Derek Jones for
+ pointing out the problem.
+- checking for non mentioned case lines in switch should be unchecked.
+- space should be printed after sizeof when there are no parentheses around
+ the argument. Thanks to Daniel Walker for pointing out the problem.
+- avoid introducing sharing in propagating ! over () in treatment of isos
+- save_excursion has to handle and rethrow exceptions
+- eliminate unnecessary consideration of CVS strings. Thanks to David
+ Young for pointing out the problem.
+- completely new treatment of statement metavariables
+- better type checking for macro definitions
+- drop regression testing in -parse_c
+
+* 0.1.10
+
+** Language:
+- declarations allowed in switch, suggested by Derek M. Jones
+
+** Features:
+- use interval timer for timeouts. Thanks to Derek M. Jones for the
+ implementation.
+- more flexible env.sh, thanks to Derek Jones.
+- faster Python invocation
+- simplify unparsing in the sgrep case
+
+** Bugfix:
+- for glimpse there is no point to create a pattern containing a numeric
+ constant because glimpse doesn't index them
+- add spaces after commas in function calls and function headers
+- made python integration more like the ubuntu version
+ http://patches.ubuntu.com/by-release/extracted/debian/c/coccinelle/0.1.5dbs-2/01-system-pycaml
+ this fixes some memory management problems with None, True, and False
+- correct labels associated with a switch in the CFG so that a statement
+ metavariable can match a switch. Thanks to Derek Jones for pointing out
+ the problem.
+- keep switch pattern within switch body. Thanks to Derek Jones for
+ pointing out the problem.
+- Allow expanded tokens to be stored in metavariables, as long as they are
+ not removed. But this does currently allow them in + code, which will
+ produce the expansion. Thanks to Ali-Erdem Ozcan for pointing out the
+ problem.
+- improved adjustment of spacing when code removed at the beginning of a line
+
+* 0.1.9
+
+** Language:
+- allow fresh identifiers to be declared using ## such that the value mixes
+ both strings and previously declared metavariables
+
+** Features:
+- better handling of expanded code containing ##. Now compute the
+ result.
+- more precise warning message for the "'\' outside define".
+ Thanks to Nicholas Mc Guire for pointing out the problem.
+- more precise warning message related to ifdefization.
+ Thanks to Derek Jones for pointing out the problem.
+- we don't create any more certain files in /tmp (they may be a cause
+ of security problems).
+ Thanks to Eugeniy Meshcheryakov for pointing out the problem.
+- More optimization for the case of just deleting a complete function.
+ Allows this to happen without tracing through all the control-flow
+ paths. Thanks to Francois Bissyande for pointing out the problem.
+- prevent code from being added to the beginning or end of a disjunction
+- more information about why a script is not applied when using -debug option
+- added -no_safe_expressions option
+- added -no_loops option. Ignores back edges derived from looping
+ constructs. This is unsafe, but perhaps useful for bug finding, as it can
+ be more efficient.
+- for semantic matches, allow "minus" on same code with multiple
+ environments
+- better error message for mismatch of parenthesis in column 0 with normal
+ parenthesis. Thanks to Derek Jones for pointing out the problem.
+- allow disjunctions on function return types. Thanks to Pierre Habouzit
+ for pointing this out.
+
+** Bugfix:
+- keep disjunction in the proper order for structure initialization fields
+- variables declared in different places should not seem to match each
+ other
+- drop complaints about label metavariables not being used
+- drop test information from the type of an expression when the expression
+ is bound to a metavariable
+- nests should not extend beyond the before and after code, even if the
+ before and after code matches the nest code
+- nests should extend into conditionals that end in error exit
+- take into account metavariables on "else". Thanks to Derek Jones for
+ pointing out the problem.
+- print single quotes on generated character constants
+- better typedef handling in the initialisation/affectation builtin
+ isomorphism, cf -test init_affect_typedef
+- support disjunction of types on variable declaration
+- allow @ within strings in script code. ignore // comment lines in script
+ code.
+- don't drop + code placed after the transformed code
+- drop spaces produced by removing code before semicolons
+- adjusted spacing within generated code
+- less verbose -sp. Thanks to Derek Jones for pointing out the problem.
+- accept multiple type names in a SmPL typedef declaration.
+
* 0.1.8
** Language:
- isomorphisms don't apply under signed/unsigned, to prevent the creation
of things like unsigned signed int. Need a better solution for this.
-
* 0.1.3
** Features: