Log message:
coccinelle: update to 1.1.1.
* 1.1.1
** 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.
- 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
- restored support for with-python in configure and support for --python option
in the command line to use a specific python interpreter
** 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.1.0
** Language
- Allow fresh ids to be generated from a script
- Account for metavariables used as the argument of typeof
- Allow for annotations as metavariables
- Allow auto as type when processing a C++ file (C++ >= 11)
- bool is now a known typedef
- Add support for statement list
- Better handling of annotations
** Features
- Allow command line options to be written in cocci files using the #spatch
directive
- Add --opt-c option to try and process a C file only if it exists (ignore
its absence otherwise)
- Allow for user to optionally specify the C++ version with the --c++ argument
- More efficient management of header files
** Bugfix
- Improved documentation (mostly metadecl)
- Improved pretty printing
- Improved error reporting
- Better handling of "complex" pointer types (e.g. char * const *)
- Fix expected grammar to better fit C99's:
- Allow assigning to the dereferencing of a function call. Problem reported
by Joe Perches
- Camlp4 is no longer needed
- Removed the pygtk dependency
- Stop relying on Pervasives but on Stdcompat.Stdlib for backward compatibility
* 1.0.9
** Language:
- More kinds of string and char constants, mostly from C11. Not typed
correctly. Requested by Michael Stefaniuc.
- Field conj, disj, and opt can now successfully match field metavariables
** Features:
- Try to avoid passing arguments of macro calls with no trailing semicolon
** Bugfix:
* 1.0.8
** Language:
- Support for long double complex, double complex and float complex at the
C and SmPL level.
- Add conjunction for identifiers.
- Simplify pragma matching.
- Support llu in C code and SmPL code. Suggested by Timur Tabi.
- Add support for macros with an initialiser as the body. Requested by
Thomas Pedersen.
- Allow scripts on comment metavariables. Requested by Christoph Böhmwalder.
** Features:
- Some changes to the kinds of transformation allowed on declarations or
fields with multiple variables. See the last paragrph of the
declarations section in the manual.
- Minimal support for multi-line pragmas. C parsing is supported, but
matching is not.
- Allow changing the extension of the name of the file checked by
--compare-with-expected, using the --expected-extension flag.
- Optimize case of { ... } when the braces are removed to avoid going
through the body.
- Allow const on signed/unsigned in SmPL.
** Bugfix:
- check identifier constraints when an identifier metavariable appears in a
struct-typed metavariable.
- type for eg &a->b should be const when a is const
- Allow modifications within a function pointer typedef - reported by
Jerome Glisse
* 1.0.7
** Language:
- Allow constraints on any metavariables. Constraints can be specified
by comprehension (= { ... } or != { ... }, with each item referring
to a constant identifier or an inherited meta-variable, and
curly-brackets can be omitted for a single item), regular expression
(=~ "..." or !~ "..."), integer comparison (<=, <, \
>=, >) or scripts
(:script:...). Constraints can be used in conjunctions (&&),
disjunctions (||) and can be negated (!) and parenthesized.
Sub-expression constraints (<=) are still dealt separately and can
only be used individually or in conjunction with other constraints
(not under a disjunction or a negation). See tests/constraints.cocci
and tests/type_constraints.cocci
- Allow script finalizers for parallel computation. See
tests/countcalls.cocci and tests/countcalls_python.cocci
- Allow disjunctions on a wider range of syntactic constructions (function
definitions, variable declarations, ...). See tests/disj.cocci.
- Finalizers now occur before iteration loop and can register new
iterations.
- Multiple initializers and finalizers are allowed for the same language.
- Support function pointer types in casts.
- Allow something identified as a MacroDecl as a structure field.
- Conjunctions, ie ( & ), for declarations.
- Optional bitfield annotation on expression meta-variables. Requested by
Kumar Gala. See tests/bitfield_matching.cocci
- Bit-field matching, see tests/bitfield.cocci
- Anonymous field matching, see tests/anonfield.cocci
- current_element position information in position structure (ocaml &
python)
- matching and transformation of a single attribute after a variable name
in a variable declaration.
- add conjunctions on types.
- make addition of __attribute__((...)) on function definitions work
- add typeof to the semantic patch language
- require "name" when declaring attribute names.
- Support some changes on function pointer typedefs.
- allow a coccinelle ocaml script to detect whether parallelism is used,
via Flag.parmap_core (None for no pararallelism, and Some x for x cores)
- Make it possible to match or add an empty struct type declaration.
Suggestion of Michele Martone.
- --backup-suffix replaced by --suffix and made applicable to --out-place
** Features:
- Better error reporting for unparsable terms when using make_expr etc in
script code. Problem reported by Markus Elfring.
- --ignore command line argument to specify a prefix of the names of files
that should be ignored.
- added --max-width to adjust the line width for generated code. Requested
by Kumar Gala.
- forall and exists for quantifying over the success of matching depends on
constraints.
- --verbose-includes option to show what files are actually included
- allow casts to unknown typedefs on more kinds of constants (reported by
Yann Droneaud)
- Pick up header files that have the same name as the desired one if they
are unique in the provided include paths.
- Caching of parsed header files, --no-include-cache to disable.
- --force-kr and --prevent-kr options to control whether K&R parsing is
considered.
- Generalization of script constraints to allow reference to metavariables
defined in the same rule, only when the constrained metavariable always
occurs in rule_elems that also mention any other local metavariables
mentioned in the script constraint. Referenced local variables must be
declared before the constrained one.
- Allow more variety in #pragmas
- Add macro names to Coccilib.current_element
- Get rid of code that depends on unbound virtual rules
- Bash-completion scripts are now installed in share/bash-completion/completions
(overridable with the new with-bash-completion option,
reported by Himanshu Jha)
- Allow using -o when only the main file changes, even if headers have been
matched.
- Preserve spacing for comments in statement and declaration metavariables,
when they are used in + code.
** Bugfix:
- Improved detection of metavariables in strings. Problem reported by
Wolfram Sang.
- Don't require all metavars in type exp meta constraint to be bound,
unless only one type is specified. Problem reported by Michael Stefaniuc.
- Finalization scripts are executed even in case there is no other script rules.
- spatch should find standard.iso and Python modules even if COCCINELLE_HOME
and PYTHONPATH are not set (either in the directory where the executable is
if it contains standard.iso, or in ../lib/coccinelle relatively to where the
executable is).
- Improve SmPL parsing of added __attribute__. Problem repported by
Eduardo Habkost.
- In python scripts, virtuals should not overwrite locals with the same
name. Problem reported by Bhumika Goyal.
- Identify typedefs in type metavariable constraints, problem identified by
Michele Martone.
- #ifdefs and cpp directives should not be able to be bound to MetaField
metavariables. Problem found using an example contributed by Michele
Martone.
* 1.0.6
** Language:
- Allow \ in #define in semantic patch rules, to allow body with multiple
lines, potentially including changes. As a side effect, \ is also
allowed in when specifications, again to allow patterns to stretch over
multiple lines.
- Add identifier list metavariables for #define parameter lists
** Features:
- Add Coccilib.version() allowing ocaml code to access the version of
spatch being used.
- Per file profiling with --profile-per-file for processing of directories.
- allow -j9 and -Ifoo, as used in some other tools
** Bugfix:
- Allow parallel compilation for bundles. Issue identified by Luis Rodriguez.
- Allow the use of absolute path names with id-utils. Issue identified by
Luis Rodriguez.
- Clean up temporary files when using parmap. Issue identified by Luis
Rodriguez.
- Do nothing when there are no files to work on, avoiding parmap temporary
file creation issues.
* 1.0.5
** Language:
- In the Coccilib interface, the function file, giving the file being
currently processed, has become files, returning a list of file names,
because Coccinelle can work on more than one file at once.
- For typedefs, symbols, iterator names, and declarer names, allow
redeclaration as either the same kind, or temporary redeclaration as a
metavariable.
- Support for Python 3. Pycaml has been patched. The bundled version is
systematically used, even if Pycaml is already installed locally.
- Support for iterations in Python scripts
- Metavariable initialization in Python scripts to a number of kinds of
AST structures
** Features:
- addition of --file-groups option
- ocaml code allowed as constraints on position variables
- --enable-release configure option not accepted any longer.
- Extend pycocci SmPL <=> Patch equivalence proof with [ -c | --clean-proof ]
support to enable support for a quiet and clean SmPL patch proof, this will
nuke any temporary branches used for the proof if everything went well.
- Add support for SmPL <=> Patch equivalence using pycocci using patches,
for an example refer to:
o tests/pycocci/patches/0001-proto3*
o tests/pycocci/code/0001-proto3/
To test, use: ./scripts/pycocci-check.sh after building Coccinelle.
This will touch your reflog though, and as such is disabled by default,
to clean your reflog you can use: git reflog expire --all --expire=now
- Added --tmp-dir option, to specify the name of the temporary directory
used to hold the results obtained on the different cores with the -j option.
- --defined and --undefined arguments now apply to #if as well as #ifdef.
The expression has to be written exactly as it appears in the code, minus
leading whitespace and any comments (leading or nonleading).
- Compare the standard output of scripts in test files with testfile.stdout
if provided (with --compare-with-expected)
- Compatible with OCaml 4.03.0
** Bugfix:
- pycocci: skip proof when git dir is dirty
- pycocci: fix gitname use, when using SmPL <=> patch equivalence proof
support and a relative path was used as target the git project base
directory was not being found, using absolute paths fixes this.
- Don't complain about unreferenced variables in ungenerated rules
- Be flexible about the matching of the first or last comma in a
... parameter or expression list, also in the case of transformation.
- Fix various omissions related to binary and assignment metavariables.
- Add whitespace on C code/transformed code boundary.
- Types declared in header files are now taken into account while parsing
C files.
- ( and & now allowed at the start of a line in a SmPL rule header
- Remove added space when removing unneeded parens at the start of an
arglist, reported by Daniel Lundqvist
- Better pretty printing of array type declarations that result from T i;
where at least T is a metavariable.
- Various improvements in the pretty printing of C code stored in
metavariables.
- Bundled Menhir can now be used to compile the mly grammar.
- Bundled PCRE now links correctly.
* 1.0.4
** Language:
- Length for statement list metavariables
** Features:
- file in declaration for depends on constraints
** Bugfix:
- build system: delete pregenerated parsers if menhir is installed
* 1.0.3
** Language:
- Conjunction (analogous to disjunction)
- Drop Circles, Stars
- Drop Unique
- Default values for script metavariables
** Features:
- Removed the extlib and sexp bundles which were not used any more.
- Drop support for OCaml 3.11 which did not allow to compile coccinelle in
native code
- Print metavariables properly for script code.
- Print metavariables properly for cocci code.
- SYSCALL_DEFINE macros, contributed by Jörn Engel
- --indent option, giving default indent, for projects not using tabs
- Introduce .cocciconfig configuration file
- Add some support for MetaStmtList. Allowed at top level of {}.
- timeout of 0 is no timeout, to allow cancelling this option.
- --print-options-only to see accumulated options.
** Bugfix:
- Allow virtual variable definition to contain an =.
- Improvement when exists rule contains when forall.
- The presence of camlp4 is no longer checked when not needed
(only required to compile the bundled OCaml bindings for Python)
* 1.0.2
** Language:
** Features:
- Positions of C tokens are now computed while lexing rather than
during a distinct pass. This makes use of the Lexing.new_line function
which has been introduced in OCaml 3.11.
Coccinelle can thus no longer be compiled with OCaml 3.10.
- --use-gitgrep falls back to --use-coccigrep for a non-git repository.
- ocaml coccilib allows propagating identifiers, expressions, statements,
listlens, and positions to subsequent matching rules, via new ocaml code
constructors: make_ident, make_expr, make_expr_with_env etc.
- Allow @S, for statement metavariable S on expressions
- Exploit explicit positive constraints (no regexps) on identifiers in
file filtering
- Ability to declare a rule as matching an identifier. Doesn't work
properly for names of typedefs, enums, structures, or unions.
- autogen creates a version number that corresponds to the most recent commit.
** Bugfix:
- Coccinelle's "make install" now copies files to /usr/local/lib instead of
/usr/local/share
- Iso: allow mixed for model for the case where the model is just a metavar
Thanks to Kris Borer for reporting the problem
- Allow ! to propagate into == or other ops in more cases.
|