in glean/lang/clang/ast.cpp [986:1026]
static folly::Optional<ClassDecl> declare(
ASTVisitor& visitor,
const clang::CXXRecordDecl *decl,
Cxx::Scope scope,
Src::Range range) {
if (decl->isInjectedClassName()) {
return folly::none;
}
folly::Optional<Cxx::RecordKind> kind;
switch (decl->getTagKind()) {
case clang::TTK_Struct:
kind = Cxx::RecordKind::struct_();
break;
case clang::TTK_Class:
kind = Cxx::RecordKind::class_();
break;
case clang::TTK_Union:
kind = Cxx::RecordKind::union_();
break;
default:
break;
}
if (kind) {
auto qname = visitor.db.fact<Cxx::QName>(
visitor.db.name(decl->getName()), scope);
return ClassDecl
{ {}
, qname
, visitor.db.fact<Cxx::RecordDeclaration>(
qname,
kind.value(),
range)
};
} else {
return folly::none;
}
}