On Tue, Dec 4, 2018 at 2:25 PM Julia Lawall <[email protected]> wrote:
>
>
>
> On Tue, 4 Dec 2018, Timur Tabi wrote:
>
> > On Thu, Nov 15, 2018 at 3:29 PM Julia Lawall <[email protected]> wrote:
> >
> > > The name of the current function at a given match is available in a
> > > position variable bound as part of that match. A position variable should
> > > have a current_element field.
> >
> > Unfortunately, I don't understand what you're saying. I see some
> > examples referencing the "position" in a Python script, but they don't
> > make any sense to me, e.g.
> >
> > http://coccinelle.lip6.fr/docs/main_grammar016.html#sec27
> >
> > The example shows:
> >
> > @ r exists @
> > local idexpression struct device_node *n;
> > position p1, p2;
> > statement S1,S2;
> > expression E,E1;
> >
> > I assume when you say "position parameter", you're talking about the
> > "position p1, p2;" above. If so, I'm completely confused.
>
> In the example, p1 will store the position of n. In the python rule, you
> can then access p1[0].current_element to get the name of the function in
> which n occurs.
What do you mean by "position of n"?
I managed to figure it out without using positional parameters. It
almost works in that it only does the replacement once:
// Look for NV_PRINTF2 calls that have the function name in the string
@r4 depends on rules@
identifier func;
expression x;
constant char[] c;
@@
func(...) {
...
NV_PRINTF2(x, c, ...)
...
}
// Get rid of the function name at the beginning of the string
@script:python s4@
c << r4.c;
c2;
f << r4.func;
@@
import re
coccinelle.c2 = re.sub('"%s[: ]*' % f, '"', c, 1)
@depends on rules@
expression x;
constant char[] r4.c;
identifier s4.c2;
@@
NV_PRINTF2(x,
-c
+c2
,...);
Based on what I've read, I need to add < > in order for spatch to run
the rule multiple times within a function. But if I change r4 to
this:
@r4 depends on rules@
identifier func;
expression x;
constant char[] c;
@@
func(...) {
<...
NV_PRINTF2(x, c, ...)
...>
}
It doesn't work at all.
_______________________________________________
Cocci mailing list
[email protected]
https://systeme.lip6.fr/mailman/listinfo/cocci