[cfe-dev] Relexing more than one tokens

Abramo Bagnara abramobagnara at tin.it
Tue Jul 7 23:54:25 PDT 2009


Chris Lattner ha scritto:
> 
>>>>> However, not all hope is lost.  It is very reasonable for an
>>>>> ASTConsumer
>>>>> to construct ASTs for a translation unit *AND* then preprocess the
>>>>> whole
>>>>> file again to get the tokens in a big vector.  Given that, you
>>>>> could map
>>>>> from the AST node to an index in the vector, then scan around in the
>>>>> vector of tokens looking for what you want.
>>>>
>>>> How you'd map the AST node to the relexed tokens vector?
>>>
>>> Just compare the source locations.
>>
>> Are you meaning that preprocessing the whole translation unit again I'd
>> get the same SourceLocation opaque ID?
> 
> Hopefully.  If not, you can do a "deep comparison" along the lines of
> SourceManager::isBeforeInTranslationUnit.

Instead of preprocessing the whole translation unit, wouldn't be more
effective to transform Preprocessor::Lex() in a virtual method and
permit to applications to use a derived class of Preprocessor that have
a Lex method that after calling Preprocessor::Lex() saves a copy of each
tokens in the big vector you said above?



More information about the cfe-dev mailing list