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
