in facebook-clang-plugins/libtooling/ASTExporter.h [2109:2139]
void ASTExporter<ATDWriter>::VisitCXXMethodDecl(const CXXMethodDecl *D) {
VisitFunctionDecl(D);
bool IsVirtual = D->isVirtual();
bool IsStatic = D->isStatic();
const CXXConstructorDecl *C = dyn_cast<CXXConstructorDecl>(D);
bool isCopyConstructor = C && C->isCopyConstructor();
bool HasCtorInitializers = C && C->init_begin() != C->init_end();
auto OB = D->begin_overridden_methods();
auto OE = D->end_overridden_methods();
ObjectScope Scope(
OF,
IsVirtual + IsStatic + isCopyConstructor +
HasCtorInitializers + (OB != OE));
OF.emitFlag("is_virtual", IsVirtual);
OF.emitFlag("is_static", IsStatic);
OF.emitFlag("is_copy_constructor", isCopyConstructor);
if (HasCtorInitializers) {
OF.emitTag("cxx_ctor_initializers");
ArrayScope Scope(OF, std::distance(C->init_begin(), C->init_end()));
for (auto I : C->inits()) {
dumpCXXCtorInitializer(*I);
}
}
if (OB != OE) {
OF.emitTag("overriden_methods");
ArrayScope Scope(OF, std::distance(OB, OE));
for (; OB != OE; ++OB) {
dumpDeclRef(**OB);
}
}
}