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);
     }