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