aboutsummaryrefslogtreecommitdiff
path: root/clang/unittests/Tooling/Syntax/TreeTest.cpp
diff options
context:
space:
mode:
authorEduardo Caldas <ecaldas@google.com>2020-05-26 12:19:07 +0200
committerDmitri Gribenko <gribozavr@gmail.com>2020-05-26 12:25:58 +0200
commit3785eb83af4161bd52ed993ef3a2184c998071e6 (patch)
treed1cfd698e6a167fcf5a44e0a42b7d74a7c4b3641 /clang/unittests/Tooling/Syntax/TreeTest.cpp
parent5229dd1366ab1423d66d3d16dddff6fbaee049d8 (diff)
downloadllvm-3785eb83af4161bd52ed993ef3a2184c998071e6.zip
llvm-3785eb83af4161bd52ed993ef3a2184c998071e6.tar.gz
llvm-3785eb83af4161bd52ed993ef3a2184c998071e6.tar.bz2
Add support for binary operators in Syntax Trees
Reviewers: gribozavr2 Reviewed By: gribozavr2 Subscribers: cfe-commits Tags: #clang Differential Revision: https://reviews.llvm.org/D80540
Diffstat (limited to 'clang/unittests/Tooling/Syntax/TreeTest.cpp')
-rw-r--r--clang/unittests/Tooling/Syntax/TreeTest.cpp269
1 files changed, 255 insertions, 14 deletions
diff --git a/clang/unittests/Tooling/Syntax/TreeTest.cpp b/clang/unittests/Tooling/Syntax/TreeTest.cpp
index d11a365..634f99f 100644
--- a/clang/unittests/Tooling/Syntax/TreeTest.cpp
+++ b/clang/unittests/Tooling/Syntax/TreeTest.cpp
@@ -564,7 +564,8 @@ void test() {
|-{
|-ExpressionStatement
| |-UnknownExpression
- | | |-test
+ | | |-UnknownExpression
+ | | | `-test
| | |-(
| | `-)
| `-;
@@ -576,14 +577,16 @@ void test() {
| |-)
| |-ExpressionStatement
| | |-UnknownExpression
- | | | |-test
+ | | | |-UnknownExpression
+ | | | | `-test
| | | |-(
| | | `-)
| | `-;
| |-else
| `-ExpressionStatement
| |-UnknownExpression
- | | |-test
+ | | |-UnknownExpression
+ | | | `-test
| | |-(
| | `-)
| `-;
@@ -591,6 +594,237 @@ void test() {
)txt");
}
+TEST_F(SyntaxTreeTest, BinaryOperator) {
+ expectTreeDumpEqual(
+ R"cpp(
+void test(int a) {
+ 1 - 2;
+ 1 == 2;
+ a = 1;
+ a <<= 1;
+
+ true || false;
+ true or false;
+
+ 1 & 2;
+ 1 bitand 2;
+
+ a ^= 3;
+ a xor_eq 3;
+}
+ )cpp",
+ R"txt(
+*: TranslationUnit
+`-SimpleDeclaration
+ |-void
+ |-SimpleDeclarator
+ | |-test
+ | `-ParametersAndQualifiers
+ | |-(
+ | |-SimpleDeclaration
+ | | |-int
+ | | `-SimpleDeclarator
+ | | `-a
+ | `-)
+ `-CompoundStatement
+ |-{
+ |-ExpressionStatement
+ | |-BinaryOperatorExpression
+ | | |-UnknownExpression
+ | | | `-1
+ | | |--
+ | | `-UnknownExpression
+ | | `-2
+ | `-;
+ |-ExpressionStatement
+ | |-BinaryOperatorExpression
+ | | |-UnknownExpression
+ | | | `-1
+ | | |-==
+ | | `-UnknownExpression
+ | | `-2
+ | `-;
+ |-ExpressionStatement
+ | |-BinaryOperatorExpression
+ | | |-UnknownExpression
+ | | | `-a
+ | | |-=
+ | | `-UnknownExpression
+ | | `-1
+ | `-;
+ |-ExpressionStatement
+ | |-BinaryOperatorExpression
+ | | |-UnknownExpression
+ | | | `-a
+ | | |-<<=
+ | | `-UnknownExpression
+ | | `-1
+ | `-;
+ |-ExpressionStatement
+ | |-BinaryOperatorExpression
+ | | |-UnknownExpression
+ | | | `-true
+ | | |-||
+ | | `-UnknownExpression
+ | | `-false
+ | `-;
+ |-ExpressionStatement
+ | |-BinaryOperatorExpression
+ | | |-UnknownExpression
+ | | | `-true
+ | | |-or
+ | | `-UnknownExpression
+ | | `-false
+ | `-;
+ |-ExpressionStatement
+ | |-BinaryOperatorExpression
+ | | |-UnknownExpression
+ | | | `-1
+ | | |-&
+ | | `-UnknownExpression
+ | | `-2
+ | `-;
+ |-ExpressionStatement
+ | |-BinaryOperatorExpression
+ | | |-UnknownExpression
+ | | | `-1
+ | | |-bitand
+ | | `-UnknownExpression
+ | | `-2
+ | `-;
+ |-ExpressionStatement
+ | |-BinaryOperatorExpression
+ | | |-UnknownExpression
+ | | | `-a
+ | | |-^=
+ | | `-UnknownExpression
+ | | `-3
+ | `-;
+ |-ExpressionStatement
+ | |-BinaryOperatorExpression
+ | | |-UnknownExpression
+ | | | `-a
+ | | |-xor_eq
+ | | `-UnknownExpression
+ | | `-3
+ | `-;
+ `-}
+)txt");
+}
+
+TEST_F(SyntaxTreeTest, NestedBinaryOperator) {
+ expectTreeDumpEqual(
+ R"cpp(
+void test(int a, int b) {
+ (1 + 2) * (4 / 2);
+ a + b + 42;
+ a = b = 42;
+ a + b * 4 + 2;
+ a % 2 + b * 42;
+}
+ )cpp",
+ R"txt(
+*: TranslationUnit
+`-SimpleDeclaration
+ |-void
+ |-SimpleDeclarator
+ | |-test
+ | `-ParametersAndQualifiers
+ | |-(
+ | |-SimpleDeclaration
+ | | |-int
+ | | `-SimpleDeclarator
+ | | `-a
+ | |-,
+ | |-SimpleDeclaration
+ | | |-int
+ | | `-SimpleDeclarator
+ | | `-b
+ | `-)
+ `-CompoundStatement
+ |-{
+ |-ExpressionStatement
+ | |-BinaryOperatorExpression
+ | | |-UnknownExpression
+ | | | |-(
+ | | | |-BinaryOperatorExpression
+ | | | | |-UnknownExpression
+ | | | | | `-1
+ | | | | |-+
+ | | | | `-UnknownExpression
+ | | | | `-2
+ | | | `-)
+ | | |-*
+ | | `-UnknownExpression
+ | | |-(
+ | | |-BinaryOperatorExpression
+ | | | |-UnknownExpression
+ | | | | `-4
+ | | | |-/
+ | | | `-UnknownExpression
+ | | | `-2
+ | | `-)
+ | `-;
+ |-ExpressionStatement
+ | |-BinaryOperatorExpression
+ | | |-BinaryOperatorExpression
+ | | | |-UnknownExpression
+ | | | | `-a
+ | | | |-+
+ | | | `-UnknownExpression
+ | | | `-b
+ | | |-+
+ | | `-UnknownExpression
+ | | `-42
+ | `-;
+ |-ExpressionStatement
+ | |-BinaryOperatorExpression
+ | | |-UnknownExpression
+ | | | `-a
+ | | |-=
+ | | `-BinaryOperatorExpression
+ | | |-UnknownExpression
+ | | | `-b
+ | | |-=
+ | | `-UnknownExpression
+ | | `-42
+ | `-;
+ |-ExpressionStatement
+ | |-BinaryOperatorExpression
+ | | |-BinaryOperatorExpression
+ | | | |-UnknownExpression
+ | | | | `-a
+ | | | |-+
+ | | | `-BinaryOperatorExpression
+ | | | |-UnknownExpression
+ | | | | `-b
+ | | | |-*
+ | | | `-UnknownExpression
+ | | | `-4
+ | | |-+
+ | | `-UnknownExpression
+ | | `-2
+ | `-;
+ |-ExpressionStatement
+ | |-BinaryOperatorExpression
+ | | |-BinaryOperatorExpression
+ | | | |-UnknownExpression
+ | | | | `-a
+ | | | |-%
+ | | | `-UnknownExpression
+ | | | `-2
+ | | |-+
+ | | `-BinaryOperatorExpression
+ | | |-UnknownExpression
+ | | | `-b
+ | | |-*
+ | | `-UnknownExpression
+ | | `-42
+ | `-;
+ `-}
+)txt");
+}
+
TEST_F(SyntaxTreeTest, MultipleDeclaratorsGrouping) {
expectTreeDumpEqual(
R"cpp(
@@ -1201,10 +1435,12 @@ void test() {
|-IfStatement
| |-I: if
| |-I: (
- | |-I: UnknownExpression
- | | |-I: 1
+ | |-I: BinaryOperatorExpression
+ | | |-I: UnknownExpression
+ | | | `-I: 1
| | |-I: +
- | | `-I: 1
+ | | `-I: UnknownExpression
+ | | `-I: 1
| |-I: )
| |-I: CompoundStatement
| | |-I: {
@@ -1312,13 +1548,17 @@ void f(int xs[static 10]);
| | | `-]
| | |-=
| | `-UnknownExpression
-| | |-{
-| | |-1
-| | |-,
-| | |-2
-| | |-,
-| | |-3
-| | `-}
+| | `-UnknownExpression
+| | |-{
+| | |-UnknownExpression
+| | | `-1
+| | |-,
+| | |-UnknownExpression
+| | | `-2
+| | |-,
+| | |-UnknownExpression
+| | | `-3
+| | `-}
| `-;
`-SimpleDeclaration
|-void
@@ -1628,7 +1868,8 @@ const int const *const *volatile b;
| | |-=
| | `-UnknownExpression
| | |--
-| | `-1
+| | `-UnknownExpression
+| | `-1
| `-;
|-SimpleDeclaration
| |-int