- string qn(static_cast<const char*>(qualName));
- const RecordType *rt = Specifier->getType()->getAs<RecordType>();
- assert(rt);
- TagDecl *canon = rt->getDecl()->getCanonicalDecl();
- return canon->getQualifiedNameAsString() == qn;
+ string qn(static_cast<const char*>(qualName));
+ const RecordType *rt = Specifier->getType()->getAs<RecordType>();
+ assert(rt);
+ TagDecl *canon = rt->getDecl()->getCanonicalDecl();
+ return canon->getQualifiedNameAsString() == qn;
- bool isDerivedFrom(const char *baseStr) const {
- CXXBasePaths Paths(/*FindAmbiguities=*/false, /*RecordPaths=*/false, /*DetectVirtual=*/false);
+ bool isDerivedFrom(const char *baseStr, CXXBaseSpecifier const **Base = 0) const {
+ CXXBasePaths Paths(/*FindAmbiguities=*/false, /*RecordPaths=*/!!Base, /*DetectVirtual=*/false);
- return lookupInBases(&FindBaseClassString, const_cast<char*>(baseStr), Paths);
+ if (!lookupInBases(&FindBaseClassString, const_cast<char*>(baseStr), Paths))
+ return false;
+ if (Base)
+ *Base = Paths.front().back().Base;
+ return true;
Reactions.first != Reactions.second; ++Reactions.first)
HandleReaction(*Reactions.first, RecordDecl);
}
Reactions.first != Reactions.second; ++Reactions.first)
HandleReaction(*Reactions.first, RecordDecl);
}