Julia Lawall wrote:
> On Thu, 25 Aug 2011, Michael Stefaniuc wrote:
> 
>> Arie Middelkoop wrote:
>>>>>  In SmPL pseudo
>>>>> (and invalid) code I'm looking for something that does:
>>>>> @@
>>>>> macro interface;
>>>>> @@
>>>>> - interface
>>>>> + struct
>>>>>
>>>>> Just using perl (interface is a very common word in the comments) or
>>>>> removing/modifying the define (it is used in macro expansion (API) as
>>>>> well in generated code from IDL) is very tedious and I wonder if there
>>>>> is a cleaner way to achieve it; preferably in coccinelle.
>>>> I'm not seeing anything very obvious.  The problem is that the SmPL code 
>>>> doesn't take into account the macro definition file.  So it won't know 
>>>> what to do with interface.
>>> What if you could define an additional set of keywords and for each keyword 
>>> a mapping to a sequence of tokens?
>>> In that case, you can perform such substitutions before the actual parse 
>>> process starts. This would work for your particular problem: but it's 
>>> rather early in the entire process to be really useful.
>>> (not to mention that I'm not sure if it is possible to 'dynamically' extend 
>>> the lexer)
>> It doesn't need to be dynamic. What I have done is to add in
>> parsing_c/lexer_c.mll in the keyword_table
>>   "interface", (fun ii -> Tstruct ii);
>> There is already a section there for Windows extensions.
>> No clue yet if this is enough as I didn't have time to test it; I'll do
>> that tonight at home.
> 
> The problem is not the C lexer but the SmPL one.  Perhaps it would be 
> enough for you to make the analogous change there 
> (parsing_cocci/lexer_cocci.mll).
Aah, sorry. For the task at hand having having "struct foo" in SmPL
match "interface foo" in C is good enough. I can then manually change
"interface" to "struct".

> The "macro" that you propose is sort of like the typedef that exists 
> already in SmPL.  The problem though is that for typedef we know that the 
> labelled thing should represent a type.  But for macro it could be 
> anything.
Yes, something like that. Not sure if this would be useful for other
people. But the Win32 API has other "nice stuff" that would be
problematic to match with coccinelle:
  #define CONST const
I'm fixing those at the moment en-pasant with a search and replace of
the diff generated by coccinelle.

thanks
bye
        michael
_______________________________________________
Cocci mailing list
[email protected]
http://lists.diku.dk/mailman/listinfo/cocci
(Web access from inside DIKUs LAN only)

Reply via email to