[cfe-dev] Lexical scope for macro expansion
Abramo Bagnara
abramobagnara at tin.it
Fri Dec 11 01:11:37 PST 2009
Il 11/12/2009 00:47, Chris Lattner ha scritto:
>
> On Dec 10, 2009, at 10:25 AM, Abramo Bagnara wrote:
>
>> Il 10/12/2009 18:37, Chris Lattner ha scritto:
>>>
>>> On Dec 10, 2009, at 8:56 AM, Abramo Bagnara wrote:
>>>
>>>>
>>>> Is there any way from MacroExpands callback to reach current lexical scope?
>>>>
>>>> What I'm trying to do is to detect if some identifiers in the macro body
>>>> is a known typedef id.
>>>
>>> Nope, there is no way to do this, because the lexer/preprocessor
>>> lives at a lower level (and macros can be used and defined in
>>> multiple contexts, and don't follow the grammar of the language).
>>> However, given a typedef, you can tell if it came from a macro.
>>
>> Let see if I've understand correctly:
>>
>> 1) I collect macro bodies using MacroExpands callback
>>
>> 2) I collect the spelling locations for the NameLoc of each encountered
>> TypedefLoc
>>
>> 3) I scan the previously collected tokens of the macros body: if one of
>> them has the same location of one of that collected in step 2 I know for
>> sure that the macro body contains a typedef name
>>
>> Right?
>
> Sounds like it could work! I don't know the real use case you're going for here though.
Just suppose we want something that warn the user that:
typedef intptr_t Handle;
is preferred to:
#define Handle intptr_t
More information about the cfe-dev
mailing list