On Oct 08 2016, Julia Lawall <[email protected]> wrote:
> On Fri, 7 Oct 2016, Nikolaus Rath wrote:
>
>> On Oct 06 2016, Julia Lawall <[email protected]> wrote:
>> >> Somehow I'm having a really hard time grasping the fundamentals. The
>> >> first two examples make sense - I could adapt them for similar
>> >> situations. But then, I still have absolutely no idea how I would come
>> >> up with the third example, or how to adapt it. What does "idexpression"
>> >> mean? What does "ptr@p1" mean? Is this documented anywhere?
>> >
>> > idexpression is an expression that is resricted to be an identifier.  It
>> > allows you to put a type on an expression that has the form of an
>> > identifier.  You can also say identifier x;  But that is just a name.  It
>> > has no type.  It could be an expression, a field name, a parameter name,
>> > etc.
>>
>> Hm. Based on your last two sentences I'd conclude that 'idexpression'
>> matches variable names for variables of a specific type. But that
>> doesn't seem to be what you describe in your first two sentences. Could
>> you explain what you meant iwth "expression that has the form of an
>> identifier"?
>>
>> To me, an identifier is something that's written literally into the
>> source code and cannot be meaningfully taken apart, e.g. a function
>> name, variable name, or the member of a struct. An expression, on the
>> other hand, is something that can be meaningfully split into
>> sub-components. Is that also how you use these terms?
>
> An expression is something that has a value.  So an idexpression would be
> something that cannot be taken apart, but it is also used in a context
> where it has a value.  Unlike in the case of a parameter name or field
> name, where it is a name for something that will get a value in the
> future.

Got it, thanks!

>> > @ connects patterns that match the same term.  So match a term against the
>> > explicit name ptr and also match it against an identifier expression that
>> > has a particular type.  This is not exactly a beginner example.
>>
>> Okay, I'll just ignore that for now.
>>
>> >> I'd hate to waste your time asking tons of such trivial questions on the
>> >> mailing list, but I just can't find any helpful documentation at all...
>> >
>> > If you look on the web page in the papers and slides section, at the top
>> > there are several tutorials and overview talks, some with video.
>>
>> I think I looked at everything that is not a video. But none of it
>> mentioned that you can put an arbitrary name between the @@ or explained
>> what the different metavariable types (idexpression, expression, etc)
>> are.
>
> The name is illustrated in Advanced SmPL:
> http://coccinelle.lip6.fr/papers/cocciwk4_talk2.pdf

Call me stupid, but I just went through it again and I still don't see
it. There are lots of examples with "@ ..stuff..@" (the first on slide
4), but as far as I can tell it never explains what this means.

Actually, the frequent occurence of @script:python@ makes me think that
this actually has semantic signficance and is much more than a label
that I can choose for my own convenience...?
 

> A variety of metavariable types are listed in slide 11 of the Linux
> oriented tutorial: http://coccinelle.lip6.fr/papers/tutorial.pdf

Yes, I saw that. But I deliberately wrote "explained" rather than just
"listed" :-).


Best,
-Nikolaus

-- 
GPG encrypted emails preferred. Key id: 0xD113FCAC3C4E599F
Fingerprint: ED31 791B 2C5C 1613 AF38 8B8A D113 FCAC 3C4E 599F

             »Time flies like an arrow, fruit flies like a Banana.«
_______________________________________________
Cocci mailing list
[email protected]
https://systeme.lip6.fr/mailman/listinfo/cocci

Reply via email to