d0eee2bcfeb36c838384ba8ec9466fcfd682f614
[bpt/coccinelle.git] / changes.txt
1 -*- org -*-
2
3 * upcoming/planned/todo
4 ** Language:
5 - Semantic patch for other languages
6 - Support metavariables, virtual rules and virtual identifiers
7 in initialize and finalize rules
8 - Support for matching #ifdef, etc.
9 - function-typed metavariables
10 - virtual typedef, declarer name, iterator name
11 - regexps for type metavariables
12
13 ** Features:
14 - New scripting languages
15 - more than one SP on the command line
16
17 ** Bugfix:
18 - Add more information in documentation, man pages and wiki
19 - typedefs from C code should not be used before their point of inference
20 (saved_typedefs in cprogram_of_file)
21
22 * 1.0.0
23 ** Language:
24 - Addition of initializer list metavariables. Thanks to Michael Stefaniuc
25 for noticing the need for them.
26 - Allow multiple position variables per token
27 - ++ can now be associated with - code
28 - Allow /* */ comments as smpl comments, not only as + code
29 - Add support for && (label addresses)
30 - local idexpression metavariable no longer matches static local x
31 - Consider using to be a comment in C++ code. Patch submitted by Jani Monoses.
32 - Command line cocci
33 - print_main etc for ocaml Coccilib
34 - =~ not ~= is used to indicate a regular expression constraint on an
35 identifier. And !~ for a nonmatch.
36 - allow long double, short int, long int, and long long int in SmPL code.
37 - gcc constructors allowed in SmPL. Thanks to Uwe Kleine-Koenig for
38 pointing out the problem.
39
40 ** Features:
41 - Preserve spacing before // comments when not at the beginning of a line
42 - Adjusted parsing of endif to put it after jump code
43 - Improve warning message when using -use_cache
44 - More helpful initial value for exported variables in python
45 - Support - on expression nests
46 - Better handling of the case of a matched declaration that should only
47 be replaced by other top level things.
48 - Allow a semantic patch beginning and ending with braces to match the
49 complete body of a function if the braces are not removed and if nothing
50 is added before the first brace or after the last one.
51 - Add -cache_prefix option, to specify where to put cached files.
52 - Allow module_init(foo); to match module_init(foo) (or likewise for any
53 declarer), when no transformation is specified on the semicolon.
54 - Add Coccilib.exit() for ocaml code and cocci.exit() for python code,
55 to abort the treatment of the current file.
56 - Don't multiply print the same patch for the same file
57 - Drop date in diff
58 - Don't repeat smpl type warnings
59 - -sp_file/-cocci_file are now optional. If not present an argument that
60 ends in .cocci is assumed to be the name of the file containing the
61 semantic patch.
62 - Allow limiting the size of a named cache using -cache_limit
63 - Cache name specified with -cache_prefix is extended according to the
64 index (parallelism), if any.
65 - Allow multi-character constants in C code and SmPL code. Thanks to Kamil
66 Pilch for pointing out the problem.
67
68 ** Bugfix:
69 - Corrected parsing of script strings delimited by a single quote. Thanks
70 to Eugeniy Meshcheryakov for reporting the problem.
71 - Improved indentation of added ifdefs.
72 - Allow added comments and #ifdefs to precede other added code. Thanks to
73 Jani Monoses for noticing the problem.
74 - Corrected failure to due missing ocamlfind. Thanks to Derek M. Jones for
75 reporting the problem.
76 - Allow fake nodes to be - in the allminus case, to drop tokens related to
77 a function definition or forward declaration but before the first code
78 mentioned in the semantic patch.
79 - Drop __init etc when deleting a whole function.
80 - Cause appropriate newlines to be preserved when multiple matches (trees)
81 contain adjacent modifications derived from the same SmPL code.
82 - check_meta takes into account fresh identifier seed information.
83 - Types for worth-trying optimization should not be followed by space
84 - Improved filtering of result of matching atomic patterns
85 - Drop positions before creating function prototype rules
86 - Adjust position of { introduced by adding multiple statements in a
87 single-statement position
88 - Drop newline after function call ( when all arguments on that line are
89 eliminated
90 - Accept removal of a single declaration, replaced by arbitrary,
91 non-declaration code
92 - smpl_spacing takes into account newlines, indentation
93 - Improved prevention of transformations on toplevel { ... } from causing
94 changes outside function boundaries; also outside ifs, whiles, etc.
95 Changes are still allowed on { ... } present for other reasons.
96 - Fix bug in include_match that caused everything to halt when all matches
97 were discarded
98 - Don't call Insert_plus on rules that cannot be evaluated due to failed
99 dependencies.
100 - Allow variable declaration right after a case in switch.
101 - The top of a loop is also after the body of a loop, for ... in loop body
102 - Do not anchor Str regexp at the beginning of the string to check
103 - Type annotation for C code uses most recent env for typedefs when
104 possible. Thanks to Andrea Canciani for pointing out the problem.
105 - Pretty print pointer types without a trailing space. Thanks to Michael
106 Stefaniuc for pointing out the problem.
107 - Propagate dependencies further in get_constants2
108 - Make lexer more dos friendly
109
110 * 0.2.5
111 ** Language:
112 - Make a very small attempt to parse C++ code, amounting to accepting
113 identifiers containing ::, tilde, and template invocations. Use the
114 option -c++. This is not likely to be very useful in practice.
115 - Added metavariable metavariable type.
116 - Add disjunctions on identifiers in some contexts
117 - Pretend that & indicates a pointer in -c++ mode
118 - Support for new and delete
119 - Allow arrays in smpl parameter declarations. Thanks to Jesper Louis
120 Andersen for pointing out the problem.
121 - Field list metavariables
122 - Add the ability to add __attributes__ (NB, no matching on attributes)
123 - Slightly improved the error message for transformation on multiple
124 variable declaration. Thanks to Jonathan Nieder for pointing out the
125 problem.
126
127 ** Features:
128 - support transformations on variables (only) in declarations that declare
129 multiple variables
130 - allow #endif XXX in C code
131 - relax_include_path now applied to non local includes too, in which case
132 it tries to find a unique file with a suffix of the provided name.
133 this is useful for directories that are intended to be symbolic links.
134 - support matching and removing #undef
135 - support for iteration in ocaml, requires use of -no_show_diff
136 - calls to likely and unlikely propagate test expression status to their
137 arguments
138 - reuse typedefs and macros from complete parsing when reparsing the
139 transformed code
140 - better explanation when presenting glimpse tokens
141 - optimization for an if branch that is just { ... }
142 - spatch -control_flow_to_file file.c generates a file file.dot
143 - include files with names ending in .cpp if -c++ option is given
144 - removed use of the no longer supported sexplib function Conv.hashtbl_of_sexp
145 - add information about which Fedora packages are needed
146
147 ** Bugfix:
148 - improved parsing of expressions to allow ... to the right of operators in
149 more places
150 - Fix check_config for Python 2.7 on Fedora 14 (Reported-by: Michael Stefaniuc)
151 - Check for ocamlfind in configure (Reported-by: Paul E. McKenney)
152 - Postpone use of ocamlfind at runtime to report fewer errors
153 - Add support for Python 2.4 binding with the provided pycaml library
154 - Allow '@' in script code. Thanks to Laurent Reveillere for noticing the
155 problem.
156 - Remove an optimization of x or true to true in asttoctl2 for the case
157 where x may make a modification, eg the case of -thing ?-thing
158 - Allow adding comments before a function.
159 - Introduction of newlines in function arguments needs to take into account
160 that the code added by SmPL can include newlines. Thanks to Thomas
161 Gleixner for finding the problem.
162
163 * 0.2.4
164 ** Language:
165 - scripts now have names and can declare metavariables that are seen by
166 SmPL as identifier metavariables, see demos/{python,ocaml}tococci.cocci
167 - declaration (match variable declarations) and field (match structure
168 field declarations) metavariables
169 - matching of array initializations and of enum declarations
170
171 ** Features:
172 - compatability with Python 2.7. Thanks to Richard W.M. Jones for pointing
173 out the problem
174 - python and ocaml string representations of parameter lists and expression
175 lists
176 - try simpler patterns on glimpse failure
177 - graceful and immediate failure when a virtual rule is defined on the
178 command line, but not in the rule
179 - spatch returns -1 when a virtual rule is requested that is not supported
180 - no transformation when using * with the option -no_show_diff
181 - expanded +++ file name for match output
182 - struct *^* and enum *^* metavariable types
183 - allow an assignment to match a variable initialization, even if multiple
184 variables are declared at the same time.
185 - add the option -recursive_includes
186 - added the option -use_idutils. The requires the previous use of the
187 script idutils_index.sh
188
189 ** Bugfix:
190 - detect used after metavariables in simple statement metavariable match
191 - allow inheriting position variables over rules that make transformations
192 but depend on virtual rules that are not defined on the command line
193 - treat top-level tokens in decl visitor. Thanks to Peter Tummeltshammer
194 for noticing a resulting problem.
195 - improve typing of the result of an assignment expression
196 - eliminate some recursive calls in C code parsing to avoid stack overflows
197 - better pretty printing of #define when the whole line is removed
198 - better pretty printing of asm code containing
199 "::[input]"r"(&coherence_data[i])"
200 - allow pretty printing of C code with nameless bit fields
201 - avoid adding an error message to standard output if ocamlfind is not
202 found
203 - struct/union/enum-typed metavariables with a metavariable type name
204 - better management of whitespace between deleted lines. Thanks to
205 Andriy Gapon for noticing the problem.
206 - improved parsing recovery for badly parsed struct/enum typedefs
207 - drop expanded tokens in sgrep output. Thanks to Andriy Gapon for
208 noticing the problem.
209 - constant strings have array type, not pointer type. Thanks to Vasiliy
210 Kulikov for noticing the problem.
211 - improve indentation when adding code after a function call with indented
212 arguments.
213 - return type of sizeof converted to unsigned long. Thanks to Vasiliy
214 Kulikov for noticing the problem.
215 - improve spacing when adding structure initializers. Thanks to Vasiliy
216 Kulikov for noticing the problem.
217
218 * 0.2.3
219 ** Language:
220 - <= constraints relating an expression metavariable to one or more
221 inherited expression metavariables that it should be a subexpression of
222 - the -inplace and -outplace options have been renamed -in_place and
223 -out_place. -in_place no longer makes a backup. A backup can be
224 requested using the option -backup_suffix, eg -backup_suffix .bk
225 - identifiers can be constrained to be different from an inherited
226 identifier metavariable, or from a set containing both concrete
227 identifiers and inherited identifier metavariables.
228 - support for ocaml scripting
229 - ast available in ocaml scripts
230
231 ** Features:
232 - drop inconsistent paths check when only one node was matched
233 - allow #define id with no definition
234 - attempt to add newlines in the generated code when function calls in the
235 smpl cause passing column 80
236 - allow - in front of statement level nests, if everything inside the nest
237 is also -
238 - 'configure' looks for some system libraries: menhirLib, sexplib, pycaml.
239 Not available libraries are replaced by a copy provided with the sources.
240 - added static for a function goes just before what is specified in the
241 semantic patch, not before any comments etc.
242 - Add a new option, -ignore_unknown_options, to ease the integration
243 of Coccinelle as a checker in a toolchain.
244 - error in python code causes immediate abort of spatch
245 - use the same algorithm for collecting grep tokens as for collecting
246 glimpse tokens
247 - Add scripts/spatch.bash_completion for automatic completion of common
248 options under the bash shell.
249 - Print rule name when a script rule crashes
250 - Allow the declaration of an expression list or parameter list
251 metavariable to specify the number of expressions or parameters,
252 respectively.
253
254 ** Bugfix:
255 - drop inconsistent paths check when only one node was matched
256 - better take into account virtual rules when selecting glimpse tokens
257 - print diff when only a comment is added
258 - the type of the C code !x should be int regardless of the type of x
259 - allow python code at the beginning of an included file
260 - better adjustment of whitespace when deleting adjacent lines. Thanks to
261 Wolfram Sang for pointing out the problem.
262 - allow metavariables to be inherited from included files
263 - allow ? on goto
264 - more graceful failure on finding a strange character in a macro parameter
265 list
266 - support Parameter metavariables
267 - add space after the last comma in an added portion of an argument list
268 - SmPL nameless struct should only match a nameless struct, not a nameless
269 union. Thanks to Peter Tummeltshammer for pointing out the problem.
270 - adjustments to storage don't modify inline as well
271 - matching and transformation allowed on inline
272 - allow removed field between two ... in structure initialization
273 - allow removing an entire structure initialization
274 - manage labels within do while 0 macros
275 - added space after : in printing a conditional expression. Thanks to Josh
276 Triplett for noticing the problem.
277 - dropped trailing whitespace when code at the end of a line is deleted.
278 Thanks to Josh Triplett for noticing the problem.
279 - Fixed environment management when script rule uses cache. Thanks to
280 Bissyande for finding the problem.
281 - when false matches if with no else
282 - ensure { ... } with whencode checks to the end of the function. Thanks to
283 Rene Rydhof Hansen for finding the problem.
284
285 * 0.2.2
286 ** Language:
287 - Added ToTestExpression to iso language, see standard.iso for an
288 explanation
289 - Added depends on to initialize and finalize script code
290
291 ** Features:
292 - Update Emacs mode (cocci.el) to support 'virtual' rules and fix other
293 keywords sush as 'depends on', 'using', 'disable'
294 - better treatment of != 0 in isos, communtativity for ==/!= for all
295 constants
296 - allow adding // comments and blank lines (even after cocci + code)
297 - Add support for multiple -I options
298
299 ** Bugfix:
300 - correct interaction between virtual rules and included .cocci files
301 - improvement in treatment of ! in isos, to avoid duplicating + code
302 - improvement in treatment of metavars as isos, to avoid duplicating + code
303 between toplevel and variable instantiation
304 - test expression of smpl conditional, etc no longer assumed to have type
305 int
306 - correct + line numbers in the patch produced when using *
307 - iso constant metavariable matches an identifier whose name is all capital
308 letters, eg NULL
309 - allow / at the end of the name of a directory (-dir) or patch prefix
310 (-patch)
311 - dropped space in + code after the binding of a type metavariable that is
312 a pointer type
313 - better handling of . or .. in -dir name
314 - allow keywords and metavariable names in identifier constraints (not sure
315 keywords is very useful, though)
316 - no lubtype on arguments of && and || in SmPL
317 - allow unknown as type for array indices in SmPL
318 - support matching of static annotation on functions that are both static
319 and inline
320 - support ENOTDIR error in Common.lfile_exists, to allow for the case where
321 an include file is in a subdirectory that exists but is an ordinary file,
322 not a directory.
323 - better management of unbound position variables that appear in
324 constraints
325 - cause python parser to skip over // comments, hoping that // is not
326 meaningful inside python
327 - require + on every line of a multiline comment
328 - correct calculation of line numbers when there is script code
329 - always annotate arguments of && || and ! as test expressions in C code.
330
331 * 0.2.1
332 ** Language:
333 - Add virtual identifiers
334 - Add coccilib.report and coccilib.trac Python modules
335 - coccilib.org and coccilib.report are imported by default but not loaded
336 in the current scope.
337
338 ** Features:
339 - Parse_error_msg now more helpful. New option -verbose_parsing for even
340 more information.
341 - Improve Python import handling. They are imported once during script
342 initialization.
343
344 ** Bugfix:
345 - correct treatment of depends on with || for virtual rules
346
347 * 0.2.0
348 ** Language:
349
350 ** Features:
351 - Remove duplicated code in disjunctions
352 - Better error message when grep finds nothing relevant. Thanks to Joe
353 Perches for the suggestion.
354 - added -keep_comments option for the unparsing of the transformed code
355 - Option "-version" now also gives information about built-in
356 Python binding support.
357 - slightly faster environment manipulation in pathological cases
358 - hack added to accept well-formed #define after function header
359
360 ** Bugfix:
361 - Proper consideration of #define macro arguments in checking for the use
362 of metavariables and in computing the line numbers of complex terms
363 - Better parsing of included .cocci files
364 - Put included .cocci files in the right order
365 - Bind position variables only once for #include
366 - Fix bug in include_match that caused everything to halt when all matches
367 were discarded
368 - Merge unlikely/likely iso rules under a iso rule named unlikely
369 - Some fixes to coccicheck rules, thanks to Andrew Lunn
370 - Support groups in regular expression, thanks to Michael Stefaniuc
371
372 * 0.1.11
373
374 ** Language:
375 - Meta-identifier/function and constant could be filtered from SmPL by
376 regular expressions using the "~=" and "!~=" operators followed by
377 an OCaml regular expression (see man Str) in double quote.
378 - Virtual rules, which can be referenced in depends, and set and unset
379 using the command-line options -D
380 - ++ for multiple additions
381
382 ** Features:
383 - coccicheck: a framework to check a series of SmPL files on a project
384 see scripts/coccicheck for more information
385
386 ** Bugfix:
387 - bind position variables to the correct starting position in the case of a
388 complex statement such as an if or while. Thanks to Derek Jones for
389 pointing out the problem.
390 - checking for non mentioned case lines in switch should be unchecked.
391 - space should be printed after sizeof when there are no parentheses around
392 the argument. Thanks to Daniel Walker for pointing out the problem.
393 - avoid introducing sharing in propagating ! over () in treatment of isos
394 - save_excursion has to handle and rethrow exceptions
395 - eliminate unnecessary consideration of CVS strings. Thanks to David
396 Young for pointing out the problem.
397 - completely new treatment of statement metavariables
398 - better type checking for macro definitions
399 - drop regression testing in -parse_c
400
401 * 0.1.10
402
403 ** Language:
404 - declarations allowed in switch, suggested by Derek M. Jones
405
406 ** Features:
407 - use interval timer for timeouts. Thanks to Derek M. Jones for the
408 implementation.
409 - more flexible env.sh, thanks to Derek Jones.
410 - faster Python invocation
411 - simplify unparsing in the sgrep case
412
413 ** Bugfix:
414 - for glimpse there is no point to create a pattern containing a numeric
415 constant because glimpse doesn't index them
416 - add spaces after commas in function calls and function headers
417 - made python integration more like the ubuntu version
418 http://patches.ubuntu.com/by-release/extracted/debian/c/coccinelle/0.1.5dbs-2/01-system-pycaml
419 this fixes some memory management problems with None, True, and False
420 - correct labels associated with a switch in the CFG so that a statement
421 metavariable can match a switch. Thanks to Derek Jones for pointing out
422 the problem.
423 - keep switch pattern within switch body. Thanks to Derek Jones for
424 pointing out the problem.
425 - Allow expanded tokens to be stored in metavariables, as long as they are
426 not removed. But this does currently allow them in + code, which will
427 produce the expansion. Thanks to Ali-Erdem Ozcan for pointing out the
428 problem.
429 - improved adjustment of spacing when code removed at the beginning of a line
430
431 * 0.1.9
432
433 ** Language:
434 - allow fresh identifiers to be declared using ## such that the value mixes
435 both strings and previously declared metavariables
436
437 ** Features:
438 - better handling of expanded code containing ##. Now compute the
439 result.
440 - more precise warning message for the "'\' outside define".
441 Thanks to Nicholas Mc Guire for pointing out the problem.
442 - more precise warning message related to ifdefization.
443 Thanks to Derek Jones for pointing out the problem.
444 - we don't create any more certain files in /tmp (they may be a cause
445 of security problems).
446 Thanks to Eugeniy Meshcheryakov for pointing out the problem.
447 - More optimization for the case of just deleting a complete function.
448 Allows this to happen without tracing through all the control-flow
449 paths. Thanks to Francois Bissyande for pointing out the problem.
450 - prevent code from being added to the beginning or end of a disjunction
451 - more information about why a script is not applied when using -debug option
452 - added -no_safe_expressions option
453 - added -no_loops option. Ignores back edges derived from looping
454 constructs. This is unsafe, but perhaps useful for bug finding, as it can
455 be more efficient.
456 - for semantic matches, allow "minus" on same code with multiple
457 environments
458 - better error message for mismatch of parenthesis in column 0 with normal
459 parenthesis. Thanks to Derek Jones for pointing out the problem.
460 - allow disjunctions on function return types. Thanks to Pierre Habouzit
461 for pointing this out.
462
463 ** Bugfix:
464 - keep disjunction in the proper order for structure initialization fields
465 - variables declared in different places should not seem to match each
466 other
467 - drop complaints about label metavariables not being used
468 - drop test information from the type of an expression when the expression
469 is bound to a metavariable
470 - nests should not extend beyond the before and after code, even if the
471 before and after code matches the nest code
472 - nests should extend into conditionals that end in error exit
473 - take into account metavariables on "else". Thanks to Derek Jones for
474 pointing out the problem.
475 - print single quotes on generated character constants
476 - better typedef handling in the initialisation/affectation builtin
477 isomorphism, cf -test init_affect_typedef
478 - support disjunction of types on variable declaration
479 - allow @ within strings in script code. ignore // comment lines in script
480 code.
481 - don't drop + code placed after the transformed code
482 - drop spaces produced by removing code before semicolons
483 - adjusted spacing within generated code
484 - less verbose -sp. Thanks to Derek Jones for pointing out the problem.
485 - accept multiple type names in a SmPL typedef declaration.
486
487 * 0.1.8
488
489 ** Language:
490
491 ** Features:
492 - Metavariables now capture the cpp code contained within their definitions
493 - When - fragments are separated by ... or nest boundaries in the semantic
494 patch, but end up matching adjacent source code, the comments, cpp code
495 and whitespace that are between them are not deleted.
496 - better parsing of C: do expansion of macros only when needed when
497 have actually a parse error and also leverage the definition of macros
498 in the parsed file (or in a optional_standard.h file passed as a parameter).
499 This should reduce the need for many hardcoded definitions in standard.h
500 - new semantics for the -macro_file option, by default now expand macros
501 only when necessary. To force use the -macro_file_builtins option instead.
502 - a new -extract_macros command line action to help the parser. Works with
503 the -macro_file option. e.g.
504 $ ./spatch -extract_macros ~/linux > /tmp/alldefs.h
505 $ ./spatch -macro_file /tmp/alldefs.h -sp_file foo.cocci -dir ~/linux
506 - removed -D macro_file option, not consistent with what -D usually means
507 - reattempt to be more efficient for statement metavariables that are just
508 placeholders (ie, no modification, no reuse)
509 - triples now returned from ctl in sorted order. The main key is the
510 state. On the other hand, the state order does not always agree with the
511 order of appearance in the code.
512 - spatch is now less verbose on the things it does yet handle. Less confusing
513 for new users.
514 - slightly better error report. Thanks to Derek Jones for the suggestion.
515 - added the options -linux_spacing and -smpl_spacing. -linux_spacing
516 causes spatch to follow the spacing conventions of Linux, while
517 -smpl_spacing causes spatch to follow the spacing in the semantic patch.
518 -linux_spacing is the default.
519 - more informative error reporting for the already tagged token case.
520 Thanks to Erik Hovland for the suggestion.
521
522 ** Bugfix:
523 - better parsing of declare macro at toplevel and in structure.
524 cf -text xfield
525 - allowing back typedef names for fieldname
526 - better printing of else in generated code
527 - slightly better type inference for binary operators.
528 - clear out declarer names and iterator names between SmPL files (for
529 -testall)
530 - better parsing and type checking of macro type aliases. Cf -test macro_int16.
531 Thanks to Li Yingtong for pointing out the problem.
532 - make insert_virtual_positions tail rec, avoid stack overflow pb.
533 Thanks to Diego Liziero <diegoliz@gmail.com> for pointing out the
534 problem.
535 - Better type inference for arithmetic binary operators
536 Thanks to Li Yingtong for pointing out the problem.
537 - Better type inference for constants
538 Thanks to Li Yingtong for pointing out the problem.
539 - move computing of adjacency information for semantic patches to after
540 application of isomorphisms, because isomorphisms can introduce "..."
541 - compute adjacency information for negated ...
542 - record with each transformation site the set of indices of the witness
543 trees that caused the transformation site to come about. Whitespace and
544 comments between remove tokens associated with disjoint witness trees is
545 not removed.
546 - correct treatment of function pointer typed parameters in the SmPL ast0
547 visitor.
548 - better parsing error message and error recovery when comments are not ended,
549 when some macros have a weird body, and when some switch have a weird
550 Body.
551 Thanks to Derek Jones for pointing out the problem.
552 - better detection and passing of "dangerous" ifdefs, cf -test
553 double_switch.
554 - dropped the separation of decls and body in Seq. This gives better
555 positioning of the bindings of metavariables shared between them.
556 Thanks to Erik Hovland for an example that shows the problem.
557
558 ** Internals:
559 - supress warning in compiling ocamlsexp (warning caused by a new behavior
560 of cpp used internally in processing files in ocamlsexp/)
561
562 * 0.1.7
563
564 ** Language:
565 - initialize and finalize script code, cf demos/initial_final.cocci
566
567 ** Features:
568 - -iso_limit option to limit the depth of isomorphism application
569 - with the dir option, the include path is implicitly set to the "include"
570 subdirectory of the specified directory, if the option -I is not used.
571 - give a seed for the name of a fresh identifier
572 - better handling of cpp "constructed" identifiers as in a##b, that in
573 the futur will make it easier to match over those idents.
574 cf tests/pb_parsing_macro.c. Thanks to Ali-Erdem Ozcan for pointing
575 out the problem. A new "parsing hack hint" is also available:
576 YACFE_IDENT_BUILDER, cf standard.h.
577
578 ** Bugfix:
579 - drop excessive "optimization" in ctl generation for while and for loops
580 - allow . as the name of the directory
581 - for type inference for an assignment, take the type of the right-hand
582 side expression, not the type of the assigned variable
583 - allow for with a declartion in the first header element, as in C++
584 (partial support)
585 - allow for matching against variable declarations that include only
586 storage, eg static, but no type at all.
587 - allow for matching against types that contain both short/long and int
588 - allow the type metavariable in the SmPL code "unsigned T" to match a T
589 that is a type consisting of more than one word, eg long int.
590 - -ifdef_to_if option made to process nested ifdefs
591 (partial support)
592
593 ** Internals:
594 - improve and fix installation process (usable on BSD)
595 - improve and fix testing process
596 - apply patches from Eugeniy Meshcheryakov
597 - reorganize the way we parse C identifiers, especially concatenated cpp
598 identifiers as in a##b. This may lead to some regressions as we may
599 not parse as much code as before.
600 - removed popl/ and popl09/ and popl related stuff from official distrib.
601
602 * 0.1.6
603
604 ** Language:
605 - the ability to add comments
606
607 ** Features:
608 - grouping of generated rules with -hrule option
609 - handling of special coccinelle comments
610 /* {{coccinelle:skip_start}} */ and
611 /* {{coccinelle:skip_end}} */
612 allowing to give more hints to the C parser.
613 Thanks to Flavien@lebarbe.net for the idea.
614 - the ability to print the values of more (but not all) kinds of
615 metavariables from python
616 - new vim SmPL mode.
617 Thanks to Alexander Faroy.
618
619 ** Bugfix:
620 - consider the ident tokens also in the 2 lines before the error line for the
621 10-most-problematic-parsing-errors diagnostic.
622 - SmPL parser allows cast as the argument of a pointer
623 - SmPL type checker allows enum as an array index
624 - Better generation of fresh metavariables names in hrule
625 - no more warnings about things that should be metavariables when there is
626 a disjunction in a function position
627 - bugfix in parser, better error message.
628 Thanks to Ali-Erdem OZCAN <ali-erdem.ozcan@st.com> for the bug report.
629
630 ** Internals:
631
632 * 0.1.5
633
634 ** Language:
635 - added initialiser metavariable
636 - added sequences of designators in structures
637
638 ** Features:
639 - improved printing of the C code corresponding to metavariables
640 - improved printing when code (eg declarations) is removed at the beginning
641 of a block, and then is followed by a blank line
642 - slightly less verbose error reporting in parsing_hacks
643
644 ** Bugfix:
645 - fixed some problems with parsing SmPL code where a nest appears after a |
646 - better treatment of { }, form in macros wrt unparse_c
647 - less quiet for -parse_c
648 - improve parsing heuristics regarding macro statement
649
650 ** Internals:
651
652 * 0.1.4
653
654 ** Language:
655 - long long added to SmPL
656
657 ** Documentation:
658 - add grammar reference and spatch command line options reference
659
660 ** Features:
661 - can match patterns of the form unsigned T or signed T, where T is a
662 metavariable
663 - dropped the sizeof_parens isomorphism, which was made redundant by the
664 paren isomorphism
665 - simple rule generation
666
667 ** Bugfix:
668 - trailing , ; and ) no longer left on a line by themselves
669 - better treatment of error exit when the searched for code matches the
670 error exit condition.
671 - fix incorrect treatment of parentheses in test_exps that could allow +
672 code to be added twice
673 - don't ask whether iterator names and declarer names should be declared as
674 metavariables.
675 - slightly better support for expression list metavariables.
676 - short and long allowed for array index types in SmPL
677 - more restrictions on type inference for pointer arithmetic in SmPL
678 - allow isomorphisms to apply when + code is anywhere within all - terms
679 - changed order of printing const and volatile
680 - allow eg ... <... in plus code
681 - better formatting of generated if/while/etc. code
682 - better parse error reporting when the problem is at the end of the file
683
684 ** Internals:
685 - isomorphisms don't apply under signed/unsigned, to prevent the creation
686 of things like unsigned signed int. Need a better solution for this.
687
688 * 0.1.3
689
690 ** Features:
691 - help in building the configuration macro file. The -parse_c action
692 now returns the 10 most frequent parsing errors. This give useful
693 hints to extend standard.h.
694
695 ** Bugfix:
696 - positions no longer allowed on \(, \|, and \)
697 - improved propagation of negation for isos in the presence of parens
698 - convert Todos in flow graph construction to recoverable errors
699 - fixed bug in treatment of when != true and when != false, to allow more
700 than one of them per ...
701 - improve parsing of typedef of function pointer.
702 - improve typing.
703 - parsing and typing support for old style C function declaration.
704 - consider position variables as modifications when optimizing the
705 translation into CTL of function definitions
706
707 ** Internals:
708
709 * 0.1.2
710
711 ** Bugfix:
712 - better handling of ifdef on statements in control flow graph.
713 - transform files even if they do not end in .c (thanks to Vegard Nossum)
714
715 ** Internals:
716 - merge code of yacfe
717
718 * 0.1.1
719
720 ** Language:
721 - support for initializer at toplevel, cf -test substruct
722
723 * 0.1
724
725 ** first public release of the source code:
726
727 ** Language:
728 - embeded python scripting
729 - position
730
731 ** Features
732
733 * beta
734
735 ** first public release of the binary
736
737 * alpha
738
739 ** Features
740 - lots of features ... look at coccinelle research papers and tutorials.