On Sun, 2020-08-30 at 17:46 +0200, Julia Lawall wrote:
> [...]
>
> > Thanks, I used the slightly different from your suggestion
> > where sysfs is an identifier with function args and a
> > semicolon after the transform type, (otherwise I get cocci errors).
> > like this below:
> >
> > But it doesn't work (no renaming) when there is an
> > initializer to the variable to be transformed.
> >
> > ie:
> > {
> > ssize_t count = 0;
> > ...
> > count += sysfs_emit_at(buf, count, ...);
> > ...
> > return count;
> > }
> >
> > I tried adding =0 in various places without success.
> >
> > Suggestions?
> >
> > ------------------
> >
> > // Rename the sysfs_emit assigned variables not named len and not already
> > int
> > // and set the name to len and type to int
> >
> > @not_int_not_len exists@
> > type T != int;
> > identifier x != len;
> > position p;
> > identifier sysfs =~ "^sysfs_emit.*$";
> > assignment operator aop;
> > @@
> >
> > T x@p;
> > ...
> > x aop sysfs(...)
> > ...
> >
> > @@
> > type not_int_not_len.T;
> > identifier not_int_not_len.x;
> > position not_int_not_len.p;
> > @@
> >
> > - T x@p;
> > + int len;
> > <...
> > - x
> > + len
> > ...>
> >
> > ------------------
>
> The following:
>
> @not_int_not_len exists@
> type T != int;
> identifier x != len;
> position p;
> identifier sysfs =~ "^sysfs_emit.*$";
> assignment operator aop;
> @@
>
> T@p x;
> ...
> x aop sysfs(...)
>
> @@
> type not_int_not_len.T;
> identifier not_int_not_len.x;
> position not_int_not_len.p;
> @@
>
> (
> - T@p x;
> + int len;
> - T@p x
> + int len
> = ...;
> )
> <...
> - x
> + len
> ...>
>
> works on the following test file:
>
> int fn1()
> {
> ssize_t count = 0;
> count += sysfs_emit_at(buf, count, ...);
> return count;
> }
>
> int fn2()
> {
> ssize_t count;
> count += sysfs_emit_at(buf, count, ...);
> return count;
> }
>
> In the first rule, T@p x; benefits from an isomorphism to get the
> initialization case. That is not possible in the second rule, because the
> name of the declared variable is modified.
>
> I wonder why you use a regular expression for the sysfs identifier. I
> thought that there were only two choices? You will get better performance
> if you make those two choices explicit in the rule, with \( \| \).
Just because I'm accustomed to regex. I'll change it,
Thanks for all the comments and corrections.
cheers, Joe
_______________________________________________
Cocci mailing list
[email protected]
https://systeme.lip6.fr/mailman/listinfo/cocci