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)

Reply via email to