[cfe-dev] Patch for IdentifierResolver
Steve Naroff
snaroff at apple.com
Mon Apr 14 14:33:02 PDT 2008
On Apr 14, 2008, at 2:12 PM, Chris Lattner wrote:
> On Apr 14, 2008, at 11:40 AM, Steve Naroff wrote:
>>> the parser produces one top-level ScopedDecl (or one DeclStmt)
>>> with the
>>> first decl and you can get the others through decl-
>>> >getNextDeclarator().
>>> Seems to make sense to me. However, this is only useful for
>>> TypedefDecl
>>> and File/BlockVarDecl, is this correct ?
>>
>> That's true. The NextDeclarator field isn't used for ParmVarDecl.
>> Note that we don't instantiate a ParmVarDecl for function
>> prototypes (as a result, we do loose the name if provided). If we
>> did, removing this field would save some space.
>
> Actually, we do now instantiate ParmVarDecl for function
> prototypes. This is required to handle prototypes like this
> correctly:
> int foo(int x, int A[x]);
>
Interesting...then there may be a nice space savings.
>>> 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.
>>> And BTW, now that there is a DeclContext, how about merging
>>> File/BlockVarDecl into a single VarDecl ?
>>
>> When you added DeclContext, this was my thought as well.
>> Unfortunately, I was unable to come up with a benefit (other than
>> removing a class). I don't believe it simplifies the code or saves
>> any space (especially since we still need ParmVarDecl).
>
> I think a simplified Decl class hierarchy is a win!
>
Sure, but we will still need predicates on VarDecl (isFile, isBlock).
Would you like me to make this change?
snaroff
> -Chris
More information about the cfe-dev
mailing list