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