- 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.
+- allow mixing isomorpisms with normal rules
** Features:
- New scripting languages
+- more than one SP on the command line
+- interpret #if, as is done for #ifdef
** 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.
+- Allow size_t as the type of an array index in smpl code. Reported by
+ Mansour Moufid.
+- Allow renaming an expression as an identifier (@i)
+- Support const/volatile after *. Thanks to Lars-Peter Clausen for
+ pointing out the problem.
+- Support variable declarations in the first element of a for loop header.
+
+** 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
+- Remove zero #ifdefs when everything else is removed
+- Mac OSX compatibility (tested on OSX Lion)
+- 'Make depend' is called automatically when starting from a cleaned source
+- Configure flag --enable-release makes 'make' build the optimized version of
+ coccinelle if possible.
+- The installed 'bin/spatch' calls spatch.opt or spatch with default parameters
+ for iso/headers/python. 'bin/spatch.opt' and 'bin/spatch.byte'
+- The bundled packages are now in the 'bundles' subdirectory and in the
+ form of their original tarballs. These are extracted and used on-demand.
+- Compatibility with python 2 and python 3. Also, a small bug is fixed in the order
+ of library includes that caused sometimes trouble when building the pycaml library.
+- Dropped the dependency on Perl in the Makefiles
+- The configure script uses pkg-config and ocaml findlib and provides many
+ flags for tuning/overriding the build process (including the ocaml
+ compiler and the C compiler and preprocessor).
+- Add line number directives to the .ml file generated from a .cocci file
+- Added 'make check' as an alternative to 'make test'. It can run after
+ building spatch, checks whether some featues work (python and ocaml scripts,
+ regexes) if these features are enabled, and then launches the test suite
+ with a 75% success rate requirement. It also does not ask for user input
+ and can be used in autonomous builds.
+- Added an experimental --reverse flag to invert the semantic patch before application.
+ Note that not all patches can be inverted, nor is it guaranteed that applying
+ a patch followed by applying its inverse is an identity operation.
+- Cache prefix takes distribution index into account.
+- Add --defined and --undefined options allowing some code not to be
+ touched. Suggested by Eric Leblond.
+- Dropped the need for the ocaml-extlib and ocaml-sexplib packages.
+- Changed the file format of the regression test results. Files in the old format
+ are no longer readable by spatch.
+- Added a crude mechanism for integrating the results of external analyses with
+ coccinelle, using positions to connect them together. This is an experimental
+ feature. See demos/external_ana.{c,cocci,data}.
+- Try to do better pretty printing when array elements are individually
+ replaced
+- Just fail quietly on attempt to remove a multi-variable declaration,
+ allowing the semantic patch to continue. A warning message is printed.
+- Ignore unknown identifiers around known types.
+- Ignore --use-glimpse if multiple directories given
+- Added support for c++ namespace syntax in cocci files.
+- Improved c++ parsing
+- Addition of gcc min and max operators. Thanks to Holden Karau
+
+** 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.
+- Don't allow just dropping an exp or type
+- Avoid removing #endif when surrounded by - code
+- Print some important error messages even with the --very-quiet flag.
+- Fixed parallel building in the Makefiles
+- Fixed the compilation of the "pure bytecode" version. If you use the
+ bundled pycaml or ocaml-pcre, you'll need their stub libraries in
+ your LD_LIBRARY_PATH.
+- For get_constants, virtuals should be false, not true
+- C parsing of top-level declarers with initializations.
+- Remove constraints in predicates in match result, to avoid PCRE equality
+ problems
+- Enum assignment matching an enum value shouldn't cause a
+ crash. Likewise, an identifier matching an initialized enum field
+ shouldn't cause a crash.
+- Make when forall in an exists rule behave (more) like forall
+- Ocaml 4.00.0 compatibility fixes
+- Drop inlines, reduce parser code size
+- Bind const_vol in the right order in Ast0 visitor
+- use arg_expression for printing iterator arguments instead of expression,
+ to get the right spacing. Thanks to Lars-Peter Clausen for the fix.
+- Better spacing for generated argument lists. Thanks to Lars-Peter Clausen
+ for reporting the problem.
+- Collect all module interfaces for ocaml scripting in a single
+ coccilib.cmi file, with the list of exposed internal modules in
+ ocaml/exposed_modules.ml. This simplifies the installation of the
+ ocaml version of coccilib, and allows us to specify which modules
+ can be accessed by an ocaml script. The coccilib.cmi must either
+ reside in $COCCI_DIR/ocaml/ or $COCCI_DIR/ocaml/coccilib/.
+- Ocamlbuild-based compilation of coccinelle (experimental). In a
+ cleaned repository, use the configure option --enable-ocamlbuild to
+ enable it. The Makefiles will then use ocamlbuild.
+- Ocamlscripts can access more of coccinelle: the file
+ ocaml/exposed_modules.ml specifies which modules are accessible.
+- Use arg_expression to print macro arguments. Thanks to Lars-Peter
+ Clausen for the fix.
+- Remove some trailing whitespace due to unindent or added if braces.
+ Thanks to Eric LeBlond for reporting one of the problems.
+- Remove undesired newline after if header when body is a metavariable.
+ Thanks to Eric LeBlond for reporting the problem.
+- Improve macro expansion to take into account variable numbers of
+ arguments
+- Don't count macros or ifdefs in counting fields
+- Better counting of indent size when indent contains multiple tabs
+- Get the right annotation on trailing , that is after a nest. Requires
+ avoiding double processing in transformation_c.ml
+- Fixed an issue where an 'Impossible' exception could be raised.
+- Fixed an issue where some identifiers were incorrectly interpreted as typedef.
+- allow __ at the beginning of a struct or union name
+- unparsing with precedence
+- Type metavariable should not match a case where there is no type in the
+ C code. Thanks to SF Markus Elfring for pointing out the problem.
+- Allow an expression list metavariable to be attached to a parameter list
+ metavariable, to allow using the parameter names as an argument list.
+ Thanks to Michael Stefaniuc for pointing out the need for this feature.
* 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
- 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: