brintos

brintos / llvm-project-archived public Read only

0
0
Text · 6.0 KiB · 3d7a028 Raw
211 lines · cpp
1//===- CallbacksBinaryOperator.cpp ----------------------------------------===//2//3// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.4// See https://llvm.org/LICENSE.txt for license information.5// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception6//7//===----------------------------------------------------------------------===//8 9#include "CallbacksCommon.h"10 11TEST(RecursiveASTVisitor, StmtCallbacks_TraverseBinaryOperator) {12  class RecordingVisitor : public RecordingVisitorBase<RecordingVisitor> {13  public:14    RecordingVisitor(ShouldTraversePostOrder ShouldTraversePostOrderValue)15        : RecordingVisitorBase(ShouldTraversePostOrderValue) {}16 17    bool TraverseBinaryOperator(BinaryOperator *BO) {18      recordCallback(__func__, BO, [&]() {19        RecordingVisitorBase::TraverseBinaryOperator(BO);20      });21      return true;22    }23 24    bool WalkUpFromStmt(Stmt *S) {25      recordCallback(__func__, S,26                     [&]() { RecordingVisitorBase::WalkUpFromStmt(S); });27      return true;28    }29  };30 31  StringRef Code = R"cpp(32void test() {33  1;34  2 + 3;35  4;36}37)cpp";38 39  EXPECT_TRUE(visitorCallbackLogEqual(40      RecordingVisitor(ShouldTraversePostOrder::No), Code,41      R"txt(42WalkUpFromStmt CompoundStmt43WalkUpFromStmt IntegerLiteral(1)44TraverseBinaryOperator BinaryOperator(+)45  WalkUpFromStmt BinaryOperator(+)46  WalkUpFromStmt IntegerLiteral(2)47  WalkUpFromStmt IntegerLiteral(3)48WalkUpFromStmt IntegerLiteral(4)49)txt"));50 51  EXPECT_TRUE(visitorCallbackLogEqual(52      RecordingVisitor(ShouldTraversePostOrder::Yes), Code,53      R"txt(54WalkUpFromStmt IntegerLiteral(1)55TraverseBinaryOperator BinaryOperator(+)56  WalkUpFromStmt IntegerLiteral(2)57  WalkUpFromStmt IntegerLiteral(3)58  WalkUpFromStmt BinaryOperator(+)59WalkUpFromStmt IntegerLiteral(4)60WalkUpFromStmt CompoundStmt61)txt"));62}63 64TEST(RecursiveASTVisitor,65     StmtCallbacks_TraverseBinaryOperator_WalkUpFromBinaryOperator) {66  class RecordingVisitor : public RecordingVisitorBase<RecordingVisitor> {67  public:68    RecordingVisitor(ShouldTraversePostOrder ShouldTraversePostOrderValue)69        : RecordingVisitorBase(ShouldTraversePostOrderValue) {}70 71    bool TraverseBinaryOperator(BinaryOperator *BO) {72      recordCallback(__func__, BO, [&]() {73        RecordingVisitorBase::TraverseBinaryOperator(BO);74      });75      return true;76    }77 78    bool WalkUpFromStmt(Stmt *S) {79      recordCallback(__func__, S,80                     [&]() { RecordingVisitorBase::WalkUpFromStmt(S); });81      return true;82    }83 84    bool WalkUpFromExpr(Expr *E) {85      recordCallback(__func__, E,86                     [&]() { RecordingVisitorBase::WalkUpFromExpr(E); });87      return true;88    }89 90    bool WalkUpFromBinaryOperator(BinaryOperator *BO) {91      recordCallback(__func__, BO, [&]() {92        RecordingVisitorBase::WalkUpFromBinaryOperator(BO);93      });94      return true;95    }96  };97 98  StringRef Code = R"cpp(99void test() {100  1;101  2 + 3;102  4;103}104)cpp";105 106  EXPECT_TRUE(visitorCallbackLogEqual(107      RecordingVisitor(ShouldTraversePostOrder::No), Code,108      R"txt(109WalkUpFromStmt CompoundStmt110WalkUpFromExpr IntegerLiteral(1)111  WalkUpFromStmt IntegerLiteral(1)112TraverseBinaryOperator BinaryOperator(+)113  WalkUpFromBinaryOperator BinaryOperator(+)114    WalkUpFromExpr BinaryOperator(+)115      WalkUpFromStmt BinaryOperator(+)116  WalkUpFromExpr IntegerLiteral(2)117    WalkUpFromStmt IntegerLiteral(2)118  WalkUpFromExpr IntegerLiteral(3)119    WalkUpFromStmt IntegerLiteral(3)120WalkUpFromExpr IntegerLiteral(4)121  WalkUpFromStmt IntegerLiteral(4)122)txt"));123 124  EXPECT_TRUE(visitorCallbackLogEqual(125      RecordingVisitor(ShouldTraversePostOrder::Yes), Code,126      R"txt(127WalkUpFromExpr IntegerLiteral(1)128  WalkUpFromStmt IntegerLiteral(1)129TraverseBinaryOperator BinaryOperator(+)130  WalkUpFromExpr IntegerLiteral(2)131    WalkUpFromStmt IntegerLiteral(2)132  WalkUpFromExpr IntegerLiteral(3)133    WalkUpFromStmt IntegerLiteral(3)134  WalkUpFromBinaryOperator BinaryOperator(+)135    WalkUpFromExpr BinaryOperator(+)136      WalkUpFromStmt BinaryOperator(+)137WalkUpFromExpr IntegerLiteral(4)138  WalkUpFromStmt IntegerLiteral(4)139WalkUpFromStmt CompoundStmt140)txt"));141}142 143TEST(RecursiveASTVisitor, StmtCallbacks_WalkUpFromBinaryOperator) {144  class RecordingVisitor : public RecordingVisitorBase<RecordingVisitor> {145  public:146    RecordingVisitor(ShouldTraversePostOrder ShouldTraversePostOrderValue)147        : RecordingVisitorBase(ShouldTraversePostOrderValue) {}148 149    bool WalkUpFromStmt(Stmt *S) {150      recordCallback(__func__, S,151                     [&]() { RecordingVisitorBase::WalkUpFromStmt(S); });152      return true;153    }154 155    bool WalkUpFromExpr(Expr *E) {156      recordCallback(__func__, E,157                     [&]() { RecordingVisitorBase::WalkUpFromExpr(E); });158      return true;159    }160 161    bool WalkUpFromBinaryOperator(BinaryOperator *BO) {162      recordCallback(__func__, BO, [&]() {163        RecordingVisitorBase::WalkUpFromBinaryOperator(BO);164      });165      return true;166    }167  };168 169  StringRef Code = R"cpp(170void test() {171  1;172  2 + 3;173  4;174}175)cpp";176 177  EXPECT_TRUE(visitorCallbackLogEqual(178      RecordingVisitor(ShouldTraversePostOrder::No), Code,179      R"txt(180WalkUpFromStmt CompoundStmt181WalkUpFromExpr IntegerLiteral(1)182  WalkUpFromStmt IntegerLiteral(1)183WalkUpFromBinaryOperator BinaryOperator(+)184  WalkUpFromExpr BinaryOperator(+)185    WalkUpFromStmt BinaryOperator(+)186WalkUpFromExpr IntegerLiteral(2)187  WalkUpFromStmt IntegerLiteral(2)188WalkUpFromExpr IntegerLiteral(3)189  WalkUpFromStmt IntegerLiteral(3)190WalkUpFromExpr IntegerLiteral(4)191  WalkUpFromStmt IntegerLiteral(4)192)txt"));193 194  EXPECT_TRUE(visitorCallbackLogEqual(195      RecordingVisitor(ShouldTraversePostOrder::Yes), Code,196      R"txt(197WalkUpFromExpr IntegerLiteral(1)198  WalkUpFromStmt IntegerLiteral(1)199WalkUpFromExpr IntegerLiteral(2)200  WalkUpFromStmt IntegerLiteral(2)201WalkUpFromExpr IntegerLiteral(3)202  WalkUpFromStmt IntegerLiteral(3)203WalkUpFromBinaryOperator BinaryOperator(+)204  WalkUpFromExpr BinaryOperator(+)205    WalkUpFromStmt BinaryOperator(+)206WalkUpFromExpr IntegerLiteral(4)207  WalkUpFromStmt IntegerLiteral(4)208WalkUpFromStmt CompoundStmt209)txt"));210}211