2bbcba928f
Changelog: * 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 conre 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 -ative 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 fo 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 inver 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 packagesed 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 xperimental feature. See demos/external_ana.{c,cocci,data}. ** 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, toop 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 otside 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 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 |
||
---|---|---|
.. | ||
patch-Makefile |