EXPECT_TRUE(matches(Code, traverse(TK_AsIs, M)));
EXPECT_TRUE(matches(Code, traverse(TK_IgnoreUnlessSpelledInSource, M)));
}
+
+ Code = R"cpp(
+struct B {
+ B(int);
+};
+
+B func1() { return 42; }
+ )cpp";
+ {
+ auto M = expr(ignoringImplicit(integerLiteral(equals(42)).bind("intLit")));
+ EXPECT_TRUE(matchAndVerifyResultTrue(
+ Code, traverse(TK_AsIs, M),
+ std::make_unique<VerifyIdIsBoundTo<Expr>>("intLit", 1)));
+ EXPECT_TRUE(matchAndVerifyResultTrue(
+ Code, traverse(TK_IgnoreUnlessSpelledInSource, M),
+ std::make_unique<VerifyIdIsBoundTo<Expr>>("intLit", 1)));
+ }
+ {
+ auto M = expr(unless(integerLiteral(equals(24)))).bind("intLit");
+ EXPECT_TRUE(matchAndVerifyResultTrue(
+ Code, traverse(TK_AsIs, M),
+ std::make_unique<VerifyIdIsBoundTo<Expr>>("intLit", 7)));
+ EXPECT_TRUE(matchAndVerifyResultTrue(
+ Code, traverse(TK_IgnoreUnlessSpelledInSource, M),
+ std::make_unique<VerifyIdIsBoundTo<Expr>>("intLit", 1)));
+ }
+ {
+ auto M =
+ expr(anyOf(integerLiteral(equals(42)).bind("intLit"), unless(expr())));
+ EXPECT_TRUE(matchAndVerifyResultTrue(
+ Code, traverse(TK_AsIs, M),
+ std::make_unique<VerifyIdIsBoundTo<Expr>>("intLit", 1)));
+ EXPECT_TRUE(matchAndVerifyResultTrue(
+ Code, traverse(TK_IgnoreUnlessSpelledInSource, M),
+ std::make_unique<VerifyIdIsBoundTo<Expr>>("intLit", 1)));
+ }
+ {
+ auto M = expr(allOf(integerLiteral(equals(42)).bind("intLit"), expr()));
+ EXPECT_TRUE(matchAndVerifyResultTrue(
+ Code, traverse(TK_AsIs, M),
+ std::make_unique<VerifyIdIsBoundTo<Expr>>("intLit", 1)));
+ EXPECT_TRUE(matchAndVerifyResultTrue(
+ Code, traverse(TK_IgnoreUnlessSpelledInSource, M),
+ std::make_unique<VerifyIdIsBoundTo<Expr>>("intLit", 1)));
+ }
+ {
+ auto M = expr(integerLiteral(equals(42)).bind("intLit"), expr());
+ EXPECT_TRUE(matchAndVerifyResultTrue(
+ Code, traverse(TK_AsIs, M),
+ std::make_unique<VerifyIdIsBoundTo<Expr>>("intLit", 1)));
+ EXPECT_TRUE(matchAndVerifyResultTrue(
+ Code, traverse(TK_IgnoreUnlessSpelledInSource, M),
+ std::make_unique<VerifyIdIsBoundTo<Expr>>("intLit", 1)));
+ }
+ {
+ auto M = expr(optionally(integerLiteral(equals(42)).bind("intLit")));
+ EXPECT_TRUE(matchAndVerifyResultTrue(
+ Code, traverse(TK_AsIs, M),
+ std::make_unique<VerifyIdIsBoundTo<Expr>>("intLit", 1)));
+ EXPECT_TRUE(matchAndVerifyResultTrue(
+ Code, traverse(TK_IgnoreUnlessSpelledInSource, M),
+ std::make_unique<VerifyIdIsBoundTo<Expr>>("intLit", 1)));
+ }
+ {
+ auto M = expr().bind("allExprs");
+ EXPECT_TRUE(matchAndVerifyResultTrue(
+ Code, traverse(TK_AsIs, M),
+ std::make_unique<VerifyIdIsBoundTo<Expr>>("allExprs", 7)));
+ EXPECT_TRUE(matchAndVerifyResultTrue(
+ Code, traverse(TK_IgnoreUnlessSpelledInSource, M),
+ std::make_unique<VerifyIdIsBoundTo<Expr>>("allExprs", 1)));
+ }
}
TEST(Traversal, traverseNoImplicit) {