xref: /llvm-project/clang/unittests/Tooling/RecursiveASTVisitorTests/CallbacksBinaryOperator.cpp (revision a87dc23a6271cadd6d3f93561f2d8b1661399e6d)
1*a87dc23aSBalazs Benics //===- CallbacksBinaryOperator.cpp ----------------------------------------===//
20741a2c9SStefan Pintilie //
30741a2c9SStefan Pintilie // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
40741a2c9SStefan Pintilie // See https://llvm.org/LICENSE.txt for license information.
50741a2c9SStefan Pintilie // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
60741a2c9SStefan Pintilie //
70741a2c9SStefan Pintilie //===----------------------------------------------------------------------===//
80741a2c9SStefan Pintilie 
90741a2c9SStefan Pintilie #include "CallbacksCommon.h"
100741a2c9SStefan Pintilie 
TEST(RecursiveASTVisitor,StmtCallbacks_TraverseBinaryOperator)110741a2c9SStefan Pintilie TEST(RecursiveASTVisitor, StmtCallbacks_TraverseBinaryOperator) {
120741a2c9SStefan Pintilie   class RecordingVisitor : public RecordingVisitorBase<RecordingVisitor> {
130741a2c9SStefan Pintilie   public:
140741a2c9SStefan Pintilie     RecordingVisitor(ShouldTraversePostOrder ShouldTraversePostOrderValue)
150741a2c9SStefan Pintilie         : RecordingVisitorBase(ShouldTraversePostOrderValue) {}
160741a2c9SStefan Pintilie 
170741a2c9SStefan Pintilie     bool TraverseBinaryOperator(BinaryOperator *BO) {
180741a2c9SStefan Pintilie       recordCallback(__func__, BO, [&]() {
190741a2c9SStefan Pintilie         RecordingVisitorBase::TraverseBinaryOperator(BO);
200741a2c9SStefan Pintilie       });
210741a2c9SStefan Pintilie       return true;
220741a2c9SStefan Pintilie     }
230741a2c9SStefan Pintilie 
240741a2c9SStefan Pintilie     bool WalkUpFromStmt(Stmt *S) {
250741a2c9SStefan Pintilie       recordCallback(__func__, S,
260741a2c9SStefan Pintilie                      [&]() { RecordingVisitorBase::WalkUpFromStmt(S); });
270741a2c9SStefan Pintilie       return true;
280741a2c9SStefan Pintilie     }
290741a2c9SStefan Pintilie   };
300741a2c9SStefan Pintilie 
310741a2c9SStefan Pintilie   StringRef Code = R"cpp(
320741a2c9SStefan Pintilie void test() {
330741a2c9SStefan Pintilie   1;
340741a2c9SStefan Pintilie   2 + 3;
350741a2c9SStefan Pintilie   4;
360741a2c9SStefan Pintilie }
370741a2c9SStefan Pintilie )cpp";
380741a2c9SStefan Pintilie 
390741a2c9SStefan Pintilie   EXPECT_TRUE(visitorCallbackLogEqual(
400741a2c9SStefan Pintilie       RecordingVisitor(ShouldTraversePostOrder::No), Code,
410741a2c9SStefan Pintilie       R"txt(
420741a2c9SStefan Pintilie WalkUpFromStmt CompoundStmt
430741a2c9SStefan Pintilie WalkUpFromStmt IntegerLiteral(1)
440741a2c9SStefan Pintilie TraverseBinaryOperator BinaryOperator(+)
450741a2c9SStefan Pintilie   WalkUpFromStmt BinaryOperator(+)
460741a2c9SStefan Pintilie   WalkUpFromStmt IntegerLiteral(2)
470741a2c9SStefan Pintilie   WalkUpFromStmt IntegerLiteral(3)
480741a2c9SStefan Pintilie WalkUpFromStmt IntegerLiteral(4)
490741a2c9SStefan Pintilie )txt"));
500741a2c9SStefan Pintilie 
510741a2c9SStefan Pintilie   EXPECT_TRUE(visitorCallbackLogEqual(
520741a2c9SStefan Pintilie       RecordingVisitor(ShouldTraversePostOrder::Yes), Code,
530741a2c9SStefan Pintilie       R"txt(
540741a2c9SStefan Pintilie WalkUpFromStmt IntegerLiteral(1)
550741a2c9SStefan Pintilie TraverseBinaryOperator BinaryOperator(+)
560741a2c9SStefan Pintilie   WalkUpFromStmt IntegerLiteral(2)
570741a2c9SStefan Pintilie   WalkUpFromStmt IntegerLiteral(3)
580741a2c9SStefan Pintilie   WalkUpFromStmt BinaryOperator(+)
590741a2c9SStefan Pintilie WalkUpFromStmt IntegerLiteral(4)
600741a2c9SStefan Pintilie WalkUpFromStmt CompoundStmt
610741a2c9SStefan Pintilie )txt"));
620741a2c9SStefan Pintilie }
630741a2c9SStefan Pintilie 
TEST(RecursiveASTVisitor,StmtCallbacks_TraverseBinaryOperator_WalkUpFromBinaryOperator)640741a2c9SStefan Pintilie TEST(RecursiveASTVisitor,
650741a2c9SStefan Pintilie      StmtCallbacks_TraverseBinaryOperator_WalkUpFromBinaryOperator) {
660741a2c9SStefan Pintilie   class RecordingVisitor : public RecordingVisitorBase<RecordingVisitor> {
670741a2c9SStefan Pintilie   public:
680741a2c9SStefan Pintilie     RecordingVisitor(ShouldTraversePostOrder ShouldTraversePostOrderValue)
690741a2c9SStefan Pintilie         : RecordingVisitorBase(ShouldTraversePostOrderValue) {}
700741a2c9SStefan Pintilie 
710741a2c9SStefan Pintilie     bool TraverseBinaryOperator(BinaryOperator *BO) {
720741a2c9SStefan Pintilie       recordCallback(__func__, BO, [&]() {
730741a2c9SStefan Pintilie         RecordingVisitorBase::TraverseBinaryOperator(BO);
740741a2c9SStefan Pintilie       });
750741a2c9SStefan Pintilie       return true;
760741a2c9SStefan Pintilie     }
770741a2c9SStefan Pintilie 
780741a2c9SStefan Pintilie     bool WalkUpFromStmt(Stmt *S) {
790741a2c9SStefan Pintilie       recordCallback(__func__, S,
800741a2c9SStefan Pintilie                      [&]() { RecordingVisitorBase::WalkUpFromStmt(S); });
810741a2c9SStefan Pintilie       return true;
820741a2c9SStefan Pintilie     }
830741a2c9SStefan Pintilie 
840741a2c9SStefan Pintilie     bool WalkUpFromExpr(Expr *E) {
850741a2c9SStefan Pintilie       recordCallback(__func__, E,
860741a2c9SStefan Pintilie                      [&]() { RecordingVisitorBase::WalkUpFromExpr(E); });
870741a2c9SStefan Pintilie       return true;
880741a2c9SStefan Pintilie     }
890741a2c9SStefan Pintilie 
900741a2c9SStefan Pintilie     bool WalkUpFromBinaryOperator(BinaryOperator *BO) {
910741a2c9SStefan Pintilie       recordCallback(__func__, BO, [&]() {
920741a2c9SStefan Pintilie         RecordingVisitorBase::WalkUpFromBinaryOperator(BO);
930741a2c9SStefan Pintilie       });
940741a2c9SStefan Pintilie       return true;
950741a2c9SStefan Pintilie     }
960741a2c9SStefan Pintilie   };
970741a2c9SStefan Pintilie 
980741a2c9SStefan Pintilie   StringRef Code = R"cpp(
990741a2c9SStefan Pintilie void test() {
1000741a2c9SStefan Pintilie   1;
1010741a2c9SStefan Pintilie   2 + 3;
1020741a2c9SStefan Pintilie   4;
1030741a2c9SStefan Pintilie }
1040741a2c9SStefan Pintilie )cpp";
1050741a2c9SStefan Pintilie 
1060741a2c9SStefan Pintilie   EXPECT_TRUE(visitorCallbackLogEqual(
1070741a2c9SStefan Pintilie       RecordingVisitor(ShouldTraversePostOrder::No), Code,
1080741a2c9SStefan Pintilie       R"txt(
1090741a2c9SStefan Pintilie WalkUpFromStmt CompoundStmt
1100741a2c9SStefan Pintilie WalkUpFromExpr IntegerLiteral(1)
1110741a2c9SStefan Pintilie   WalkUpFromStmt IntegerLiteral(1)
1120741a2c9SStefan Pintilie TraverseBinaryOperator BinaryOperator(+)
1130741a2c9SStefan Pintilie   WalkUpFromBinaryOperator BinaryOperator(+)
1140741a2c9SStefan Pintilie     WalkUpFromExpr BinaryOperator(+)
1150741a2c9SStefan Pintilie       WalkUpFromStmt BinaryOperator(+)
1160741a2c9SStefan Pintilie   WalkUpFromExpr IntegerLiteral(2)
1170741a2c9SStefan Pintilie     WalkUpFromStmt IntegerLiteral(2)
1180741a2c9SStefan Pintilie   WalkUpFromExpr IntegerLiteral(3)
1190741a2c9SStefan Pintilie     WalkUpFromStmt IntegerLiteral(3)
1200741a2c9SStefan Pintilie WalkUpFromExpr IntegerLiteral(4)
1210741a2c9SStefan Pintilie   WalkUpFromStmt IntegerLiteral(4)
1220741a2c9SStefan Pintilie )txt"));
1230741a2c9SStefan Pintilie 
1240741a2c9SStefan Pintilie   EXPECT_TRUE(visitorCallbackLogEqual(
1250741a2c9SStefan Pintilie       RecordingVisitor(ShouldTraversePostOrder::Yes), Code,
1260741a2c9SStefan Pintilie       R"txt(
1270741a2c9SStefan Pintilie WalkUpFromExpr IntegerLiteral(1)
1280741a2c9SStefan Pintilie   WalkUpFromStmt IntegerLiteral(1)
1290741a2c9SStefan Pintilie TraverseBinaryOperator BinaryOperator(+)
1300741a2c9SStefan Pintilie   WalkUpFromExpr IntegerLiteral(2)
1310741a2c9SStefan Pintilie     WalkUpFromStmt IntegerLiteral(2)
1320741a2c9SStefan Pintilie   WalkUpFromExpr IntegerLiteral(3)
1330741a2c9SStefan Pintilie     WalkUpFromStmt IntegerLiteral(3)
1340741a2c9SStefan Pintilie   WalkUpFromBinaryOperator BinaryOperator(+)
1350741a2c9SStefan Pintilie     WalkUpFromExpr BinaryOperator(+)
1360741a2c9SStefan Pintilie       WalkUpFromStmt BinaryOperator(+)
1370741a2c9SStefan Pintilie WalkUpFromExpr IntegerLiteral(4)
1380741a2c9SStefan Pintilie   WalkUpFromStmt IntegerLiteral(4)
1390741a2c9SStefan Pintilie WalkUpFromStmt CompoundStmt
1400741a2c9SStefan Pintilie )txt"));
1410741a2c9SStefan Pintilie }
1420741a2c9SStefan Pintilie 
TEST(RecursiveASTVisitor,StmtCallbacks_WalkUpFromBinaryOperator)1430741a2c9SStefan Pintilie TEST(RecursiveASTVisitor, StmtCallbacks_WalkUpFromBinaryOperator) {
1440741a2c9SStefan Pintilie   class RecordingVisitor : public RecordingVisitorBase<RecordingVisitor> {
1450741a2c9SStefan Pintilie   public:
1460741a2c9SStefan Pintilie     RecordingVisitor(ShouldTraversePostOrder ShouldTraversePostOrderValue)
1470741a2c9SStefan Pintilie         : RecordingVisitorBase(ShouldTraversePostOrderValue) {}
1480741a2c9SStefan Pintilie 
1490741a2c9SStefan Pintilie     bool WalkUpFromStmt(Stmt *S) {
1500741a2c9SStefan Pintilie       recordCallback(__func__, S,
1510741a2c9SStefan Pintilie                      [&]() { RecordingVisitorBase::WalkUpFromStmt(S); });
1520741a2c9SStefan Pintilie       return true;
1530741a2c9SStefan Pintilie     }
1540741a2c9SStefan Pintilie 
1550741a2c9SStefan Pintilie     bool WalkUpFromExpr(Expr *E) {
1560741a2c9SStefan Pintilie       recordCallback(__func__, E,
1570741a2c9SStefan Pintilie                      [&]() { RecordingVisitorBase::WalkUpFromExpr(E); });
1580741a2c9SStefan Pintilie       return true;
1590741a2c9SStefan Pintilie     }
1600741a2c9SStefan Pintilie 
1610741a2c9SStefan Pintilie     bool WalkUpFromBinaryOperator(BinaryOperator *BO) {
1620741a2c9SStefan Pintilie       recordCallback(__func__, BO, [&]() {
1630741a2c9SStefan Pintilie         RecordingVisitorBase::WalkUpFromBinaryOperator(BO);
1640741a2c9SStefan Pintilie       });
1650741a2c9SStefan Pintilie       return true;
1660741a2c9SStefan Pintilie     }
1670741a2c9SStefan Pintilie   };
1680741a2c9SStefan Pintilie 
1690741a2c9SStefan Pintilie   StringRef Code = R"cpp(
1700741a2c9SStefan Pintilie void test() {
1710741a2c9SStefan Pintilie   1;
1720741a2c9SStefan Pintilie   2 + 3;
1730741a2c9SStefan Pintilie   4;
1740741a2c9SStefan Pintilie }
1750741a2c9SStefan Pintilie )cpp";
1760741a2c9SStefan Pintilie 
1770741a2c9SStefan Pintilie   EXPECT_TRUE(visitorCallbackLogEqual(
1780741a2c9SStefan Pintilie       RecordingVisitor(ShouldTraversePostOrder::No), Code,
1790741a2c9SStefan Pintilie       R"txt(
1800741a2c9SStefan Pintilie WalkUpFromStmt CompoundStmt
1810741a2c9SStefan Pintilie WalkUpFromExpr IntegerLiteral(1)
1820741a2c9SStefan Pintilie   WalkUpFromStmt IntegerLiteral(1)
1830741a2c9SStefan Pintilie WalkUpFromBinaryOperator BinaryOperator(+)
1840741a2c9SStefan Pintilie   WalkUpFromExpr BinaryOperator(+)
1850741a2c9SStefan Pintilie     WalkUpFromStmt BinaryOperator(+)
1860741a2c9SStefan Pintilie WalkUpFromExpr IntegerLiteral(2)
1870741a2c9SStefan Pintilie   WalkUpFromStmt IntegerLiteral(2)
1880741a2c9SStefan Pintilie WalkUpFromExpr IntegerLiteral(3)
1890741a2c9SStefan Pintilie   WalkUpFromStmt IntegerLiteral(3)
1900741a2c9SStefan Pintilie WalkUpFromExpr IntegerLiteral(4)
1910741a2c9SStefan Pintilie   WalkUpFromStmt IntegerLiteral(4)
1920741a2c9SStefan Pintilie )txt"));
1930741a2c9SStefan Pintilie 
1940741a2c9SStefan Pintilie   EXPECT_TRUE(visitorCallbackLogEqual(
1950741a2c9SStefan Pintilie       RecordingVisitor(ShouldTraversePostOrder::Yes), Code,
1960741a2c9SStefan Pintilie       R"txt(
1970741a2c9SStefan Pintilie WalkUpFromExpr IntegerLiteral(1)
1980741a2c9SStefan Pintilie   WalkUpFromStmt IntegerLiteral(1)
1990741a2c9SStefan Pintilie WalkUpFromExpr IntegerLiteral(2)
2000741a2c9SStefan Pintilie   WalkUpFromStmt IntegerLiteral(2)
2010741a2c9SStefan Pintilie WalkUpFromExpr IntegerLiteral(3)
2020741a2c9SStefan Pintilie   WalkUpFromStmt IntegerLiteral(3)
2030741a2c9SStefan Pintilie WalkUpFromBinaryOperator BinaryOperator(+)
2040741a2c9SStefan Pintilie   WalkUpFromExpr BinaryOperator(+)
2050741a2c9SStefan Pintilie     WalkUpFromStmt BinaryOperator(+)
2060741a2c9SStefan Pintilie WalkUpFromExpr IntegerLiteral(4)
2070741a2c9SStefan Pintilie   WalkUpFromStmt IntegerLiteral(4)
2080741a2c9SStefan Pintilie WalkUpFromStmt CompoundStmt
2090741a2c9SStefan Pintilie )txt"));
2100741a2c9SStefan Pintilie }
211