diff options
author | 2017-08-21 12:02:46 +0200 | |
---|---|---|
committer | 2017-08-21 14:16:30 +0200 | |
commit | e3684497a5a8c4bd42ff970b37c49dc70bcc3eae (patch) | |
tree | dbef351aeee01d181ff35c4fc51c96a4768aceea /src/main/java/com/google/devtools/build/lib/syntax | |
parent | 9d79c6013470315da86fdccc3854880806162528 (diff) |
Throw a static error when lvalue of an augmented assignment is a list.
RELNOTES:
When the lvalue of an augmented assignment is a list, we now throw an error
before evaluating the code (e.g. `a, b += 2, 3`).
PiperOrigin-RevId: 165906611
Diffstat (limited to 'src/main/java/com/google/devtools/build/lib/syntax')
-rw-r--r-- | src/main/java/com/google/devtools/build/lib/syntax/ValidationEnvironment.java | 10 |
1 files changed, 10 insertions, 0 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 4415a85ce4..6f5eb9c401 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 @@ -158,6 +158,16 @@ public final class ValidationEnvironment extends SyntaxTreeVisitor { super.visit(node); } + @Override + public void visit(AugmentedAssignmentStatement node) { + if (node.getLValue().getExpression() instanceof ListLiteral) { + throw new ValidationException( + node.getLocation(), "cannot perform augmented assignment on a list or tuple expression"); + } + // Other bad cases are handled when visiting the LValue node. + super.visit(node); + } + /** Returns true if the current block is the top level i.e. has no parent. */ private boolean isTopLevel() { return block.parent == null; |