[cfe-dev] Getting RecordDecl from CXXBaseSpecifier

Justin Arruda paradoxum at gmail.com
Sun May 12 08:13:46 PDT 2013

Hello all.  New to cfe-dev (and participating in mailing lists in general).

The question I'm hoping to have answered is as simple as the subject
implies. I have a CXXRecordDecl,
and I am trying to determine which of its bases is derived from a class
that I know this CXXRecordDecl
is also derived from.

class A;
class B : public A;
class C;

class D : public B, public C
Looking for which base D gets its A from.

I am also seeking general advice for my project as it pertains to my usage
of clang.  I am using
libtooling and ASTMatchers to create Python bindings for a game engine.

This is some sample input I am using for my generator: [test-input].

When attempting to locate which base of MyBaz and MyDerived gets their
inheritance of Colossus::MyBase,
I've tried the following strategy: Obtain the type of the base specifier,
and using an appropriate
DeclContext, look up the declaration.  Once I have the declaration, I can
use its methods to determine if
it's derived from Colossus::MyBase (or is that class).

// Get the qualified name of the base
QualType type = aBaseSpecifier->getType();
DeclarationName baseDeclName( type.getBaseTypeIdentifier() );

// Grab a context to look up the decl
const DeclContext* lookupContext = theCxxRecordDecl->getLookupContext();

DeclContext::lookup_const_result lr = lookupContext->lookup(baseDeclName);

This strategy seems somewhat valid.  When I use the "LookupContext" of the
derived class, the base of MyBaz
is correctly identified as MyDerived. However, MyDerived's base is not
found by that context.  Alternately,
I tried to use the ASTContext's TranslationUnitDecl as my lookup context
thinking that if I start at the root
DeclContext everything should be found.  In doing that however, all of my
lookups failed.  I fear I'm taking
a completely wrongheaded approach here.

[test-input] http://pastebin.com/iSCnMmsd

Justin Arruda

PS Please call out any poor etiquette on my part! Sorry in advance.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/cfe-dev/attachments/20130512/038d11ba/attachment.html>

More information about the cfe-dev mailing list