[cfe-dev] Patch for IdentifierResolver
Argiris Kirtzidis
akyrtzi at gmail.com
Mon Apr 14 15:09:03 PDT 2008
Steve Naroff wrote:
>>>> How about having MultiTypedefDecl, MultiFileVarDecl and
>>>> MultiBlockVarDecl, like this:
>>>>
>>>> class MultiTypedefDecl : public TypedefDecl, public MultiDeclarator {
>>>>
>>>> only used for multi declarations ? MultiDeclarator will contain
>>>> getNextDeclarator().
>>>>
>>>
>>> I don't think this relationship is interesting enough to call out in
>>> the hierarchy. In fact, after speaking briefly with Chris, it might
>>> be nice to consider removing the NextDeclarator field entirely. We
>>> could make the list a responsibility of the client. For example, we
>>> could change FunctionDecl to maintain the decl list explicitly. If
>>> we did this, we could unify iteration with parameters (which would
>>> simplify the API).
>>
>> To reiterate, I really don't think we need to preserve
>> 'NextDeclarator'. There is no current client of it (AFAIK), and
>> there are more efficient ways to represent it if we ever need it in
>> the future.
>>
>
> Agreed.
From a compiler's perspective, the difference between
int x,y;
and
int x;
int y;
is meaningless, but for a source code analysis/refactoring tool it'd be
useful to keep the AST close to the source code.
Assuming that you want to distinguish grouped decls without
NextDeclarator, how would it work ?
For DeclStmt maybe the info which decls are grouped can be contained in
DeclStmt, but for global vardecls ?
And how should the parser be modified ? Currently for a global "int
x,y,z;" it goes like this:
ParseTopLevelDecl ->
ParseExternalDeclaration ->
ParseDeclaration ->
ParseSimpleDeclaration ->
....
and ParseTopLevelDecl returns a FileVarDecl linked to the other decls
through NextDeclarator.
-Argiris
More information about the cfe-dev
mailing list