> >> // FIXME: match functions that do something with state_var underneath? > >> // How to do recursive rules? > > > > You want to look at the definitions of called functions? Coccinelle > > doesn't really support that, but there are hackish ways to add that. How > > many function calls would you expect have to be unrolled? > > > > I wouldn't expect more than a handful (~5). I suppose this has to do with > injecting some Python/Ocaml code? I have some examples bookmarked but > haven't gotten to stare at them long enough. You can look at iteration.cocci, but it's a bit complex. You could match definitions of functions that do what you are interested in, then store the names of these functions in a list (python/ocaml), and then look for calls to those functions. Something like identifier fn : script:ocaml() { in_my_list fn }; > >> // Fixup local variables > >> @depends on patch && state_access@ > >> identifier state_var = state_access.state_var; > >> @@ > >> ( > >> - long > >> + int > >> | > >> - unsigned long > >> + unsigned int > >> ) > >> state_var; > >> > >> // Fixup function parameters > >> @depends on patch && state_access@ > >> identifier fn; > >> identifier state_var = state_access.state_var; > >> @@ > >> > >> fn(..., > >> - long state_var > >> + int state_var > >> ,...) > >> { > >> ... > >> } > >> > >> // FIXME: find a way to squash that with the above? > > > > I think that you can make a disjunction on a function parameter > > > > fn(..., > > ( > > - T1 x1 > > + T2 x2 > > | > > - T3 x3 > > + T4 x4 > > ) > > , ...) { ... } > > > > My attempt at this gives me "minus: parse error", which is why I went > with the split. OK, the split is probably not a major catastrophe... julia > > Something simple like this works: > --- > virtual patch > virtual report > > @@ > identifier fn; > identifier p; > @@ > > fn(..., > - long > + int > p > ,...) > { > ... > } > --- > > but this doesn't: > --- > virtual patch > virtual report > > @@ > identifier fn; > identifier p; > @@ > > fn(..., > ( > - long p > + int p > | > - unsigned long p > + unsigned int p > ) > ,...) > { > ... > } > --- > > > julia > > >