ASTNodeKind ASTNodeKind::getMostDerivedCommonAncestor(ASTNodeKind Kind1, ASTNodeKind Kind2) { NodeKindId Parent = Kind1.KindId; while (!isBaseOf(Parent, Kind2.KindId, nullptr) && Parent != NKI_None) { Parent = AllKindInfo[Parent].ParentId; } return ASTNodeKind(Parent); }
TEST(ASTNodeKind, Name) { EXPECT_EQ("<None>", ASTNodeKind().asStringRef()); #define VERIFY_NAME(Node) EXPECT_EQ(#Node, DNT<Node>().asStringRef()); VERIFY_NAME(TemplateArgument); VERIFY_NAME(NestedNameSpecifierLoc); VERIFY_NAME(QualType); VERIFY_NAME(TypeLoc); VERIFY_NAME(CXXCtorInitializer); VERIFY_NAME(NestedNameSpecifier); VERIFY_NAME(Decl); VERIFY_NAME(CXXRecordDecl); VERIFY_NAME(Stmt); VERIFY_NAME(CallExpr); VERIFY_NAME(Type); VERIFY_NAME(ConstantArrayType); #undef VERIFY_NAME }
TEST(ASTNodeKind, Name) { EXPECT_EQ("Decl", DNT<Decl>().asStringRef()); EXPECT_EQ("CallExpr", DNT<CallExpr>().asStringRef()); EXPECT_EQ("ConstantArrayType", DNT<ConstantArrayType>().asStringRef()); EXPECT_EQ("<None>", ASTNodeKind().asStringRef()); }
TEST(ASTNodeKind, NoKind) { EXPECT_FALSE(ASTNodeKind().isBaseOf(ASTNodeKind())); EXPECT_FALSE(ASTNodeKind().isSame(ASTNodeKind())); }
ASTNodeKind ASTNodeKind::getMostDerivedType(ASTNodeKind Kind1, ASTNodeKind Kind2) { if (Kind1.isBaseOf(Kind2)) return Kind2; if (Kind2.isBaseOf(Kind1)) return Kind1; return ASTNodeKind(); }
TEST(ASTNodeKind, IsNone) { EXPECT_TRUE(ASTNodeKind().isNone()); EXPECT_FALSE(DNT<Decl>().isNone()); EXPECT_FALSE(DNT<VarDecl>().isNone()); }