All of lore.kernel.org
 help / color / mirror / Atom feed
* [Cocci] Are types re-evaluated between subsequent rules?
@ 2019-05-27 13:32 Christoph Böhmwalder
  2019-05-27 14:16 ` [Cocci] Checking change scope for a data type replacement Markus Elfring
  2019-05-27 14:28 ` [Cocci] Are types re-evaluated between subsequent rules? Julia Lawall
  0 siblings, 2 replies; 8+ messages in thread
From: Christoph Böhmwalder @ 2019-05-27 13:32 UTC (permalink / raw)
  To: cocci

Hi,

I'm having trouble understanding coccinelles behaviour here. Consider 
the following C code and cocci rules:


#include <stdio.h>

int x;

int main(int argc, char **argv)
{
     f(x);
}


@@
identifier x;
@@
- int x;
+ int *x;

@@
int *x;
@@
- f(x)
+ g(x)



Since I read on some slides[0] that "Later rules see the results of 
earlier rules", I would assume that this would pick up the type change 
introduced by the first rule and replace f by g because it now has an 
"int *" parameter. However, spatch merely outputs the patch to change 
the type of x. If I change the type of the "expected" x in rule 2 to 
"int", cocci picks it up correctly.

Am I missing something?


[0]: 
http://events17.linuxfoundation.org/sites/events/files/slides/part1.pdf, 
page 43

--
Regards,
Christoph
_______________________________________________
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] Checking change scope for a data type replacement
  2019-05-27 13:32 [Cocci] Are types re-evaluated between subsequent rules? Christoph Böhmwalder
@ 2019-05-27 14:16 ` Markus Elfring
  2019-05-27 14:30   ` Christoph Böhmwalder
  2019-05-27 14:28 ` [Cocci] Are types re-evaluated between subsequent rules? Julia Lawall
  1 sibling, 1 reply; 8+ messages in thread
From: Markus Elfring @ 2019-05-27 14:16 UTC (permalink / raw)
  To: Christoph Böhmwalder; +Cc: cocci

> Am I missing something?

It depends on details.

Your initial transformation approach can be written also as follows.

@replacement@
identifier x;
@@
-int
+int*
 x;


In which scopes would you like to add the asterisk for the usage of a pointer
data type?

Do you expect that function parameters should be also modified here?

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

* Re: [Cocci] Are types re-evaluated between subsequent rules?
  2019-05-27 13:32 [Cocci] Are types re-evaluated between subsequent rules? Christoph Böhmwalder
  2019-05-27 14:16 ` [Cocci] Checking change scope for a data type replacement Markus Elfring
@ 2019-05-27 14:28 ` Julia Lawall
  1 sibling, 0 replies; 8+ messages in thread
From: Julia Lawall @ 2019-05-27 14:28 UTC (permalink / raw)
  To: Christoph Böhmwalder; +Cc: cocci

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



On Mon, 27 May 2019, Christoph Böhmwalder wrote:

> Hi,
>
> I'm having trouble understanding coccinelles behaviour here. Consider the
> following C code and cocci rules:
>
>
> #include <stdio.h>
>
> int x;
>
> int main(int argc, char **argv)
> {
>     f(x);
> }
>
>
> @@
> identifier x;
> @@
> - int x;
> + int *x;
>
> @@
> int *x;
> @@
> - f(x)
> + g(x)
>
>
>
> Since I read on some slides[0] that "Later rules see the results of earlier
> rules", I would assume that this would pick up the type change introduced by
> the first rule and replace f by g because it now has an "int *" parameter.
> However, spatch merely outputs the patch to change the type of x. If I change
> the type of the "expected" x in rule 2 to "int", cocci picks it up correctly.
>
> Am I missing something?

Your first rule changes only variable declarations, which consist of a
type, a variable and a semicolon.  If you want to change all int types to
int *, then you can change the first rule to remove the x and the ;.  If
you want to change int x in the parameter list of main, or in the
parameter list of all functions, then you could do

@@
identifier f; // all functions
identifier x;
@@

f(...,
- int x
+ int *x
  ,...) { ... }

You can factor out the common parts, ie int and x from the transformation,
as Markus suggests, but I doubt this would be useful.

julia

>
>
> [0]: http://events17.linuxfoundation.org/sites/events/files/slides/part1.pdf,
> page 43
>
> --
> Regards,
> Christoph
> _______________________________________________
> Cocci mailing list
> Cocci@systeme.lip6.fr
> https://systeme.lip6.fr/mailman/listinfo/cocci
>

[-- Attachment #2: 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] 8+ messages in thread

* Re: [Cocci] Checking change scope for a data type replacement
  2019-05-27 14:16 ` [Cocci] Checking change scope for a data type replacement Markus Elfring
