// Functions for conveniently building stencils.
//
-/// DEPRECATED: Use `cat` instead.
-/// \returns exactly the text provided.
-Stencil text(llvm::StringRef Text);
-
-/// DEPRECATED: Use `cat` instead.
-/// \returns the source corresponding to the selected range.
-Stencil selection(RangeSelector Selector);
-
/// Generates the source of the expression bound to \p Id, wrapping it in
/// parentheses if it may parse differently depending on context. For example, a
/// binary operation is always wrapped, while a variable reference is never
/// Additionally, `e` is wrapped in parentheses, if needed.
Stencil access(llvm::StringRef BaseId, Stencil Member);
inline Stencil access(llvm::StringRef BaseId, llvm::StringRef Member) {
- return access(BaseId, text(Member));
+ return access(BaseId, detail::makeStencil(Member));
}
/// Chooses between the two stencil parts, based on whether \p ID is bound in
/// match.
inline Stencil ifBound(llvm::StringRef Id, llvm::StringRef TrueText,
llvm::StringRef FalseText) {
- return ifBound(Id, text(TrueText), text(FalseText));
+ return ifBound(Id, detail::makeStencil(TrueText),
+ detail::makeStencil(FalseText));
}
/// Wraps a \c MatchConsumer in a \c Stencil, so that it can be used in a \c
TEST_F(StencilTest, IfBoundOpBound) {
StringRef Id = "id";
- testExpr(Id, "3;", ifBound(Id, text("5"), text("7")), "5");
+ testExpr(Id, "3;", ifBound(Id, cat("5"), cat("7")), "5");
}
TEST_F(StencilTest, IfBoundOpUnbound) {
StringRef Id = "id";
- testExpr(Id, "3;", ifBound("other", text("5"), text("7")), "7");
+ testExpr(Id, "3;", ifBound("other", cat("5"), cat("7")), "7");
}
TEST_F(StencilTest, ExpressionOpNoParens) {
x;
)cc";
StringRef Id = "id";
- testExpr(Id, Snippet, access(Id, text("field")), "x.field");
+ testExpr(Id, Snippet, access(Id, cat("field")), "x.field");
}
TEST_F(StencilTest, AccessOpValueAddress) {
}
TEST(StencilToStringTest, AccessOpSelector) {
- auto S = access("Id", selection(name("otherId")));
+ auto S = access("Id", cat(name("otherId")));
StringRef Expected = R"repr(access("Id", selection(...)))repr";
EXPECT_EQ(S->toString(), Expected);
}
}
TEST(StencilToStringTest, IfBoundOp) {
- auto S = ifBound("Id", text("trueText"), access("exprId", "memberData"));
+ auto S = ifBound("Id", cat("trueText"), access("exprId", "memberData"));
StringRef Expected =
R"repr(ifBound("Id", "trueText", access("exprId", "memberData")))repr";
EXPECT_EQ(S->toString(), Expected);
TEST(StencilToStringTest, Sequence) {
auto S = cat("foo", access("x", "m()"), "bar",
- ifBound("x", text("t"), access("e", "f")));
+ ifBound("x", cat("t"), access("e", "f")));
StringRef Expected = R"repr(seq("foo", access("x", "m()"), "bar", )repr"
R"repr(ifBound("x", "t", access("e", "f"))))repr";
EXPECT_EQ(S->toString(), Expected);
}
TEST(StencilToStringTest, SequenceFromVector) {
- auto S = catVector({text("foo"), access("x", "m()"), text("bar"),
- ifBound("x", text("t"), access("e", "f"))});
+ auto S = catVector({cat("foo"), access("x", "m()"), cat("bar"),
+ ifBound("x", cat("t"), access("e", "f"))});
StringRef Expected = R"repr(seq("foo", access("x", "m()"), "bar", )repr"
R"repr(ifBound("x", "t", access("e", "f"))))repr";
EXPECT_EQ(S->toString(), Expected);