in facebook-clang-plugins/libtooling/ASTExporter.h [3307:3356]
void ASTExporter<ATDWriter>::VisitExpr(const Expr *Node) {
VisitStmt(Node);
ExprValueKind VK = Node->getValueKind();
bool HasNonDefaultValueKind = VK != VK_PRValue;
ExprObjectKind OK = Node->getObjectKind();
bool HasNonDefaultObjectKind = OK != OK_Ordinary;
ObjectScope Scope(OF, 1 + HasNonDefaultValueKind + HasNonDefaultObjectKind);
OF.emitTag("qual_type");
dumpQualType(Node->getType());
if (HasNonDefaultValueKind) {
OF.emitTag("value_kind");
switch (VK) {
case VK_LValue:
OF.emitSimpleVariant("LValue");
break;
case VK_XValue:
OF.emitSimpleVariant("XValue");
break;
case VK_PRValue:
llvm_unreachable("unreachable");
break;
}
}
if (HasNonDefaultObjectKind) {
OF.emitTag("object_kind");
switch (Node->getObjectKind()) {
case OK_BitField:
OF.emitSimpleVariant("BitField");
break;
case OK_ObjCProperty:
OF.emitSimpleVariant("ObjCProperty");
break;
case OK_ObjCSubscript:
OF.emitSimpleVariant("ObjCSubscript");
break;
case OK_VectorComponent:
OF.emitSimpleVariant("VectorComponent");
break;
case OK_MatrixComponent:
OF.emitSimpleVariant("MatrixComponent");
break;
case OK_Ordinary:
llvm_unreachable("unreachable");
break;
}
}
}