Let's say I want to write a patch that adds accessor functions for all the
fields in a struct. When I try to pass both a type and an identifier from one
rule to a Python script rule, it seems that I end up in an infinite loop (or at
least, 100% CPU usage that doesn't seem to go away).
What I tried to do was something like:
@s@
type t;
identifier x;
@@
struct thing {
...
t x;
...
};
@script:python p@
t << s.t;
x << s.x;
@@
print "type:", t, "identifier:", x
at which point things grind to a halt. Passing only the type or the identifier
prints what I would expect, except type rule only hits once for each type while
the identifier rule hits for each (yet, by their nature always unique) match
(which, I assume means that I completely misunderstand what it is that
coccinelle is doing!) Is there a way to do this that I've just missed?
Also, is there a way of matching in the code any expression involving a
particular type of field of a struct? Say you have something like the following
(which doesn't work):
@@
struct *thing;
int i;
expression E;
@@
- thing->i = E
+ thing_${i}_set(thing, E)
I can do the python re-writing of the function name without problem, but am
having trouble figuring out how to just match thing->something when it
evaluates to an int.
Thanks for helping out a coccinelle newbie.
Terry
_______________________________________________
Cocci mailing list
[email protected]
http://lists.diku.dk/mailman/listinfo/cocci
(Web access from inside DIKUs LAN only)