@ 2019-05-27 14:30   ` Christoph Böhmwalder
  2019-05-27 15:00     ` Markus Elfring
  2019-05-27 17:40     ` Markus Elfring
  0 siblings, 2 replies; 8+ messages in thread
From: Christoph Böhmwalder @ 2019-05-27 14:30 UTC (permalink / raw)
  To: Markus Elfring; +Cc: cocci

On 27.05.19 16:16, Markus Elfring wrote:
>> Am I missing something?
> 
> It depends on details.
> 
> Your initial transformation approach can be written also as follows.
> 
> @replacement@
> identifier x;
> @@
> -int
> +int*
>   x; >
> 
> In which scopes would you like to add the asterisk for the usage of a pointer
> data type?
I'm trying to replace a particular function call with a one-liner if the 
function is not defined, so I control the scope myself. In other words, 
in my original code "int x" is passed to "void f(int)" as a paramter, 
and I would like to apply the following transformations:
1) "x" has a type of "int *"
2) the new "int *x" gets passed to a function "void g(int *)" instead.

> 
> Do you expect that function parameters should be also modified here?
> 
> 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

* Re: [Cocci] Checking change scope for a data type replacement
  2019-05-27 14:30   ` Christoph Böhmwalder
@ 2019-05-27 15:00     ` Markus Elfring
  2019-05-27 17:40     ` Markus Elfring
  1 sibling, 0 replies; 8+ messages in thread
From: Markus Elfring @ 2019-05-27 15:00 UTC (permalink / raw)
  To: Christoph Böhmwalder; +Cc: cocci

>> @replacement@
>> identifier x;
>> @@
>> -int
>> +int*
>>   x; >
>>
>> In which scopes would you like to add the asterisk for the usage of a pointer
>> data type?
> 1) "x" has a type of "int *"

The asterisk addition seems to work for (local) variables.


> 2) the new "int *x" gets passed to a function "void g(int *)" instead.

The succinct SmPL change specification looks like it could express
data type adjustments also at other places.

But an additional SmPL rule seems to be needed at the moment.

@replacement2@
identifier f, x;
type t;
@@
 t
 f(...,
-  int
+  int*
   x, ...)
 { ... }


Do you distinguish any references to global variables here?

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

* Re: [Cocci] Checking change scope for a data type replacement
  2019-05-27 14:30   ` Christoph Böhmwalder
  2019-05-27 15:00     ` Markus Elfring
@ 2019-05-27 17:40     ` Markus Elfring
  2019-05-27 17:46       ` Julia Lawall
  1 sibling, 1 reply; 8+ messages in thread
From: Markus Elfring @ 2019-05-27 17:40 UTC (permalink / raw)
  To: Christoph Böhmwalder; +Cc: cocci

> In other words, in my original code "int x" is passed to "void f(int)" as a paramter,
> and I would like to apply the following transformations:

How do you think about to try a SmPL change specification out like the following?

@replacement3@
identifier x;
@@
-int
+int*
 x;
 <+...
-f
+g
  (x);
 ...+>


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

* Re: [Cocci] Checking change scope for a data type replacement
  2019-05-27 17:40     ` Markus Elfring
@ 2019-05-27 17:46       ` Julia Lawall
  2019-05-27 19:12         ` Markus Elfring
  0 siblings, 1 reply; 8+ messages in thread
From: Julia Lawall @ 2019-05-27 17:46 UTC (permalink / raw)
  To: Markus Elfring; +Cc: cocci



On Mon, 27 May 2019, Markus Elfring wrote:

> > In other words, in my original code "int x" is passed to "void f(int)" as a paramter,
> > and I would like to apply the following transformations:
>
> How do you think about to try a SmPL change specification out like the following?
>
> @replacement3@
> identifier x;
> @@
> -int
> +int*
>  x;
>  <+...
> -f
> +g
>   (x);
>  ...+>

His example shows that he wants to change a parameter type, not a local
variable.

julia

>
>
> Regards,
> Markus
> _______________________________________________
> 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] Checking change scope for a data type replacement
  2019-05-27 17:46       ` Julia Lawall
@ 2019-05-27 19:12         ` Markus Elfring
  0 siblings, 0 replies; 8+ messages in thread
From: Markus Elfring @ 2019-05-27 19:12 UTC (permalink / raw)
  To: Julia Lawall; +Cc: cocci

>> @replacement3@
>> identifier x;
>> @@
>> -int
>> +int*
>>  x;
>>  <+...
>> -f
>> +g
>>   (x);
>>  ...+>
>
> His example shows that he wants to change a parameter type,

He would like to call a function which gets a single pointer passed
instead of an integer by possibly varying variables.


> not a local variable.

The support for source code transformations together with global variables
might need further software development considerations.

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-05-27 19:13 UTC | newest]

Thread overview: 8+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2019-05-27 13:32 [Cocci] Are types re-evaluated between subsequent rules? Christoph Böhmwalder
2019-05-27 14:16 ` [Cocci] Checking change scope for a data type replacement Markus Elfring
2019-05-27 14:30   ` Christoph Böhmwalder
2019-05-27 15:00     ` Markus Elfring
2019-05-27 17:40     ` Markus Elfring
2019-05-27 17:46       ` Julia Lawall
2019-05-27 19:12         ` Markus Elfring
2019-05-27 14:28 ` [Cocci] Are types re-evaluated between subsequent rules? Julia Lawall

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.