X-Git-Url: http://git.hcoop.net/bpt/coccinelle.git/blobdiff_plain/7f00441914f5b9bd4f845a1c866da65e1946083e..17ba07880e1838028b4516ba7a2db2147b3aa1c9:/changes.txt diff --git a/changes.txt b/changes.txt index 8946f0b..be84db4 100644 --- a/changes.txt +++ b/changes.txt @@ -1,5 +1,406 @@ -*- 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: @@ -10,15 +411,20 @@ - 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 +- 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 +- 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 @@ -336,7 +742,6 @@ - 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: