a()
0 *expr.CallExpr {
1 . CallExpr: ast.CallExpr {
2 . . Fun: *ast.Ident {
3 . . . NamePos: -
4 . . . Name: "a"
5 . . }
6 . . Lparen: -
7 . . Ellipsis: -
8 . . Rparen: -
9 . }
10 }
0 *ast.CallExpr {
1 . Fun: *ast.Ident {
2 . . NamePos: -
3 . . Name: "a"
4 . }
5 . Lparen: -
6 . Ellipsis: -
7 . Rparen: -
8 }
!a()
0 *expr.NotExpr {
1 . UnaryExpr: ast.UnaryExpr {
2 . . OpPos: -
3 . . Op: !
4 . . X: *expr.CallExpr {
5 . . . CallExpr: ast.CallExpr {
6 . . . . Fun: *ast.Ident {
7 . . . . . NamePos: -
8 . . . . . Name: "a"
9 . . . . }
10 . . . . Lparen: -
11 . . . . Ellipsis: -
12 . . . . Rparen: -
13 . . . }
14 . . }
15 . }
16 }
0 *ast.UnaryExpr {
1 . OpPos: -
2 . Op: !
3 . X: *ast.CallExpr {
4 . . Fun: *ast.Ident {
5 . . . NamePos: -
6 . . . Name: "a"
7 . . }
8 . . Lparen: -
9 . . Ellipsis: -
10 . . Rparen: -
11 . }
12 }
a.range(c, d)
0 *expr.CallExpr {
1 . CallExpr: ast.CallExpr {
2 . . Fun: *ast.SelectorExpr {
3 . . . X: *ast.Ident {
4 . . . . NamePos: -
5 . . . . Name: "a"
6 . . . }
7 . . . Sel: *ast.Ident {
8 . . . . NamePos: -
9 . . . . Name: "rangee"
10 . . . }
11 . . }
12 . . Lparen: -
13 . . Args: []ast.Expr (len = 2) {
14 . . . 0: *ast.Ident {
15 . . . . NamePos: -
16 . . . . Name: "c"
17 . . . }
18 . . . 1: *ast.Ident {
19 . . . . NamePos: -
20 . . . . Name: "d"
21 . . . }
22 . . }
23 . . Ellipsis: -
24 . . Rparen: -
25 . }
26 }
0 *ast.CallExpr {
1 . Fun: *ast.SelectorExpr {
2 . . X: *ast.Ident {
3 . . . NamePos: -
4 . . . Name: "a"
5 . . }
6 . . Sel: *ast.Ident {
7 . . . NamePos: -
8 . . . Name: "rangee"
9 . . }
10 . }
11 . Lparen: -
12 . Args: []ast.Expr (len = 2) {
13 . . 0: *ast.Ident {
14 . . . NamePos: -
15 . . . Name: "c"
16 . . }
17 . . 1: *ast.Ident {
18 . . . NamePos: -
19 . . . Name: "d"
20 . . }
21 . }
22 . Ellipsis: -
23 . Rparen: -
24 }
!a.range(c, d)
0 *expr.NotExpr {
1 . UnaryExpr: ast.UnaryExpr {
2 . . OpPos: -
3 . . Op: !
4 . . X: *expr.CallExpr {
5 . . . CallExpr: ast.CallExpr {
6 . . . . Fun: *ast.SelectorExpr {
7 . . . . . X: *ast.Ident {
8 . . . . . . NamePos: -
9 . . . . . . Name: "a"
10 . . . . . }
11 . . . . . Sel: *ast.Ident {
12 . . . . . . NamePos: -
13 . . . . . . Name: "rangee"
14 . . . . . }
15 . . . . }
16 . . . . Lparen: -
17 . . . . Args: []ast.Expr (len = 2) {
18 . . . . . 0: *ast.Ident {
19 . . . . . . NamePos: -
20 . . . . . . Name: "c"
21 . . . . . }
22 . . . . . 1: *ast.Ident {
23 . . . . . . NamePos: -
24 . . . . . . Name: "d"
25 . . . . . }
26 . . . . }
27 . . . . Ellipsis: -
28 . . . . Rparen: -
29 . . . }
30 . . }
31 . }
32 }
0 *ast.UnaryExpr {
1 . OpPos: -
2 . Op: !
3 . X: *ast.CallExpr {
4 . . Fun: *ast.SelectorExpr {
5 . . . X: *ast.Ident {
6 . . . . NamePos: -
7 . . . . Name: "a"
8 . . . }
9 . . . Sel: *ast.Ident {
10 . . . . NamePos: -
11 . . . . Name: "rangee"
12 . . . }
13 . . }
14 . . Lparen: -
15 . . Args: []ast.Expr (len = 2) {
16 . . . 0: *ast.Ident {
17 . . . . NamePos: -
18 . . . . Name: "c"
19 . . . }
20 . . . 1: *ast.Ident {
21 . . . . NamePos: -
22 . . . . Name: "d"
23 . . . }
24 . . }
25 . . Ellipsis: -
26 . . Rparen: -
27 . }
28 }
a(1,'2',3.1,"4",True)
0 *expr.CallExpr {
1 . CallExpr: ast.CallExpr {
2 . . Fun: *ast.Ident {
3 . . . NamePos: -
4 . . . Name: "a"
5 . . }
6 . . Lparen: -
7 . . Args: []ast.Expr (len = 5) {
8 . . . 0: *ast.BasicLit {
9 . . . . ValuePos: -
10 . . . . Kind: INT
11 . . . . Value: "1"
12 . . . }
13 . . . 1: *ast.BasicLit {
14 . . . . ValuePos: -
15 . . . . Kind: CHAR
16 . . . . Value: "'2'"
17 . . . }
18 . . . 2: *ast.BasicLit {
19 . . . . ValuePos: -
20 . . . . Kind: FLOAT
21 . . . . Value: "3.1"
22 . . . }
23 . . . 3: *ast.BasicLit {
24 . . . . ValuePos: -
25 . . . . Kind: STRING
26 . . . . Value: "\"4\""
27 . . . }
28 . . . 4: *ast.Ident {
29 . . . . NamePos: -
30 . . . . Name: "True"
31 . . . }
32 . . }
33 . . Ellipsis: -
34 . . Rparen: -
35 . }
36 }
0 *ast.CallExpr {
1 . Fun: *ast.Ident {
2 . . NamePos: -
3 . . Name: "a"
4 . }
5 . Lparen: -
6 . Args: []ast.Expr (len = 5) {
7 . . 0: *ast.BasicLit {
8 . . . ValuePos: -
9 . . . Kind: INT
10 . . . Value: "1"
11 . . }
12 . . 1: *ast.BasicLit {
13 . . . ValuePos: -
14 . . . Kind: CHAR
15 . . . Value: "'2'"
16 . . }
17 . . 2: *ast.BasicLit {
18 . . . ValuePos: -
19 . . . Kind: FLOAT
20 . . . Value: "3.1"
21 . . }
22 . . 3: *ast.BasicLit {
23 . . . ValuePos: -
24 . . . Kind: STRING
25 . . . Value: "\"4\""
26 . . }
27 . . 4: *ast.Ident {
28 . . . NamePos: -
29 . . . Name: "True"
30 . . }
31 . }
32 . Ellipsis: -
33 . Rparen: -
34 }
a == 1 or b == 1 or (c.d.len() > 10 and c.e.ends("hehe"))
0 *expr.LogicExpr {
1 . BinaryExpr: ast.BinaryExpr {
2 . . X: *expr.LogicExpr {
3 . . . BinaryExpr: ast.BinaryExpr {
4 . . . . X: *expr.BinaryExpr {
5 . . . . . BinaryExpr: ast.BinaryExpr {
6 . . . . . . X: *ast.Ident {
7 . . . . . . . NamePos: -
8 . . . . . . . Name: "a"
9 . . . . . . }
10 . . . . . . OpPos: -
11 . . . . . . Op: ==
12 . . . . . . Y: *ast.BasicLit {
13 . . . . . . . ValuePos: -
14 . . . . . . . Kind: INT
15 . . . . . . . Value: "1"
16 . . . . . . }
17 . . . . . }
18 . . . . }
19 . . . . OpPos: -
20 . . . . Op: ||
21 . . . . Y: *expr.BinaryExpr {
22 . . . . . BinaryExpr: ast.BinaryExpr {
23 . . . . . . X: *ast.Ident {
24 . . . . . . . NamePos: -
25 . . . . . . . Name: "b"
26 . . . . . . }
27 . . . . . . OpPos: -
28 . . . . . . Op: ==
29 . . . . . . Y: *ast.BasicLit {
30 . . . . . . . ValuePos: -
31 . . . . . . . Kind: INT
32 . . . . . . . Value: "1"
33 . . . . . . }
34 . . . . . }
35 . . . . }
36 . . . }
37 . . }
38 . . OpPos: -
39 . . Op: ||
40 . . Y: *expr.GroupExpr {
41 . . . ParenExpr: ast.ParenExpr {
42 . . . . Lparen: -
43 . . . . X: *expr.LogicExpr {
44 . . . . . BinaryExpr: ast.BinaryExpr {
45 . . . . . . X: *expr.BinaryExpr {
46 . . . . . . . BinaryExpr: ast.BinaryExpr {
47 . . . . . . . . X: *expr.CallExpr {
48 . . . . . . . . . CallExpr: ast.CallExpr {
49 . . . . . . . . . . Fun: *ast.SelectorExpr {
50 . . . . . . . . . . . X: *ast.SelectorExpr {
51 . . . . . . . . . . . . X: *ast.Ident {
52 . . . . . . . . . . . . . NamePos: -
53 . . . . . . . . . . . . . Name: "c"
54 . . . . . . . . . . . . }
55 . . . . . . . . . . . . Sel: *ast.Ident {
56 . . . . . . . . . . . . . NamePos: -
57 . . . . . . . . . . . . . Name: "d"
58 . . . . . . . . . . . . }
59 . . . . . . . . . . . }
60 . . . . . . . . . . . Sel: *ast.Ident {
61 . . . . . . . . . . . . NamePos: -
62 . . . . . . . . . . . . Name: "len"
63 . . . . . . . . . . . }
64 . . . . . . . . . . }
65 . . . . . . . . . . Lparen: -
66 . . . . . . . . . . Ellipsis: -
67 . . . . . . . . . . Rparen: -
68 . . . . . . . . . }
69 . . . . . . . . }
70 . . . . . . . . OpPos: -
71 . . . . . . . . Op: >
72 . . . . . . . . Y: *ast.BasicLit {
73 . . . . . . . . . ValuePos: -
74 . . . . . . . . . Kind: INT
75 . . . . . . . . . Value: "10"
76 . . . . . . . . }
77 . . . . . . . }
78 . . . . . . }
79 . . . . . . OpPos: -
80 . . . . . . Op: &&
81 . . . . . . Y: *expr.CallExpr {
82 . . . . . . . CallExpr: ast.CallExpr {
83 . . . . . . . . Fun: *ast.SelectorExpr {
84 . . . . . . . . . X: *ast.SelectorExpr {
85 . . . . . . . . . . X: *ast.Ident {
86 . . . . . . . . . . . NamePos: -
87 . . . . . . . . . . . Name: "c"
88 . . . . . . . . . . }
89 . . . . . . . . . . Sel: *ast.Ident {
90 . . . . . . . . . . . NamePos: -
91 . . . . . . . . . . . Name: "e"
92 . . . . . . . . . . }
93 . . . . . . . . . }
94 . . . . . . . . . Sel: *ast.Ident {
95 . . . . . . . . . . NamePos: -
96 . . . . . . . . . . Name: "ends"
97 . . . . . . . . . }
98 . . . . . . . . }
99 . . . . . . . . Lparen: -
100 . . . . . . . . Args: []ast.Expr (len = 1) {
101 . . . . . . . . . 0: *ast.BasicLit {
102 . . . . . . . . . . ValuePos: -
103 . . . . . . . . . . Kind: STRING
104 . . . . . . . . . . Value: "\"hehe\""
105 . . . . . . . . . }
106 . . . . . . . . }
107 . . . . . . . . Ellipsis: -
108 . . . . . . . . Rparen: -
109 . . . . . . . }
110 . . . . . . }
111 . . . . . }
112 . . . . }
113 . . . . Rparen: -
114 . . . }
115 . . }
116 . }
117 }
0 *ast.BinaryExpr {
1 . X: *ast.BinaryExpr {
2 . . X: *ast.BinaryExpr {
3 . . . X: *ast.Ident {
4 . . . . NamePos: -
5 . . . . Name: "a"
6 . . . }
7 . . . OpPos: -
8 . . . Op: ==
9 . . . Y: *ast.BasicLit {
10 . . . . ValuePos: -
11 . . . . Kind: INT
12 . . . . Value: "1"
13 . . . }
14 . . }
15 . . OpPos: -
16 . . Op: ||
17 . . Y: *ast.BinaryExpr {
18 . . . X: *ast.Ident {
19 . . . . NamePos: -
20 . . . . Name: "b"
21 . . . }
22 . . . OpPos: -
23 . . . Op: ==
24 . . . Y: *ast.BasicLit {
25 . . . . ValuePos: -
26 . . . . Kind: INT
27 . . . . Value: "1"
28 . . . }
29 . . }
30 . }
31 . OpPos: -
32 . Op: ||
33 . Y: *ast.ParenExpr {
34 . . Lparen: -
35 . . X: *ast.BinaryExpr {
36 . . . X: *ast.BinaryExpr {
37 . . . . X: *ast.CallExpr {
38 . . . . . Fun: *ast.SelectorExpr {
39 . . . . . . X: *ast.SelectorExpr {
40 . . . . . . . X: *ast.Ident {
41 . . . . . . . . NamePos: -
42 . . . . . . . . Name: "c"
43 . . . . . . . }
44 . . . . . . . Sel: *ast.Ident {
45 . . . . . . . . NamePos: -
46 . . . . . . . . Name: "d"
47 . . . . . . . }
48 . . . . . . }
49 . . . . . . Sel: *ast.Ident {
50 . . . . . . . NamePos: -
51 . . . . . . . Name: "len"
52 . . . . . . }
53 . . . . . }
54 . . . . . Lparen: -
55 . . . . . Ellipsis: -
56 . . . . . Rparen: -
57 . . . . }
58 . . . . OpPos: -
59 . . . . Op: >
60 . . . . Y: *ast.BasicLit {
61 . . . . . ValuePos: -
62 . . . . . Kind: INT
63 . . . . . Value: "10"
64 . . . . }
65 . . . }
66 . . . OpPos: -
67 . . . Op: &&
68 . . . Y: *ast.CallExpr {
69 . . . . Fun: *ast.SelectorExpr {
70 . . . . . X: *ast.SelectorExpr {
71 . . . . . . X: *ast.Ident {
72 . . . . . . . NamePos: -
73 . . . . . . . Name: "c"
74 . . . . . . }
75 . . . . . . Sel: *ast.Ident {
76 . . . . . . . NamePos: -
77 . . . . . . . Name: "e"
78 . . . . . . }
79 . . . . . }
80 . . . . . Sel: *ast.Ident {
81 . . . . . . NamePos: -
82 . . . . . . Name: "ends"
83 . . . . . }
84 . . . . }
85 . . . . Lparen: -
86 . . . . Args: []ast.Expr (len = 1) {
87 . . . . . 0: *ast.BasicLit {
88 . . . . . . ValuePos: -
89 . . . . . . Kind: STRING
90 . . . . . . Value: "\"hehe\""
91 . . . . . }
92 . . . . }
93 . . . . Ellipsis: -
94 . . . . Rparen: -
95 . . . }
96 . . }
97 . . Rparen: -
98 . }
99 }
!(a == 1) or b == 1 or !(c.d.len() > 10 and c.e.ends("hehe"))
0 *expr.LogicExpr {
1 . BinaryExpr: ast.BinaryExpr {
2 . . X: *expr.LogicExpr {
3 . . . BinaryExpr: ast.BinaryExpr {
4 . . . . X: *expr.NotExpr {
5 . . . . . UnaryExpr: ast.UnaryExpr {
6 . . . . . . OpPos: -
7 . . . . . . Op: !
8 . . . . . . X: *expr.GroupExpr {
9 . . . . . . . ParenExpr: ast.ParenExpr {
10 . . . . . . . . Lparen: -
11 . . . . . . . . X: *expr.BinaryExpr {
12 . . . . . . . . . BinaryExpr: ast.BinaryExpr {
13 . . . . . . . . . . X: *ast.Ident {
14 . . . . . . . . . . . NamePos: -
15 . . . . . . . . . . . Name: "a"
16 . . . . . . . . . . }
17 . . . . . . . . . . OpPos: -
18 . . . . . . . . . . Op: ==
19 . . . . . . . . . . Y: *ast.BasicLit {
20 . . . . . . . . . . . ValuePos: -
21 . . . . . . . . . . . Kind: INT
22 . . . . . . . . . . . Value: "1"
23 . . . . . . . . . . }
24 . . . . . . . . . }
25 . . . . . . . . }
26 . . . . . . . . Rparen: -
27 . . . . . . . }
28 . . . . . . }
29 . . . . . }
30 . . . . }
31 . . . . OpPos: -
32 . . . . Op: ||
33 . . . . Y: *expr.BinaryExpr {
34 . . . . . BinaryExpr: ast.BinaryExpr {
35 . . . . . . X: *ast.Ident {
36 . . . . . . . NamePos: -
37 . . . . . . . Name: "b"
38 . . . . . . }
39 . . . . . . OpPos: -
40 . . . . . . Op: ==
41 . . . . . . Y: *ast.BasicLit {
42 . . . . . . . ValuePos: -
43 . . . . . . . Kind: INT
44 . . . . . . . Value: "1"
45 . . . . . . }
46 . . . . . }
47 . . . . }
48 . . . }
49 . . }
50 . . OpPos: -
51 . . Op: ||
52 . . Y: *expr.NotExpr {
53 . . . UnaryExpr: ast.UnaryExpr {
54 . . . . OpPos: -
55 . . . . Op: !
56 . . . . X: *expr.GroupExpr {
57 . . . . . ParenExpr: ast.ParenExpr {
58 . . . . . . Lparen: -
59 . . . . . . X: *expr.LogicExpr {
60 . . . . . . . BinaryExpr: ast.BinaryExpr {
61 . . . . . . . . X: *expr.BinaryExpr {
62 . . . . . . . . . BinaryExpr: ast.BinaryExpr {
63 . . . . . . . . . . X: *expr.CallExpr {
64 . . . . . . . . . . . CallExpr: ast.CallExpr {
65 . . . . . . . . . . . . Fun: *ast.SelectorExpr {
66 . . . . . . . . . . . . . X: *ast.SelectorExpr {
67 . . . . . . . . . . . . . . X: *ast.Ident {
68 . . . . . . . . . . . . . . . NamePos: -
69 . . . . . . . . . . . . . . . Name: "c"
70 . . . . . . . . . . . . . . }
71 . . . . . . . . . . . . . . Sel: *ast.Ident {
72 . . . . . . . . . . . . . . . NamePos: -
73 . . . . . . . . . . . . . . . Name: "d"
74 . . . . . . . . . . . . . . }
75 . . . . . . . . . . . . . }
76 . . . . . . . . . . . . . Sel: *ast.Ident {
77 . . . . . . . . . . . . . . NamePos: -
78 . . . . . . . . . . . . . . Name: "len"
79 . . . . . . . . . . . . . }
80 . . . . . . . . . . . . }
81 . . . . . . . . . . . . Lparen: -
82 . . . . . . . . . . . . Ellipsis: -
83 . . . . . . . . . . . . Rparen: -
84 . . . . . . . . . . . }
85 . . . . . . . . . . }
86 . . . . . . . . . . OpPos: -
87 . . . . . . . . . . Op: >
88 . . . . . . . . . . Y: *ast.BasicLit {
89 . . . . . . . . . . . ValuePos: -
90 . . . . . . . . . . . Kind: INT
91 . . . . . . . . . . . Value: "10"
92 . . . . . . . . . . }
93 . . . . . . . . . }
94 . . . . . . . . }
95 . . . . . . . . OpPos: -
96 . . . . . . . . Op: &&
97 . . . . . . . . Y: *expr.CallExpr {
98 . . . . . . . . . CallExpr: ast.CallExpr {
99 . . . . . . . . . . Fun: *ast.SelectorExpr {
100 . . . . . . . . . . . X: *ast.SelectorExpr {
101 . . . . . . . . . . . . X: *ast.Ident {
102 . . . . . . . . . . . . . NamePos: -
103 . . . . . . . . . . . . . Name: "c"
104 . . . . . . . . . . . . }
105 . . . . . . . . . . . . Sel: *ast.Ident {
106 . . . . . . . . . . . . . NamePos: -
107 . . . . . . . . . . . . . Name: "e"
108 . . . . . . . . . . . . }
109 . . . . . . . . . . . }
110 . . . . . . . . . . . Sel: *ast.Ident {
111 . . . . . . . . . . . . NamePos: -
112 . . . . . . . . . . . . Name: "ends"
113 . . . . . . . . . . . }
114 . . . . . . . . . . }
115 . . . . . . . . . . Lparen: -
116 . . . . . . . . . . Args: []ast.Expr (len = 1) {
117 . . . . . . . . . . . 0: *ast.BasicLit {
118 . . . . . . . . . . . . ValuePos: -
119 . . . . . . . . . . . . Kind: STRING
120 . . . . . . . . . . . . Value: "\"hehe\""
121 . . . . . . . . . . . }
122 . . . . . . . . . . }
123 . . . . . . . . . . Ellipsis: -
124 . . . . . . . . . . Rparen: -
125 . . . . . . . . . }
126 . . . . . . . . }
127 . . . . . . . }
128 . . . . . . }
129 . . . . . . Rparen: -
130 . . . . . }
131 . . . . }
132 . . . }
133 . . }
134 . }
135 }
0 *ast.BinaryExpr {
1 . X: *ast.BinaryExpr {
2 . . X: *ast.UnaryExpr {
3 . . . OpPos: -
4 . . . Op: !
5 . . . X: *ast.ParenExpr {
6 . . . . Lparen: -
7 . . . . X: *ast.BinaryExpr {
8 . . . . . X: *ast.Ident {
9 . . . . . . NamePos: -
10 . . . . . . Name: "a"
11 . . . . . }
12 . . . . . OpPos: -
13 . . . . . Op: ==
14 . . . . . Y: *ast.BasicLit {
15 . . . . . . ValuePos: -
16 . . . . . . Kind: INT
17 . . . . . . Value: "1"
18 . . . . . }
19 . . . . }
20 . . . . Rparen: -
21 . . . }
22 . . }
23 . . OpPos: -
24 . . Op: ||
25 . . Y: *ast.BinaryExpr {
26 . . . X: *ast.Ident {
27 . . . . NamePos: -
28 . . . . Name: "b"
29 . . . }
30 . . . OpPos: -
31 . . . Op: ==
32 . . . Y: *ast.BasicLit {
33 . . . . ValuePos: -
34 . . . . Kind: INT
35 . . . . Value: "1"
36 . . . }
37 . . }
38 . }
39 . OpPos: -
40 . Op: ||
41 . Y: *ast.UnaryExpr {
42 . . OpPos: -
43 . . Op: !
44 . . X: *ast.ParenExpr {
45 . . . Lparen: -
46 . . . X: *ast.BinaryExpr {
47 . . . . X: *ast.BinaryExpr {
48 . . . . . X: *ast.CallExpr {
49 . . . . . . Fun: *ast.SelectorExpr {
50 . . . . . . . X: *ast.SelectorExpr {
51 . . . . . . . . X: *ast.Ident {
52 . . . . . . . . . NamePos: -
53 . . . . . . . . . Name: "c"
54 . . . . . . . . }
55 . . . . . . . . Sel: *ast.Ident {
56 . . . . . . . . . NamePos: -
57 . . . . . . . . . Name: "d"
58 . . . . . . . . }
59 . . . . . . . }
60 . . . . . . . Sel: *ast.Ident {
61 . . . . . . . . NamePos: -
62 . . . . . . . . Name: "len"
63 . . . . . . . }
64 . . . . . . }
65 . . . . . . Lparen: -
66 . . . . . . Ellipsis: -
67 . . . . . . Rparen: -
68 . . . . . }
69 . . . . . OpPos: -
70 . . . . . Op: >
71 . . . . . Y: *ast.BasicLit {
72 . . . . . . ValuePos: -
73 . . . . . . Kind: INT
74 . . . . . . Value: "10"
75 . . . . . }
76 . . . . }
77 . . . . OpPos: -
78 . . . . Op: &&
79 . . . . Y: *ast.CallExpr {
80 . . . . . Fun: *ast.SelectorExpr {
81 . . . . . . X: *ast.SelectorExpr {
82 . . . . . . . X: *ast.Ident {
83 . . . . . . . . NamePos: -
84 . . . . . . . . Name: "c"
85 . . . . . . . }
86 . . . . . . . Sel: *ast.Ident {
87 . . . . . . . . NamePos: -
88 . . . . . . . . Name: "e"
89 . . . . . . . }
90 . . . . . . }
91 . . . . . . Sel: *ast.Ident {
92 . . . . . . . NamePos: -
93 . . . . . . . Name: "ends"
94 . . . . . . }
95 . . . . . }
96 . . . . . Lparen: -
97 . . . . . Args: []ast.Expr (len = 1) {
98 . . . . . . 0: *ast.BasicLit {
99 . . . . . . . ValuePos: -
100 . . . . . . . Kind: STRING
101 . . . . . . . Value: "\"hehe\""
102 . . . . . . }
103 . . . . . }
104 . . . . . Ellipsis: -
105 . . . . . Rparen: -
106 . . . . }
107 . . . }
108 . . . Rparen: -
109 . . }
110 . }
111 }
!a == 1
0 *expr.BinaryExpr {
1 . BinaryExpr: ast.BinaryExpr {
2 . . X: *expr.NotExpr {
3 . . . UnaryExpr: ast.UnaryExpr {
4 . . . . OpPos: -
5 . . . . Op: !
6 . . . . X: *ast.Ident {
7 . . . . . NamePos: -
8 . . . . . Name: "a"
9 . . . . }
10 . . . }
11 . . }
12 . . OpPos: -
13 . . Op: ==
14 . . Y: *ast.BasicLit {
15 . . . ValuePos: -
16 . . . Kind: INT
17 . . . Value: "1"
18 . . }
19 . }
20 }
0 *ast.BinaryExpr {
1 . X: *ast.UnaryExpr {
2 . . OpPos: -
3 . . Op: !
4 . . X: *ast.Ident {
5 . . . NamePos: -
6 . . . Name: "a"
7 . . }
8 . }
9 . OpPos: -
10 . Op: ==
11 . Y: *ast.BasicLit {
12 . . ValuePos: -
13 . . Kind: INT
14 . . Value: "1"
15 . }
16 }
a == b
0 *expr.BinaryExpr {
1 . BinaryExpr: ast.BinaryExpr {
2 . . X: *ast.Ident {
3 . . . NamePos: -
4 . . . Name: "a"
5 . . }
6 . . OpPos: -
7 . . Op: ==
8 . . Y: *ast.Ident {
9 . . . NamePos: -
10 . . . Name: "b"
11 . . }
12 . }
13 }
0 *ast.BinaryExpr {
1 . X: *ast.Ident {
2 . . NamePos: -
3 . . Name: "a"
4 . }
5 . OpPos: -
6 . Op: ==
7 . Y: *ast.Ident {
8 . . NamePos: -
9 . . Name: "b"
10 . }
11 }
a != b
0 *expr.BinaryExpr {
1 . BinaryExpr: ast.BinaryExpr {
2 . . X: *ast.Ident {
3 . . . NamePos: -
4 . . . Name: "a"
5 . . }
6 . . OpPos: -
7 . . Op: !=
8 . . Y: *ast.Ident {
9 . . . NamePos: -
10 . . . Name: "b"
11 . . }
12 . }
13 }
0 *ast.BinaryExpr {
1 . X: *ast.Ident {
2 . . NamePos: -
3 . . Name: "a"
4 . }
5 . OpPos: -
6 . Op: !=
7 . Y: *ast.Ident {
8 . . NamePos: -
9 . . Name: "b"
10 . }
11 }
a > b
0 *expr.BinaryExpr {
1 . BinaryExpr: ast.BinaryExpr {
2 . . X: *ast.Ident {
3 . . . NamePos: -
4 . . . Name: "a"
5 . . }
6 . . OpPos: -
7 . . Op: >
8 . . Y: *ast.Ident {
9 . . . NamePos: -
10 . . . Name: "b"
11 . . }
12 . }
13 }
0 *ast.BinaryExpr {
1 . X: *ast.Ident {
2 . . NamePos: -
3 . . Name: "a"
4 . }
5 . OpPos: -
6 . Op: >
7 . Y: *ast.Ident {
8 . . NamePos: -
9 . . Name: "b"
10 . }
11 }
^a == 1
error when parse ^a == 1: unsupported unary operator: ^
a >= b
0 *expr.BinaryExpr {
1 . BinaryExpr: ast.BinaryExpr {
2 . . X: *ast.Ident {
3 . . . NamePos: -
4 . . . Name: "a"
5 . . }
6 . . OpPos: -
7 . . Op: >=
8 . . Y: *ast.Ident {
9 . . . NamePos: -
10 . . . Name: "b"
11 . . }
12 . }
13 }
0 *ast.BinaryExpr {
1 . X: *ast.Ident {
2 . . NamePos: -
3 . . Name: "a"
4 . }
5 . OpPos: -
6 . Op: >=
7 . Y: *ast.Ident {
8 . . NamePos: -
9 . . Name: "b"
10 . }
11 }
a.b >= a.c
0 *expr.BinaryExpr {
1 . BinaryExpr: ast.BinaryExpr {
2 . . X: *ast.SelectorExpr {
3 . . . X: *ast.Ident {
4 . . . . NamePos: -
5 . . . . Name: "a"
6 . . . }
7 . . . Sel: *ast.Ident {
8 . . . . NamePos: -
9 . . . . Name: "b"
10 . . . }
11 . . }
12 . . OpPos: -
13 . . Op: >=
14 . . Y: *ast.SelectorExpr {
15 . . . X: *ast.Ident {
16 . . . . NamePos: -
17 . . . . Name: "a"
18 . . . }
19 . . . Sel: *ast.Ident {
20 . . . . NamePos: -
21 . . . . Name: "c"
22 . . . }
23 . . }
24 . }
25 }
0 *ast.BinaryExpr {
1 . X: *ast.SelectorExpr {
2 . . X: *ast.Ident {
3 . . . NamePos: -
4 . . . Name: "a"
5 . . }
6 . . Sel: *ast.Ident {
7 . . . NamePos: -
8 . . . Name: "b"
9 . . }
10 . }
11 . OpPos: -
12 . Op: >=
13 . Y: *ast.SelectorExpr {
14 . . X: *ast.Ident {
15 . . . NamePos: -
16 . . . Name: "a"
17 . . }
18 . . Sel: *ast.Ident {
19 . . . NamePos: -
20 . . . Name: "c"
21 . . }
22 . }
23 }
!a.c.contains(a.b)
0 *expr.NotExpr {
1 . UnaryExpr: ast.UnaryExpr {
2 . . OpPos: -
3 . . Op: !
4 . . X: *expr.CallExpr {
5 . . . CallExpr: ast.CallExpr {
6 . . . . Fun: *ast.SelectorExpr {
7 . . . . . X: *ast.SelectorExpr {
8 . . . . . . X: *ast.Ident {
9 . . . . . . . NamePos: -
10 . . . . . . . Name: "a"
11 . . . . . . }
12 . . . . . . Sel: *ast.Ident {
13 . . . . . . . NamePos: -
14 . . . . . . . Name: "c"
15 . . . . . . }
16 . . . . . }
17 . . . . . Sel: *ast.Ident {
18 . . . . . . NamePos: -
19 . . . . . . Name: "contains"
20 . . . . . }
21 . . . . }
22 . . . . Lparen: -
23 . . . . Args: []ast.Expr (len = 1) {
24 . . . . . 0: *ast.SelectorExpr {
25 . . . . . . X: *ast.Ident {
26 . . . . . . . NamePos: -
27 . . . . . . . Name: "a"
28 . . . . . . }
29 . . . . . . Sel: *ast.Ident {
30 . . . . . . . NamePos: -
31 . . . . . . . Name: "b"
32 . . . . . . }
33 . . . . . }
34 . . . . }
35 . . . . Ellipsis: -
36 . . . . Rparen: -
37 . . . }
38 . . }
39 . }
40 }
0 *ast.UnaryExpr {
1 . OpPos: -
2 . Op: !
3 . X: *ast.CallExpr {
4 . . Fun: *ast.SelectorExpr {
5 . . . X: *ast.SelectorExpr {
6 . . . . X: *ast.Ident {
7 . . . . . NamePos: -
8 . . . . . Name: "a"
9 . . . . }
10 . . . . Sel: *ast.Ident {
11 . . . . . NamePos: -
12 . . . . . Name: "c"
13 . . . . }
14 . . . }
15 . . . Sel: *ast.Ident {
16 . . . . NamePos: -
17 . . . . Name: "contains"
18 . . . }
19 . . }
20 . . Lparen: -
21 . . Args: []ast.Expr (len = 1) {
22 . . . 0: *ast.SelectorExpr {
23 . . . . X: *ast.Ident {
24 . . . . . NamePos: -
25 . . . . . Name: "a"
26 . . . . }
27 . . . . Sel: *ast.Ident {
28 . . . . . NamePos: -
29 . . . . . Name: "b"
30 . . . . }
31 . . . }
32 . . }
33 . . Ellipsis: -
34 . . Rparen: -
35 . }
36 }
a.c.contains(1)
0 *expr.CallExpr {
1 . CallExpr: ast.CallExpr {
2 . . Fun: *ast.SelectorExpr {
3 . . . X: *ast.SelectorExpr {
4 . . . . X: *ast.Ident {
5 . . . . . NamePos: -
6 . . . . . Name: "a"
7 . . . . }
8 . . . . Sel: *ast.Ident {
9 . . . . . NamePos: -
10 . . . . . Name: "c"
11 . . . . }
12 . . . }
13 . . . Sel: *ast.Ident {
14 . . . . NamePos: -
15 . . . . Name: "contains"
16 . . . }
17 . . }
18 . . Lparen: -
19 . . Args: []ast.Expr (len = 1) {
20 . . . 0: *ast.BasicLit {
21 . . . . ValuePos: -
22 . . . . Kind: INT
23 . . . . Value: "1"
24 . . . }
25 . . }
26 . . Ellipsis: -
27 . . Rparen: -
28 . }
29 }
0 *ast.CallExpr {
1 . Fun: *ast.SelectorExpr {
2 . . X: *ast.SelectorExpr {
3 . . . X: *ast.Ident {
4 . . . . NamePos: -
5 . . . . Name: "a"
6 . . . }
7 . . . Sel: *ast.Ident {
8 . . . . NamePos: -
9 . . . . Name: "c"
10 . . . }
11 . . }
12 . . Sel: *ast.Ident {
13 . . . NamePos: -
14 . . . Name: "contains"
15 . . }
16 . }
17 . Lparen: -
18 . Args: []ast.Expr (len = 1) {
19 . . 0: *ast.BasicLit {
20 . . . ValuePos: -
21 . . . Kind: INT
22 . . . Value: "1"
23 . . }
24 . }
25 . Ellipsis: -
26 . Rparen: -
27 }
a=="myth"
0 *expr.BinaryExpr {
1 . BinaryExpr: ast.BinaryExpr {
2 . . X: *ast.Ident {
3 . . . NamePos: -
4 . . . Name: "a"
5 . . }
6 . . OpPos: -
7 . . Op: ==
8 . . Y: *ast.BasicLit {
9 . . . ValuePos: -
10 . . . Kind: STRING
11 . . . Value: "\"myth\""
12 . . }
13 . }
14 }
0 *ast.BinaryExpr {
1 . X: *ast.Ident {
2 . . NamePos: -
3 . . Name: "a"
4 . }
5 . OpPos: -
6 . Op: ==
7 . Y: *ast.BasicLit {
8 . . ValuePos: -
9 . . Kind: STRING
10 . . Value: "\"myth\""
11 . }
12 }
a.like(b)
0 *expr.CallExpr {
1 . CallExpr: ast.CallExpr {
2 . . Fun: *ast.SelectorExpr {
3 . . . X: *ast.Ident {
4 . . . . NamePos: -
5 . . . . Name: "a"
6 . . . }
7 . . . Sel: *ast.Ident {
8 . . . . NamePos: -
9 . . . . Name: "like"
10 . . . }
11 . . }
12 . . Lparen: -
13 . . Args: []ast.Expr (len = 1) {
14 . . . 0: *ast.Ident {
15 . . . . NamePos: -
16 . . . . Name: "b"
17 . . . }
18 . . }
19 . . Ellipsis: -
20 . . Rparen: -
21 . }
22 }
0 *ast.CallExpr {
1 . Fun: *ast.SelectorExpr {
2 . . X: *ast.Ident {
3 . . . NamePos: -
4 . . . Name: "a"
5 . . }
6 . . Sel: *ast.Ident {
7 . . . NamePos: -
8 . . . Name: "like"
9 . . }
10 . }
11 . Lparen: -
12 . Args: []ast.Expr (len = 1) {
13 . . 0: *ast.Ident {
14 . . . NamePos: -
15 . . . Name: "b"
16 . . }
17 . }
18 . Ellipsis: -
19 . Rparen: -
20 }
~a.in(b)
error when parse a.in(b): 1:1: expected operand, found ''
a.range(c, d)
0 *expr.CallExpr {
1 . CallExpr: ast.CallExpr {
2 . . Fun: *ast.SelectorExpr {
3 . . . X: *ast.Ident {
4 . . . . NamePos: -
5 . . . . Name: "a"
6 . . . }
7 . . . Sel: *ast.Ident {
8 . . . . NamePos: -
9 . . . . Name: "rangee"
10 . . . }
11 . . }
12 . . Lparen: -
13 . . Args: []ast.Expr (len = 2) {
14 . . . 0: *ast.Ident {
15 . . . . NamePos: -
16 . . . . Name: "c"
17 . . . }
18 . . . 1: *ast.Ident {
19 . . . . NamePos: -
20 . . . . Name: "d"
21 . . . }
22 . . }
23 . . Ellipsis: -
24 . . Rparen: -
25 . }
26 }
0 *ast.CallExpr {
1 . Fun: *ast.SelectorExpr {
2 . . X: *ast.Ident {
3 . . . NamePos: -
4 . . . Name: "a"
5 . . }
6 . . Sel: *ast.Ident {
7 . . . NamePos: -
8 . . . Name: "rangee"
9 . . }
10 . }
11 . Lparen: -
12 . Args: []ast.Expr (len = 2) {
13 . . 0: *ast.Ident {
14 . . . NamePos: -
15 . . . Name: "c"
16 . . }
17 . . 1: *ast.Ident {
18 . . . NamePos: -
19 . . . Name: "d"
20 . . }
21 . }
22 . Ellipsis: -
23 . Rparen: -
24 }
a.like("what")
0 *expr.CallExpr {
1 . CallExpr: ast.CallExpr {
2 . . Fun: *ast.SelectorExpr {
3 . . . X: *ast.Ident {
4 . . . . NamePos: -
5 . . . . Name: "a"
6 . . . }
7 . . . Sel: *ast.Ident {
8 . . . . NamePos: -
9 . . . . Name: "like"
10 . . . }
11 . . }
12 . . Lparen: -
13 . . Args: []ast.Expr (len = 1) {
14 . . . 0: *ast.BasicLit {
15 . . . . ValuePos: -
16 . . . . Kind: STRING
17 . . . . Value: "\"what\""
18 . . . }
19 . . }
20 . . Ellipsis: -
21 . . Rparen: -
22 . }
23 }
0 *ast.CallExpr {
1 . Fun: *ast.SelectorExpr {
2 . . X: *ast.Ident {
3 . . . NamePos: -
4 . . . Name: "a"
5 . . }
6 . . Sel: *ast.Ident {
7 . . . NamePos: -
8 . . . Name: "like"
9 . . }
10 . }
11 . Lparen: -
12 . Args: []ast.Expr (len = 1) {
13 . . 0: *ast.BasicLit {
14 . . . ValuePos: -
15 . . . Kind: STRING
16 . . . Value: "\"what\""
17 . . }
18 . }
19 . Ellipsis: -
20 . Rparen: -
21 }
a.starts("prefix")
0 *expr.CallExpr {
1 . CallExpr: ast.CallExpr {
2 . . Fun: *ast.SelectorExpr {
3 . . . X: *ast.Ident {
4 . . . . NamePos: -
5 . . . . Name: "a"
6 . . . }
7 . . . Sel: *ast.Ident {
8 . . . . NamePos: -
9 . . . . Name: "starts"
10 . . . }
11 . . }
12 . . Lparen: -
13 . . Args: []ast.Expr (len = 1) {
14 . . . 0: *ast.BasicLit {
15 . . . . ValuePos: -
16 . . . . Kind: STRING
17 . . . . Value: "\"prefix\""
18 . . . }
19 . . }
20 . . Ellipsis: -
21 . . Rparen: -
22 . }
23 }
0 *ast.CallExpr {
1 . Fun: *ast.SelectorExpr {
2 . . X: *ast.Ident {
3 . . . NamePos: -
4 . . . Name: "a"
5 . . }
6 . . Sel: *ast.Ident {
7 . . . NamePos: -
8 . . . Name: "starts"
9 . . }
10 . }
11 . Lparen: -
12 . Args: []ast.Expr (len = 1) {
13 . . 0: *ast.BasicLit {
14 . . . ValuePos: -
15 . . . Kind: STRING
16 . . . Value: "\"prefix\""
17 . . }
18 . }
19 . Ellipsis: -
20 . Rparen: -
21 }
a >= 1 && b >= 10
0 *expr.LogicExpr {
1 . BinaryExpr: ast.BinaryExpr {
2 . . X: *expr.BinaryExpr {
3 . . . BinaryExpr: ast.BinaryExpr {
4 . . . . X: *ast.Ident {
5 . . . . . NamePos: -
6 . . . . . Name: "a"
7 . . . . }
8 . . . . OpPos: -
9 . . . . Op: >=
10 . . . . Y: *ast.BasicLit {
11 . . . . . ValuePos: -
12 . . . . . Kind: INT
13 . . . . . Value: "1"
14 . . . . }
15 . . . }
16 . . }
17 . . OpPos: -
18 . . Op: &&
19 . . Y: *expr.BinaryExpr {
20 . . . BinaryExpr: ast.BinaryExpr {
21 . . . . X: *ast.Ident {
22 . . . . . NamePos: -
23 . . . . . Name: "b"
24 . . . . }
25 . . . . OpPos: -
26 . . . . Op: >=
27 . . . . Y: *ast.BasicLit {
28 . . . . . ValuePos: -
29 . . . . . Kind: INT
30 . . . . . Value: "10"
31 . . . . }
32 . . . }
33 . . }
34 . }
35 }
0 *ast.BinaryExpr {
1 . X: *ast.BinaryExpr {
2 . . X: *ast.Ident {
3 . . . NamePos: -
4 . . . Name: "a"
5 . . }
6 . . OpPos: -
7 . . Op: >=
8 . . Y: *ast.BasicLit {
9 . . . ValuePos: -
10 . . . Kind: INT
11 . . . Value: "1"
12 . . }
13 . }
14 . OpPos: -
15 . Op: &&
16 . Y: *ast.BinaryExpr {
17 . . X: *ast.Ident {
18 . . . NamePos: -
19 . . . Name: "b"
20 . . }
21 . . OpPos: -
22 . . Op: >=
23 . . Y: *ast.BasicLit {
24 . . . ValuePos: -
25 . . . Kind: INT
26 . . . Value: "10"
27 . . }
28 . }
29 }
a == "a" && !(b == 1 || what == 1)
0 *expr.LogicExpr {
1 . BinaryExpr: ast.BinaryExpr {
2 . . X: *expr.BinaryExpr {
3 . . . BinaryExpr: ast.BinaryExpr {
4 . . . . X: *ast.Ident {
5 . . . . . NamePos: -
6 . . . . . Name: "a"
7 . . . . }
8 . . . . OpPos: -
9 . . . . Op: ==
10 . . . . Y: *ast.BasicLit {
11 . . . . . ValuePos: -
12 . . . . . Kind: STRING
13 . . . . . Value: "\"a\""
14 . . . . }
15 . . . }
16 . . }
17 . . OpPos: -
18 . . Op: &&
19 . . Y: *expr.NotExpr {
20 . . . UnaryExpr: ast.UnaryExpr {
21 . . . . OpPos: -
22 . . . . Op: !
23 . . . . X: *expr.GroupExpr {
24 . . . . . ParenExpr: ast.ParenExpr {
25 . . . . . . Lparen: -
26 . . . . . . X: *expr.LogicExpr {
27 . . . . . . . BinaryExpr: ast.BinaryExpr {
28 . . . . . . . . X: *expr.BinaryExpr {
29 . . . . . . . . . BinaryExpr: ast.BinaryExpr {
30 . . . . . . . . . . X: *ast.Ident {
31 . . . . . . . . . . . NamePos: -
32 . . . . . . . . . . . Name: "b"
33 . . . . . . . . . . }
34 . . . . . . . . . . OpPos: -
35 . . . . . . . . . . Op: ==
36 . . . . . . . . . . Y: *ast.BasicLit {
37 . . . . . . . . . . . ValuePos: -
38 . . . . . . . . . . . Kind: INT
39 . . . . . . . . . . . Value: "1"
40 . . . . . . . . . . }
41 . . . . . . . . . }
42 . . . . . . . . }
43 . . . . . . . . OpPos: -
44 . . . . . . . . Op: ||
45 . . . . . . . . Y: *expr.BinaryExpr {
46 . . . . . . . . . BinaryExpr: ast.BinaryExpr {
47 . . . . . . . . . . X: *ast.Ident {
48 . . . . . . . . . . . NamePos: -
49 . . . . . . . . . . . Name: "what"
50 . . . . . . . . . . }
51 . . . . . . . . . . OpPos: -
52 . . . . . . . . . . Op: ==
53 . . . . . . . . . . Y: *ast.BasicLit {
54 . . . . . . . . . . . ValuePos: -
55 . . . . . . . . . . . Kind: INT
56 . . . . . . . . . . . Value: "1"
57 . . . . . . . . . . }
58 . . . . . . . . . }
59 . . . . . . . . }
60 . . . . . . . }
61 . . . . . . }
62 . . . . . . Rparen: -
63 . . . . . }
64 . . . . }
65 . . . }
66 . . }
67 . }
68 }
0 *ast.BinaryExpr {
1 . X: *ast.BinaryExpr {
2 . . X: *ast.Ident {
3 . . . NamePos: -
4 . . . Name: "a"
5 . . }
6 . . OpPos: -
7 . . Op: ==
8 . . Y: *ast.BasicLit {
9 . . . ValuePos: -
10 . . . Kind: STRING
11 . . . Value: "\"a\""
12 . . }
13 . }
14 . OpPos: -
15 . Op: &&
16 . Y: *ast.UnaryExpr {
17 . . OpPos: -
18 . . Op: !
19 . . X: *ast.ParenExpr {
20 . . . Lparen: -
21 . . . X: *ast.BinaryExpr {
22 . . . . X: *ast.BinaryExpr {
23 . . . . . X: *ast.Ident {
24 . . . . . . NamePos: -
25 . . . . . . Name: "b"
26 . . . . . }
27 . . . . . OpPos: -
28 . . . . . Op: ==
29 . . . . . Y: *ast.BasicLit {
30 . . . . . . ValuePos: -
31 . . . . . . Kind: INT
32 . . . . . . Value: "1"
33 . . . . . }
34 . . . . }
35 . . . . OpPos: -
36 . . . . Op: ||
37 . . . . Y: *ast.BinaryExpr {
38 . . . . . X: *ast.Ident {
39 . . . . . . NamePos: -
40 . . . . . . Name: "what"
41 . . . . . }
42 . . . . . OpPos: -
43 . . . . . Op: ==
44 . . . . . Y: *ast.BasicLit {
45 . . . . . . ValuePos: -
46 . . . . . . Kind: INT
47 . . . . . . Value: "1"
48 . . . . . }
49 . . . . }
50 . . . }
51 . . . Rparen: -
52 . . }
53 . }
54 }
(b == 1 || (!what == 1)) || a.starts("aaa")
0 *expr.LogicExpr {
1 . BinaryExpr: ast.BinaryExpr {
2 . . X: *expr.GroupExpr {
3 . . . ParenExpr: ast.ParenExpr {
4 . . . . Lparen: -
5 . . . . X: *expr.LogicExpr {
6 . . . . . BinaryExpr: ast.BinaryExpr {
7 . . . . . . X: *expr.BinaryExpr {
8 . . . . . . . BinaryExpr: ast.BinaryExpr {
9 . . . . . . . . X: *ast.Ident {
10 . . . . . . . . . NamePos: -
11 . . . . . . . . . Name: "b"
12 . . . . . . . . }
13 . . . . . . . . OpPos: -
14 . . . . . . . . Op: ==
15 . . . . . . . . Y: *ast.BasicLit {
16 . . . . . . . . . ValuePos: -
17 . . . . . . . . . Kind: INT
18 . . . . . . . . . Value: "1"
19 . . . . . . . . }
20 . . . . . . . }
21 . . . . . . }
22 . . . . . . OpPos: -
23 . . . . . . Op: ||
24 . . . . . . Y: *expr.GroupExpr {
25 . . . . . . . ParenExpr: ast.ParenExpr {
26 . . . . . . . . Lparen: -
27 . . . . . . . . X: *expr.BinaryExpr {
28 . . . . . . . . . BinaryExpr: ast.BinaryExpr {
29 . . . . . . . . . . X: *expr.NotExpr {
30 . . . . . . . . . . . UnaryExpr: ast.UnaryExpr {
31 . . . . . . . . . . . . OpPos: -
32 . . . . . . . . . . . . Op: !
33 . . . . . . . . . . . . X: *ast.Ident {
34 . . . . . . . . . . . . . NamePos: -
35 . . . . . . . . . . . . . Name: "what"
36 . . . . . . . . . . . . }
37 . . . . . . . . . . . }
38 . . . . . . . . . . }
39 . . . . . . . . . . OpPos: -
40 . . . . . . . . . . Op: ==
41 . . . . . . . . . . Y: *ast.BasicLit {
42 . . . . . . . . . . . ValuePos: -
43 . . . . . . . . . . . Kind: INT
44 . . . . . . . . . . . Value: "1"
45 . . . . . . . . . . }
46 . . . . . . . . . }
47 . . . . . . . . }
48 . . . . . . . . Rparen: -
49 . . . . . . . }
50 . . . . . . }
51 . . . . . }
52 . . . . }
53 . . . . Rparen: -
54 . . . }
55 . . }
56 . . OpPos: -
57 . . Op: ||
58 . . Y: *expr.CallExpr {
59 . . . CallExpr: ast.CallExpr {
60 . . . . Fun: *ast.SelectorExpr {
61 . . . . . X: *ast.Ident {
62 . . . . . . NamePos: -
63 . . . . . . Name: "a"
64 . . . . . }
65 . . . . . Sel: *ast.Ident {
66 . . . . . . NamePos: -
67 . . . . . . Name: "starts"
68 . . . . . }
69 . . . . }
70 . . . . Lparen: -
71 . . . . Args: []ast.Expr (len = 1) {
72 . . . . . 0: *ast.BasicLit {
73 . . . . . . ValuePos: -
74 . . . . . . Kind: STRING
75 . . . . . . Value: "\"aaa\""
76 . . . . . }
77 . . . . }
78 . . . . Ellipsis: -
79 . . . . Rparen: -
80 . . . }
81 . . }
82 . }
83 }
0 *ast.BinaryExpr {
1 . X: *ast.ParenExpr {
2 . . Lparen: -
3 . . X: *ast.BinaryExpr {
4 . . . X: *ast.BinaryExpr {
5 . . . . X: *ast.Ident {
6 . . . . . NamePos: -
7 . . . . . Name: "b"
8 . . . . }
9 . . . . OpPos: -
10 . . . . Op: ==
11 . . . . Y: *ast.BasicLit {
12 . . . . . ValuePos: -
13 . . . . . Kind: INT
14 . . . . . Value: "1"
15 . . . . }
16 . . . }
17 . . . OpPos: -
18 . . . Op: ||
19 . . . Y: *ast.ParenExpr {
20 . . . . Lparen: -
21 . . . . X: *ast.BinaryExpr {
22 . . . . . X: *ast.UnaryExpr {
23 . . . . . . OpPos: -
24 . . . . . . Op: !
25 . . . . . . X: *ast.Ident {
26 . . . . . . . NamePos: -
27 . . . . . . . Name: "what"
28 . . . . . . }
29 . . . . . }
30 . . . . . OpPos: -
31 . . . . . Op: ==
32 . . . . . Y: *ast.BasicLit {
33 . . . . . . ValuePos: -
34 . . . . . . Kind: INT
35 . . . . . . Value: "1"
36 . . . . . }
37 . . . . }
38 . . . . Rparen: -
39 . . . }
40 . . }
41 . . Rparen: -
42 . }
43 . OpPos: -
44 . Op: ||
45 . Y: *ast.CallExpr {
46 . . Fun: *ast.SelectorExpr {
47 . . . X: *ast.Ident {
48 . . . . NamePos: -
49 . . . . Name: "a"
50 . . . }
51 . . . Sel: *ast.Ident {
52 . . . . NamePos: -
53 . . . . Name: "starts"
54 . . . }
55 . . }
56 . . Lparen: -
57 . . Args: []ast.Expr (len = 1) {
58 . . . 0: *ast.BasicLit {
59 . . . . ValuePos: -
60 . . . . Kind: STRING
61 . . . . Value: "\"aaa\""
62 . . . }
63 . . }
64 . . Ellipsis: -
65 . . Rparen: -
66 . }
67 }
!(b == 1 || what == 1)
0 *expr.NotExpr {
1 . UnaryExpr: ast.UnaryExpr {
2 . . OpPos: -
3 . . Op: !
4 . . X: *expr.GroupExpr {
5 . . . ParenExpr: ast.ParenExpr {
6 . . . . Lparen: -
7 . . . . X: *expr.LogicExpr {
8 . . . . . BinaryExpr: ast.BinaryExpr {
9 . . . . . . X: *expr.BinaryExpr {
10 . . . . . . . BinaryExpr: ast.BinaryExpr {
11 . . . . . . . . X: *ast.Ident {
12 . . . . . . . . . NamePos: -
13 . . . . . . . . . Name: "b"
14 . . . . . . . . }
15 . . . . . . . . OpPos: -
16 . . . . . . . . Op: ==
17 . . . . . . . . Y: *ast.BasicLit {
18 . . . . . . . . . ValuePos: -
19 . . . . . . . . . Kind: INT
20 . . . . . . . . . Value: "1"
21 . . . . . . . . }
22 . . . . . . . }
23 . . . . . . }
24 . . . . . . OpPos: -
25 . . . . . . Op: ||
26 . . . . . . Y: *expr.BinaryExpr {
27 . . . . . . . BinaryExpr: ast.BinaryExpr {
28 . . . . . . . . X: *ast.Ident {
29 . . . . . . . . . NamePos: -
30 . . . . . . . . . Name: "what"
31 . . . . . . . . }
32 . . . . . . . . OpPos: -
33 . . . . . . . . Op: ==
34 . . . . . . . . Y: *ast.BasicLit {
35 . . . . . . . . . ValuePos: -
36 . . . . . . . . . Kind: INT
37 . . . . . . . . . Value: "1"
38 . . . . . . . . }
39 . . . . . . . }
40 . . . . . . }
41 . . . . . }
42 . . . . }
43 . . . . Rparen: -
44 . . . }
45 . . }
46 . }
47 }
0 *ast.UnaryExpr {
1 . OpPos: -
2 . Op: !
3 . X: *ast.ParenExpr {
4 . . Lparen: -
5 . . X: *ast.BinaryExpr {
6 . . . X: *ast.BinaryExpr {
7 . . . . X: *ast.Ident {
8 . . . . . NamePos: -
9 . . . . . Name: "b"
10 . . . . }
11 . . . . OpPos: -
12 . . . . Op: ==
13 . . . . Y: *ast.BasicLit {
14 . . . . . ValuePos: -
15 . . . . . Kind: INT
16 . . . . . Value: "1"
17 . . . . }
18 . . . }
19 . . . OpPos: -
20 . . . Op: ||
21 . . . Y: *ast.BinaryExpr {
22 . . . . X: *ast.Ident {
23 . . . . . NamePos: -
24 . . . . . Name: "what"
25 . . . . }
26 . . . . OpPos: -
27 . . . . Op: ==
28 . . . . Y: *ast.BasicLit {
29 . . . . . ValuePos: -
30 . . . . . Kind: INT
31 . . . . . Value: "1"
32 . . . . }
33 . . . }
34 . . }
35 . . Rparen: -
36 . }
37 }
(b == 1 || what == 1) and (b == 1 || what == 1)
0 *expr.LogicExpr {
1 . BinaryExpr: ast.BinaryExpr {
2 . . X: *expr.GroupExpr {
3 . . . ParenExpr: ast.ParenExpr {
4 . . . . Lparen: -
5 . . . . X: *expr.LogicExpr {
6 . . . . . BinaryExpr: ast.BinaryExpr {
7 . . . . . . X: *expr.BinaryExpr {
8 . . . . . . . BinaryExpr: ast.BinaryExpr {
9 . . . . . . . . X: *ast.Ident {
10 . . . . . . . . . NamePos: -
11 . . . . . . . . . Name: "b"
12 . . . . . . . . }
13 . . . . . . . . OpPos: -
14 . . . . . . . . Op: ==
15 . . . . . . . . Y: *ast.BasicLit {
16 . . . . . . . . . ValuePos: -
17 . . . . . . . . . Kind: INT
18 . . . . . . . . . Value: "1"
19 . . . . . . . . }
20 . . . . . . . }
21 . . . . . . }
22 . . . . . . OpPos: -
23 . . . . . . Op: ||
24 . . . . . . Y: *expr.BinaryExpr {
25 . . . . . . . BinaryExpr: ast.BinaryExpr {
26 . . . . . . . . X: *ast.Ident {
27 . . . . . . . . . NamePos: -
28 . . . . . . . . . Name: "what"
29 . . . . . . . . }
30 . . . . . . . . OpPos: -
31 . . . . . . . . Op: ==
32 . . . . . . . . Y: *ast.BasicLit {
33 . . . . . . . . . ValuePos: -
34 . . . . . . . . . Kind: INT
35 . . . . . . . . . Value: "1"
36 . . . . . . . . }
37 . . . . . . . }
38 . . . . . . }
39 . . . . . }
40 . . . . }
41 . . . . Rparen: -
42 . . . }
43 . . }
44 . . OpPos: -
45 . . Op: &&
46 . . Y: *expr.GroupExpr {
47 . . . ParenExpr: ast.ParenExpr {
48 . . . . Lparen: -
49 . . . . X: *expr.LogicExpr {
50 . . . . . BinaryExpr: ast.BinaryExpr {
51 . . . . . . X: *expr.BinaryExpr {
52 . . . . . . . BinaryExpr: ast.BinaryExpr {
53 . . . . . . . . X: *ast.Ident {
54 . . . . . . . . . NamePos: -
55 . . . . . . . . . Name: "b"
56 . . . . . . . . }
57 . . . . . . . . OpPos: -
58 . . . . . . . . Op: ==
59 . . . . . . . . Y: *ast.BasicLit {
60 . . . . . . . . . ValuePos: -
61 . . . . . . . . . Kind: INT
62 . . . . . . . . . Value: "1"
63 . . . . . . . . }
64 . . . . . . . }
65 . . . . . . }
66 . . . . . . OpPos: -
67 . . . . . . Op: ||
68 . . . . . . Y: *expr.BinaryExpr {
69 . . . . . . . BinaryExpr: ast.BinaryExpr {
70 . . . . . . . . X: *ast.Ident {
71 . . . . . . . . . NamePos: -
72 . . . . . . . . . Name: "what"
73 . . . . . . . . }
74 . . . . . . . . OpPos: -
75 . . . . . . . . Op: ==
76 . . . . . . . . Y: *ast.BasicLit {
77 . . . . . . . . . ValuePos: -
78 . . . . . . . . . Kind: INT
79 . . . . . . . . . Value: "1"
80 . . . . . . . . }
81 . . . . . . . }
82 . . . . . . }
83 . . . . . }
84 . . . . }
85 . . . . Rparen: -
86 . . . }
87 . . }
88 . }
89 }
0 *ast.BinaryExpr {
1 . X: *ast.ParenExpr {
2 . . Lparen: -
3 . . X: *ast.BinaryExpr {
4 . . . X: *ast.BinaryExpr {
5 . . . . X: *ast.Ident {
6 . . . . . NamePos: -
7 . . . . . Name: "b"
8 . . . . }
9 . . . . OpPos: -
10 . . . . Op: ==
11 . . . . Y: *ast.BasicLit {
12 . . . . . ValuePos: -
13 . . . . . Kind: INT
14 . . . . . Value: "1"
15 . . . . }
16 . . . }
17 . . . OpPos: -
18 . . . Op: ||
19 . . . Y: *ast.BinaryExpr {
20 . . . . X: *ast.Ident {
21 . . . . . NamePos: -
22 . . . . . Name: "what"
23 . . . . }
24 . . . . OpPos: -
25 . . . . Op: ==
26 . . . . Y: *ast.BasicLit {
27 . . . . . ValuePos: -
28 . . . . . Kind: INT
29 . . . . . Value: "1"
30 . . . . }
31 . . . }
32 . . }
33 . . Rparen: -
34 . }
35 . OpPos: -
36 . Op: &&
37 . Y: *ast.ParenExpr {
38 . . Lparen: -
39 . . X: *ast.BinaryExpr {
40 . . . X: *ast.BinaryExpr {
41 . . . . X: *ast.Ident {
42 . . . . . NamePos: -
43 . . . . . Name: "b"
44 . . . . }
45 . . . . OpPos: -
46 . . . . Op: ==
47 . . . . Y: *ast.BasicLit {
48 . . . . . ValuePos: -
49 . . . . . Kind: INT
50 . . . . . Value: "1"
51 . . . . }
52 . . . }
53 . . . OpPos: -
54 . . . Op: ||
55 . . . Y: *ast.BinaryExpr {
56 . . . . X: *ast.Ident {
57 . . . . . NamePos: -
58 . . . . . Name: "what"
59 . . . . }
60 . . . . OpPos: -
61 . . . . Op: ==
62 . . . . Y: *ast.BasicLit {
63 . . . . . ValuePos: -
64 . . . . . Kind: INT
65 . . . . . Value: "1"
66 . . . . }
67 . . . }
68 . . }
69 . . Rparen: -
70 . }
71 }