cocci.inria.fr archive mirror
 help / color / mirror / Atom feed
* [Cocci] How to concatenate identifier with text?
@ 2019-05-24 19:13 Timur Tabi
  2019-05-24 19:36 ` Timur Tabi
  2019-05-24 19:38 ` Julia Lawall
  0 siblings, 2 replies; 8+ messages in thread
From: Timur Tabi @ 2019-05-24 19:13 UTC (permalink / raw)
  To: cocci

@@
identifier func;
@@
func(...) {
<+...
     .... stuff
+   goto func_exit;
+}
...+>
}

So if I have this code:

void myfunc(int x)
{
}

I want it to look like this:

void myfunc(int x)
{
    goto myfunc_exit;
}

My problem is that cocci takes "func_exit" literally.  I tried
func##_exit, but that didn't work.  How do I make this work?
_______________________________________________
Cocci mailing list
Cocci@systeme.lip6.fr
https://systeme.lip6.fr/mailman/listinfo/cocci

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [Cocci] How to concatenate identifier with text?
  2019-05-24 19:13 [Cocci] How to concatenate identifier with text? Timur Tabi
@ 2019-05-24 19:36 ` Timur Tabi
  2019-05-24 19:38   ` Julia Lawall
  2019-05-24 19:38 ` Julia Lawall
  1 sibling, 1 reply; 8+ messages in thread
From: Timur Tabi @ 2019-05-24 19:36 UTC (permalink / raw)
  To: Timur Tabi; +Cc: cocci

On Fri, May 24, 2019 at 2:13 PM Timur Tabi <timur@kernel.org> wrote:

> void myfunc(int x)
> {
>     goto myfunc_exit;
> }
>
> My problem is that cocci takes "func_exit" literally.  I tried
> func##_exit, but that didn't work.  How do I make this work?

I figured it out:

@@
identifier func;
fresh identifier label = func ## "_exit";
@@
func(...) {
<+...
+    goto label;
...+>
}
_______________________________________________
Cocci mailing list
Cocci@systeme.lip6.fr
https://systeme.lip6.fr/mailman/listinfo/cocci

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [Cocci] How to concatenate identifier with text?
  2019-05-24 19:13 [Cocci] How to concatenate identifier with text? Timur Tabi
  2019-05-24 19:36 ` Timur Tabi
@ 2019-05-24 19:38 ` Julia Lawall
  1 sibling, 0 replies; 8+ messages in thread
From: Julia Lawall @ 2019-05-24 19:38 UTC (permalink / raw)
  To: Timur Tabi; +Cc: cocci



On Fri, 24 May 2019, Timur Tabi wrote:

> @@
> identifier func;
> @@
> func(...) {
> <+...
>      .... stuff
> +   goto func_exit;
> +}
> ...+>
> }
>
> So if I have this code:
>
> void myfunc(int x)
> {
> }
>
> I want it to look like this:
>
> void myfunc(int x)
> {
>     goto myfunc_exit;
> }
>
> My problem is that cocci takes "func_exit" literally.  I tried
> func##_exit, but that didn't work.  How do I make this work?

Python.  You need one rule to collect the func name, then a python rule to
create the new identifier you want, and then a third rule to do the
transformation.  See coccinelle/demos/pythontococci.cocci

julia
_______________________________________________
Cocci mailing list
Cocci@systeme.lip6.fr
https://systeme.lip6.fr/mailman/listinfo/cocci

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [Cocci] How to concatenate identifier with text?
  2019-05-24 19:36 ` Timur Tabi
@ 2019-05-24 19:38   ` Julia Lawall
  2019-06-11 21:51     ` Timur Tabi
  0 siblings, 1 reply; 8+ messages in thread
From: Julia Lawall @ 2019-05-24 19:38 UTC (permalink / raw)
  To: Timur Tabi; +Cc: cocci



On Fri, 24 May 2019, Timur Tabi wrote:

> On Fri, May 24, 2019 at 2:13 PM Timur Tabi <timur@kernel.org> wrote:
>
> > void myfunc(int x)
> > {
> >     goto myfunc_exit;
> > }
> >
> > My problem is that cocci takes "func_exit" literally.  I tried
> > func##_exit, but that didn't work.  How do I make this work?
>
> I figured it out:
>
> @@
> identifier func;
> fresh identifier label = func ## "_exit";

Yes, that works too.  Simpler than my suggestion.

julia

> @@
> func(...) {
> <+...
> +    goto label;
> ...+>
> }
> _______________________________________________
> Cocci mailing list
> Cocci@systeme.lip6.fr
> https://systeme.lip6.fr/mailman/listinfo/cocci
>
_______________________________________________
Cocci mailing list
Cocci@systeme.lip6.fr
https://systeme.lip6.fr/mailman/listinfo/cocci

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [Cocci] How to concatenate identifier with text?
  2019-05-24 19:38   ` Julia Lawall
@ 2019-06-11 21:51     ` Timur Tabi
  2019-06-11 21:58       ` Timur Tabi
  2019-06-12  5:25       ` [Cocci] How to concatenate identifier with text? Julia Lawall
  0 siblings, 2 replies; 8+ messages in thread
From: Timur Tabi @ 2019-06-11 21:51 UTC (permalink / raw)
  To: Julia Lawall; +Cc: cocci, Timur Tabi

On Fri, May 24, 2019 at 2:38 PM Julia Lawall <julia.lawall@lip6.fr> wrote:
> On Fri, 24 May 2019, Timur Tabi wrote:
> > I figured it out:
> >
> > @@
> > identifier func;
> > fresh identifier label = func ## "_exit";
>
> Yes, that works too.  Simpler than my suggestion.

I managed to break it somehow.  I suspect I ran into some other quirk
of coccinelle.  I'm trying to convert that looks like this:

x = MACRO1(stuff);
if (x == NULL)
{
  BREAKPOINT();
  status = ERROR;
  goto myfunc_exit;
}

into:
x = MACRO1(stuff);
CHECK_OR_BP_AND_GOTO(x == NULL, status, ERROR, _exit);

I thought this would work:

@@
type T;
expression y, z;
identifier x, s;
identifier func;
fresh identifier label = func ## "_exit";
@@
func(...) {
<+...
 x =
 (T)
 \(MACRO1\|MACRO2\)
 (...);
-if (y)
-{
-      BREAKPOINT();
-      s = z;
-      goto label;
-}
+CHECK_OR_BP_AND_GOTO(y, s, z, _exit);
...
 label:
...+>
}

but I get this error:

18: unexpected use of a fresh identifier label

What am I missing?
_______________________________________________
Cocci mailing list
Cocci@systeme.lip6.fr
https://systeme.lip6.fr/mailman/listinfo/cocci

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [Cocci] How to concatenate identifier with text?
  2019-06-11 21:51     ` Timur Tabi
@ 2019-06-11 21:58       ` Timur Tabi
  2019-06-12  7:12         ` [Cocci] Wider usage of “fresh identifiers”? Markus Elfring
  2019-06-12  5:25       ` [Cocci] How to concatenate identifier with text? Julia Lawall
  1 sibling, 1 reply; 8+ messages in thread
From: Timur Tabi @ 2019-06-11 21:58 UTC (permalink / raw)
  To: Timur Tabi; +Cc: cocci

On Tue, Jun 11, 2019 at 4:51 PM Timur Tabi <timur@kernel.org> wrote:
> but I get this error:
>
> 18: unexpected use of a fresh identifier label
>
> What am I missing?

Apparently I'm missing this obscure line in the documentation:

"Fresh identifier metavariables must only be used in + code."

