cocci.inria.fr archive mirror
 help / color / mirror / Atom feed
From: Jakob Koschel <jkl820.git@gmail.com>
To: Markus Elfring <Markus.Elfring@web.de>
Cc: cocci@inria.fr
Subject: Re: [cocci] match arbitrary argument position
Date: Wed, 17 Aug 2022 16:26:24 +0200	[thread overview]
Message-ID: <8080D5E0-2491-47A0-AEDD-3EB84661917F@gmail.com> (raw)
In-Reply-To: <5c4fc14e-bf4e-8bbc-cc9e-0b04c849eca5@web.de>

Hey,

> On 16. Aug 2022, at 19:55, Markus Elfring <Markus.Elfring@web.de> wrote:
> 
>> looking at the following code snippet:
>> 
>> test.c:
> …
>>      func3(argc, argv);
>> 
>>      func3(argv);
> 
> 
> Would you like to handle function overloading here?

I'm not exactly sure I understand what you mean here.

Finally I would like to archive something like this:

void func(void) {

    int x = 0;
    int y = 0;

    func1(x, 0);
    func2(0, y);
}

void func1(int arg1, int arg2) {
    interesting_func(arg1);
}

void func2(int arg1, int arg2) {
    interesting_func(arg2);
}

In the end I want to, for example, turn it into:

void func(void) {

    int x = 0;
    // 'x' was used as first argument to interesting_func
    int y = 0;
    // 'y' was used as first argument to interesting_func

    func1(x, 0);
    func2(0, y);
}

void func1(int arg1, int arg2) {
    interesting_func(arg1);
}

void func2(int arg1, int arg2) {
    interesting_func(arg2);
}

Basically I want to flag create the matching from 'x'/'y' to the argument to interesting_func.

I was imagining if I could match the parameter list of any function calling 'interesting_func'
then I can also create a matching from x to that function call and do the rest of the correlation
in python somehow.

However I'm still failing to detect if any argument (arg1 or arg2 in this case) is used as
any argument in 'interesting_func'.

I hope this makes more sense?

> 
> 
> 
>> what doesn't work (matching on the expression list from the parameter list):
>> 
>>   @main4@
>>   expression list Es;
>>   @@
>> 
>>   int func1(Ps@Es) {
>>   ...
>>   }
> 
> 
> Which type would belong to the metavariable “Ps”?

Ps should be an arbitrary length parameter list with arbitrary types.

> 
> 
> 
>> I also tried this:
>> 
>>   @main4@
>>   parameter P;
>>   expression E;
>>   @@
>> 
>>   int func1(..., P@E, ...) {
>>   ...
>>   }
> 
> 
> Does such SmPL code represent a contradiction?
> 
> 
> Can any other descriptions indicate your data processing imaginations better?

hopefully the example above makes it a bit more clear.

> 
> 
>>   @main5@
>>   expression main4.E;
>>   identifier func;
>>   @@
>> 
>>     func(..., E, ...);
>>   + // add comment
>> 
>> 
>> But it throws: 'rule starting on line 41 contains unattached metavariables: main4.E'.
> 
> Which software version did you try out here?

I'm guessing this will give you all the information you want:
spatch version 1.1.1-00124-ge93f5513 compiled with OCaml version 4.13.1


> 
> I am curious how corresponding considerations will evolve further.
> 
> 
> Regards,
> Markus
> 

Thanks!
Jakob


  reply	other threads:[~2022-08-17 15:27 UTC|newest]

Thread overview: 26+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-08-16  8:54 [cocci] match arbitrary argument position Jakob Koschel
2022-08-16 11:37 ` Julia Lawall
2022-08-16 12:35   ` Jakob Koschel
2022-08-16 17:55     ` Markus Elfring
2022-08-17 14:26       ` Jakob Koschel [this message]
2022-08-17 19:21         ` Markus Elfring
2022-08-16 21:07     ` Julia Lawall
2022-08-17 14:18       ` Jakob Koschel
2022-08-17 14:36         ` Julia Lawall
2022-08-17 14:50           ` Jakob Koschel
2022-08-17 15:26             ` Julia Lawall
2022-08-17 19:48           ` [cocci] Working with parameter/expression lists by SmPL Markus Elfring
2022-08-18 12:51             ` Jakob Koschel
2022-08-18 17:42               ` Markus Elfring
2022-08-19  9:12                 ` Jakob Koschel
2022-08-19  9:57                   ` Julia Lawall
2022-08-19 10:00                     ` Jakob Koschel
2022-08-19 17:00                   ` Markus Elfring
2022-08-20 12:57                     ` Jakob Koschel
2022-08-21  8:10                       ` Markus Elfring
2022-08-21  9:09                         ` Julia Lawall
2022-08-21  9:46                           ` Markus Elfring
2022-08-21 10:01                             ` Julia Lawall
2022-08-21 11:33                               ` Markus Elfring
2022-08-18 18:00               ` [cocci] Checking a comment addition Markus Elfring
2022-08-16  8:58 [cocci] match arbitrary argument position Jakob Koschel

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=8080D5E0-2491-47A0-AEDD-3EB84661917F@gmail.com \
    --to=jkl820.git@gmail.com \
    --cc=Markus.Elfring@web.de \
    --cc=cocci@inria.fr \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
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).