Add a new AST node for augmented assignments in Skylark
--
PiperOrigin-RevId: 142438943
MOS_MIGRATED_REVID=142438943
diff --git a/src/main/java/com/google/devtools/build/lib/syntax/Parser.java b/src/main/java/com/google/devtools/build/lib/syntax/Parser.java
index 8b28b3e..267808d 100644
--- a/src/main/java/com/google/devtools/build/lib/syntax/Parser.java
+++ b/src/main/java/com/google/devtools/build/lib/syntax/Parser.java
@@ -1156,9 +1156,9 @@
// | RETURN expr
// | flow_stmt
// assign_stmt ::= expr ('=' | augassign) expr
- // augassign ::= ('+=' )
+ // augassign ::= ('+=' | '-=' | '*=' | '/=' | '%=')
// Note that these are in Python, but not implemented here (at least for now):
- // '-=' | '*=' | '/=' | '%=' | '&=' | '|=' | '^=' |'<<=' | '>>=' | '**=' | '//='
+ // '&=' | '|=' | '^=' |'<<=' | '>>=' | '**=' | '//='
// Semantic difference from Python:
// In Skylark, x += y is simple syntactic sugar for x = x + y.
// In Python, x += y is more or less equivalent to x = x + y, but if a method is defined
@@ -1185,10 +1185,8 @@
nextToken();
Expression operand = parseExpression();
int end = operand.getLocation().getEndOffset();
- return setLocation(new AssignmentStatement(expression,
- setLocation(new BinaryOperatorExpression(
- operator, expression, operand), start, end)),
- start, end);
+ return setLocation(
+ new AugmentedAssignmentStatement(operator, expression, operand), start, end);
} else {
return setLocation(new ExpressionStatement(expression), start, expression);
}