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