cocci.inria.fr archive mirror
 help / color / mirror / Atom feed
* [Cocci] Matching more than one declaration?
@ 2019-05-02 21:04 Michael Stefaniuc
  2019-05-03  7:17 ` Julia Lawall
  0 siblings, 1 reply; 5+ messages in thread
From: Michael Stefaniuc @ 2019-05-02 21:04 UTC (permalink / raw)
  To: Coccinelle

Hello,

it seems that more than one declaration cannot be matched in one rule:

@@
identifier i, f;
@@
- int i;
- int f;

That won't match

void foo(void)
{
    int i;
    float f;
}


Is there a way to do that?
In my specific case I need to replace 3 declarations with a single
declarer. I can use 3 separate rules but the first rule will produce
false positives if the other two declarations aren't there.


thanks
bye
      michael
_______________________________________________
Cocci mailing list
Cocci@systeme.lip6.fr
https://systeme.lip6.fr/mailman/listinfo/cocci

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

* Re: [Cocci] Matching more than one declaration?
  2019-05-02 21:04 [Cocci] Matching more than one declaration? Michael Stefaniuc
@ 2019-05-03  7:17 ` Julia Lawall
  2019-05-03  8:03   ` Michael Stefaniuc
  0 siblings, 1 reply; 5+ messages in thread
From: Julia Lawall @ 2019-05-03  7:17 UTC (permalink / raw)
  To: Michael Stefaniuc; +Cc: Coccinelle



On Thu, 2 May 2019, Michael Stefaniuc wrote:

> Hello,
>
> it seems that more than one declaration cannot be matched in one rule:
>
> @@
> identifier i, f;
> @@
> - int i;
> - int f;
>
> That won't match
>
> void foo(void)
> {
>     int i;
>     float f;

The semantic patch has int int and the code has int float.  If the code
has int int, it matches fine.

julia

> }
>
>
> Is there a way to do that?
> In my specific case I need to replace 3 declarations with a single
> declarer. I can use 3 separate rules but the first rule will produce
> false positives if the other two declarations aren't there.
>
>
> thanks
> bye
>       michael
> _______________________________________________
> 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] 5+ messages in thread

* Re: [Cocci] Matching more than one declaration?
  2019-05-03  7:17 ` Julia Lawall
@ 2019-05-03  8:03   ` Michael Stefaniuc
  2019-05-03 20:39     ` Julia Lawall
  0 siblings, 1 reply; 5+ messages in thread
From: Michael Stefaniuc @ 2019-05-03  8:03 UTC (permalink / raw)
  To: Julia Lawall; +Cc: Coccinelle

[-- Attachment #1: Type: text/plain, Size: 613 bytes --]

On 2019-05-03 09:17, Julia Lawall wrote:
> On Thu, 2 May 2019, Michael Stefaniuc wrote:
> 
>> Hello,
>> 
>> it seems that more than one declaration cannot be matched in one rule:
>> 
>> @@
>> identifier i, f;
>> @@
>> - int i;
>> - int f;
>> 
>> That won't match
>> 
>> void foo(void)
>> {
>>     int i;
>>     float f;
> 
> The semantic patch has int int and the code has int float.  If the code
> has int int, it matches fine.
Duh... I messed it up while simplifying my test case :/

It does work but only in function scope and not in global scope.
I've attached the fixed test case.

thanks
bye
       michael

[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #2: declare.c --]
[-- Type: text/x-c; name=declare.c, Size: 60 bytes --]

int i;
float f;

void foo(void)
{
    int i;
    float f;
}

[-- Attachment #3: declare.cocci --]
[-- Type: text/plain, Size: 43 bytes --]

@@
identifier i, f;
@@
- int i;
- float f;

[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #4: declare.diff --]
[-- Type: text/x-diff; name=declare.diff, Size: 133 bytes --]

--- declare.c
+++ /tmp/cocci-output-5279-c2f13d-declare.c
@@ -3,6 +3,4 @@ float f;
 
 void foo(void)
 {
-    int i;
-    float f;
 }

[-- Attachment #5: Type: text/plain, Size: 136 bytes --]

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

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

* Re: [Cocci] Matching more than one declaration?
  2019-05-03  8:03   ` Michael Stefaniuc
@ 2019-05-03 20:39     ` Julia Lawall
  2019-05-03 20:44       ` Michael Stefaniuc
  0 siblings, 1 reply; 5+ messages in thread
From: Julia Lawall @ 2019-05-03 20:39 UTC (permalink / raw)
  To: Michael Stefaniuc; +Cc: Coccinelle



On Fri, 3 May 2019, Michael Stefaniuc wrote:

> On 2019-05-03 09:17, Julia Lawall wrote:
> > On Thu, 2 May 2019, Michael Stefaniuc wrote:
> >
> > > Hello,
> > >
> > > it seems that more than one declaration cannot be matched in one rule:
> > >
> > > @@
> > > identifier i, f;
> > > @@
> > > - int i;
> > > - int f;
> > >
> > > That won't match
> > >
> > > void foo(void)
> > > {
> > >     int i;
> > >     float f;
> >
> > The semantic patch has int int and the code has int float.  If the code
> > has int int, it matches fine.
> Duh... I messed it up while simplifying my test case :/
>
> It does work but only in function scope and not in global scope.
> I've attached the fixed test case.

No, it won't work in global scope.  You can only match one top-level thing
at a time, and each declaration is a top-level thing.  Youcan make a
series of rules that depend on the previous ones, and only make the change
if all are matched.

julia

>
> thanks
> bye
>       michael
>
_______________________________________________
Cocci mailing list
Cocci@systeme.lip6.fr
https://systeme.lip6.fr/mailman/listinfo/cocci

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

* Re: [Cocci] Matching more than one declaration?
  2019-05-03 20:39     ` Julia Lawall
@ 2019-05-03 20:44       ` Michael Stefaniuc
  0 siblings, 0 replies; 5+ messages in thread
From: Michael Stefaniuc @ 2019-05-03 20:44 UTC (permalink / raw)
  To: Julia Lawall; +Cc: Coccinelle

On 5/3/19 10:39 PM, Julia Lawall wrote:
> 
> 
> On Fri, 3 May 2019, Michael Stefaniuc wrote:
> 
>> On 2019-05-03 09:17, Julia Lawall wrote:
>>> On Thu, 2 May 2019, Michael Stefaniuc wrote:
>>>
>>>> Hello,
>>>>
>>>> it seems that more than one declaration cannot be matched in one rule:
>>>>
>>>> @@
>>>> identifier i, f;
>>>> @@
>>>> - int i;
>>>> - int f;
>>>>
>>>> That won't match
>>>>
>>>> void foo(void)
>>>> {
>>>>     int i;
>>>>     float f;
>>>
>>> The semantic patch has int int and the code has int float.  If the code
>>> has int int, it matches fine.
>> Duh... I messed it up while simplifying my test case :/
>>
>> It does work but only in function scope and not in global scope.
>> I've attached the fixed test case.
> 
> No, it won't work in global scope.  You can only match one top-level thing
> at a time, and each declaration is a top-level thing.  Youcan make a
> series of rules that depend on the previous ones, and only make the change
> if all are matched.
Ok, thanks. That's what I did as a workaround.

bye
	michael

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

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

end of thread, other threads:[~2019-05-03 20:44 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2019-05-02 21:04 [Cocci] Matching more than one declaration? Michael Stefaniuc
2019-05-03  7:17 ` Julia Lawall
2019-05-03  8:03   ` Michael Stefaniuc
2019-05-03 20:39     ` Julia Lawall
2019-05-03 20:44       ` Michael Stefaniuc

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).