On Tue, 15 Mar 2011, ygrek wrote: > On Sun, 13 Mar 2011 22:34:39 +0100 (CET) > Julia Lawall <[email protected]> wrote: > > > > One more question, can I tell spatch to always expand certain macros? Or > > > teach it any other way > > > that > > > CAMLlocal1(v); > > > is equivalent to > > > value v; > > > cause otherwise it sometimes assumes (I guess) that v is a global > > > variable and wrecks havoc when it matches > > > the name of local variable in another function.. I tried specifying it > > > via Declaration or Statement isomorphism > > > but failed. > > > > Create a file called macros.h and put in it > > > > #define CAMLlocal1(v) value v > > Sorry, but this doesn't seem to work. As you said in previous mail : > > > The problem is that (to the > > best of my knowledge) coccinelle only uses the definitions of macros if it > > can't parse the code otherwise, and in your case it has no problem parsing > > the code. > > and experiment confirms this : > > $ cat test.c > int main() > { > local(v); > v = 2; > size_t x; > x = 3; > } > > $ cat macro.h > #define local(z) size_t z > > $ cat test.cocci > @@ idexpression size_t X; expression E; @@ > <... > - X = E; > + X = E + 1; > ...> > > $ spatch -macro_file macro.h -sp_file test.cocci test.c > init_defs_builtins: /usr/share/coccinelle/standard.h > init_defs: macro.h > HANDLING: test.c > diff = > --- test.c 2011-03-15 23:10:21.550112816 +0200 > +++ /tmp/cocci-output-31750-9aaf83-test.c 2011-03-15 23:11:47.198114542 > +0200 > @@ -3,5 +3,5 @@ int main() > local(v); > v = 2; > size_t x; > - x = 3; > + x = 3 + 1; > } > > My understanding is that local(v) is parsed successfully as function call and > hence macro.h is > not consulted at all. Hence my seeking to "force" coccinelle expand the macro > before the first > parse pass..
-macro_file_builtins rather than -macro_file might help. julia _______________________________________________ Cocci mailing list [email protected] http://lists.diku.dk/mailman/listinfo/cocci (Web access from inside DIKUs LAN only)
