diff options
author | laurentlb <laurentlb@google.com> | 2017-09-04 17:39:09 +0200 |
---|---|---|
committer | Yun Peng <pcloudy@google.com> | 2017-09-04 18:24:44 +0200 |
commit | a9b9aea25913707636aec3023a7225b8bce8d69f (patch) | |
tree | aa3c826a3262f361cbe75c8c66d05118166e603d /src/main/java/com/google/devtools/build/lib/syntax/ValidationEnvironment.java | |
parent | a94ef48d52c5bcbe88a504d261f173b4fa59c313 (diff) |
skylark/syntax: Move flow statement check to the validation pass.
Mutiple other cleanups in the parser, update code documentation.
RELNOTES: None.
PiperOrigin-RevId: 167501136
Diffstat (limited to 'src/main/java/com/google/devtools/build/lib/syntax/ValidationEnvironment.java')
-rw-r--r-- | src/main/java/com/google/devtools/build/lib/syntax/ValidationEnvironment.java | 20 |
1 files changed, 19 insertions, 1 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/syntax/ValidationEnvironment.java b/src/main/java/com/google/devtools/build/lib/syntax/ValidationEnvironment.java index da63ca2e19..95a1c84021 100644 --- a/src/main/java/com/google/devtools/build/lib/syntax/ValidationEnvironment.java +++ b/src/main/java/com/google/devtools/build/lib/syntax/ValidationEnvironment.java @@ -58,6 +58,7 @@ public final class ValidationEnvironment extends SyntaxTreeVisitor { private final SkylarkSemanticsOptions semantics; private Block block; + private int loopCount; /** Create a ValidationEnvironment for a given global Environment. */ ValidationEnvironment(Environment env) { @@ -106,7 +107,24 @@ public final class ValidationEnvironment extends SyntaxTreeVisitor { public void visit(ReturnStatement node) { if (isTopLevel()) { throw new ValidationException( - node.getLocation(), "Return statements must be inside a function"); + node.getLocation(), "return statements must be inside a function"); + } + super.visit(node); + } + + @Override + public void visit(ForStatement node) { + loopCount++; + super.visit(node); + Preconditions.checkState(loopCount > 0); + loopCount--; + } + + @Override + public void visit(FlowStatement node) { + if (loopCount <= 0) { + throw new ValidationException( + node.getLocation(), node.getKind().getName() + " statement must be inside a for loop"); } super.visit(node); } |