aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/main/java/com/google
diff options
context:
space:
mode:
authorGravatar fzaiser <fzaiser@google.com>2017-08-28 17:50:51 +0200
committerGravatar Vladimir Moskva <vladmos@google.com>2017-08-29 13:31:10 +0200
commit6ccff29c57c9795d93eec496fdc7cfc3c135d58a (patch)
tree26c6fbcc9480c86862d0fecb00ff450e5c847090 /src/main/java/com/google
parentc1309787cc4b55cb1d11e60a687f27b9b38ed09c (diff)
Visit subtrees of the AST in evaluation order
For instance, it makes more sense to visit the RHS of an assignment first because this is evaluated first. This also fixes a bug in the validator, which allowed definitions like "a = a" RELNOTES: None PiperOrigin-RevId: 166709589
Diffstat (limited to 'src/main/java/com/google')
-rw-r--r--src/main/java/com/google/devtools/build/lib/syntax/SyntaxTreeVisitor.java10
1 files changed, 5 insertions, 5 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/syntax/SyntaxTreeVisitor.java b/src/main/java/com/google/devtools/build/lib/syntax/SyntaxTreeVisitor.java
index 311b8c306c..c7c0eb0e53 100644
--- a/src/main/java/com/google/devtools/build/lib/syntax/SyntaxTreeVisitor.java
+++ b/src/main/java/com/google/devtools/build/lib/syntax/SyntaxTreeVisitor.java
@@ -77,17 +77,17 @@ public class SyntaxTreeVisitor {
public void visit(AbstractComprehension node) {
for (ListComprehension.Clause clause : node.getClauses()) {
+ visit(clause.getExpression());
if (clause.getLValue() != null) {
visit(clause.getLValue());
}
- visit(clause.getExpression());
}
visitAll(node.getOutputExpressions());
}
public void visit(ForStatement node) {
- visit(node.getVariable());
visit(node.getCollection());
+ visit(node.getVariable());
visitBlock(node.getBlock());
}
@@ -108,13 +108,13 @@ public class SyntaxTreeVisitor {
}
public void visit(AssignmentStatement node) {
- visit(node.getLValue());
visit(node.getExpression());
+ visit(node.getLValue());
}
public void visit(AugmentedAssignmentStatement node) {
- visit(node.getLValue());
visit(node.getExpression());
+ visit(node.getLValue());
}
public void visit(ExpressionStatement node) {
@@ -183,8 +183,8 @@ public class SyntaxTreeVisitor {
public void visit(@SuppressWarnings("unused") Comment node) {}
public void visit(ConditionalExpression node) {
- visit(node.getThenCase());
visit(node.getCondition());
+ visit(node.getThenCase());
if (node.getElseCase() != null) {
visit(node.getElseCase());
}