Any suggestions on how to work around this, other than use Python?
_______________________________________________
Cocci mailing list
Cocci@systeme.lip6.fr
https://systeme.lip6.fr/mailman/listinfo/cocci

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [Cocci] How to concatenate identifier with text?
  2019-06-11 21:51     ` Timur Tabi
  2019-06-11 21:58       ` Timur Tabi
@ 2019-06-12  5:25       ` Julia Lawall
  1 sibling, 0 replies; 8+ messages in thread
From: Julia Lawall @ 2019-06-12  5:25 UTC (permalink / raw)
  To: Timur Tabi; +Cc: cocci



On Tue, 11 Jun 2019, Timur Tabi wrote:

> On Fri, May 24, 2019 at 2:38 PM Julia Lawall <julia.lawall@lip6.fr> wrote:
> > On Fri, 24 May 2019, Timur Tabi wrote:
> > > I figured it out:
> > >
> > > @@
> > > identifier func;
> > > fresh identifier label = func ## "_exit";
> >
> > Yes, that works too.  Simpler than my suggestion.
>
> I managed to break it somehow.  I suspect I ran into some other quirk
> of coccinelle.  I'm trying to convert that looks like this:
>
> x = MACRO1(stuff);
> if (x == NULL)
> {
>   BREAKPOINT();
>   status = ERROR;
>   goto myfunc_exit;
> }
>
> into:
> x = MACRO1(stuff);
> CHECK_OR_BP_AND_GOTO(x == NULL, status, ERROR, _exit);
>
> I thought this would work:
>
> @@
> type T;
> expression y, z;
> identifier x, s;
> identifier func;
> fresh identifier label = func ## "_exit";
> @@
> func(...) {
> <+...
>  x =
>  (T)
>  \(MACRO1\|MACRO2\)
>  (...);
> -if (y)
> -{
> -      BREAKPOINT();
> -      s = z;
> -      goto label;
> -}
> +CHECK_OR_BP_AND_GOTO(y, s, z, _exit);
> ...
>  label:
> ...+>
> }
>
> but I get this error:
>
> 18: unexpected use of a fresh identifier label
>
> What am I missing?

Fresh identifiers are only for + code.

You need to construct the identifier you want to match using python code,
as illustrated in demos/pythontococci.cocci

julia
_______________________________________________
Cocci mailing list
Cocci@systeme.lip6.fr
https://systeme.lip6.fr/mailman/listinfo/cocci

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [Cocci] Wider usage of “fresh identifiers”?
  2019-06-11 21:58       ` Timur Tabi
@ 2019-06-12  7:12         ` Markus Elfring
  0 siblings, 0 replies; 8+ messages in thread
From: Markus Elfring @ 2019-06-12  7:12 UTC (permalink / raw)
  To: Timur Tabi; +Cc: cocci

> Apparently I'm missing this obscure line in the documentation:
>
> "Fresh identifier metavariables must only be used in + code."
>
> Any suggestions on how to work around this, other than use Python?

Would you get into the mood to adjust this software situation any more?
(Increase OCaml development?)

How do you think about to check the mentioned restriction in more detail?

Regards,
Markus
_______________________________________________
Cocci mailing list
Cocci@systeme.lip6.fr
https://systeme.lip6.fr/mailman/listinfo/cocci

^ permalink raw reply	[flat|nested] 8+ messages in thread

end of thread, other threads:[~2019-06-12  7:13 UTC | newest]

Thread overview: 8+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2019-05-24 19:13 [Cocci] How to concatenate identifier with text? Timur Tabi
2019-05-24 19:36 ` Timur Tabi
2019-05-24 19:38   ` Julia Lawall
2019-06-11 21:51     ` Timur Tabi
2019-06-11 21:58       ` Timur Tabi
2019-06-12  7:12         ` [Cocci] Wider usage of “fresh identifiers”? Markus Elfring
2019-06-12  5:25       ` [Cocci] How to concatenate identifier with text? Julia Lawall
2019-05-24 19:38 ` Julia Lawall

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).