[cfe-dev] [PATCH]: Preparing AST for C++ declarations

Eli Friedman eli.friedman at gmail.com
Wed Jun 4 12:49:47 PDT 2008


On Wed, Jun 4, 2008 at 12:39 PM, Argiris Kirtzidis <akyrtzi at gmail.com> wrote:
> Eli Friedman wrote:
>>
>> [...]
>>>>
>>>> The instance fields of CXXRecord are stored in the members array of
>>>> RecordDecl, thus the data layout of CXXRecord is calculated through the
>>>> Record.
>>>> All the other members (including the static fields), are ScopedDecls
>>>> with
>>>> the CXXRecord as declaration context, so they can be iterated through a
>>>> general DeclContext member iterator (not implemented yet).
>>>> Name lookup for class members will be efficient through the use of the
>>>> IdentifierResolver.
>>>>
>>>
>>> The Nth member (as "getMember(N)") will be the Nth instance field of a
>>> specific Record. It seems to me that it makes sense even when inheritance
>>> comes into the picture, do you disagree ?
>>>
>>
>> The issue is the following: class B inherits from class A.  class A
>> has a member x.  Is x accessible through getMember(N)?  If so, how do
>> you figure out the ownership of a FieldDecl once it's in the
>> RecordDecl?
>>
>
> The way I see it, getMember() will only return the instance fields of class
> B. When in C++, name lookup for members will be done through
> IdentifierResolver, not RecordDecl::getMember(IdentifierInfo *)

That works, I guess.  And I suppose CodeGen and other similar users
will have to look up the inheritance tree to come up with the right
layout anyway.

-Eli



More information about the cfe-dev mailing list