@@ -826,8 +826,9 @@ private Node convertBinaryExpression(JsonObject node, SourceLocation loc) throws
826826 Expression left = convertChild (node , "left" );
827827 Expression right = convertChild (node , "right" );
828828 JsonObject operatorToken = node .get ("operatorToken" ).getAsJsonObject ();
829- String operatorKind = getKind (operatorToken );
830- if ("CommaToken" .equals (operatorKind )) {
829+ String operator = getSourceLocation (operatorToken ).getSource ();
830+ switch (operator ) {
831+ case "," :
831832 List <Expression > expressions = new ArrayList <Expression >();
832833 if (left instanceof SequenceExpression )
833834 expressions .addAll (((SequenceExpression ) left ).getExpressions ());
@@ -838,13 +839,30 @@ private Node convertBinaryExpression(JsonObject node, SourceLocation loc) throws
838839 else
839840 expressions .add (right );
840841 return new SequenceExpression (loc , expressions );
841- } else {
842- String operator = getSourceLocation (operatorToken ).getSource ();
843- if ("||" .equals (operator ) || "&&" .equals (operator )) {
844- return new LogicalExpression (loc , operator , left , right );
845- }
846- if ("EqualsToken" .equals (operatorKind ))
847- left = convertLValue (left );
842+
843+ case "||" :
844+ case "&&" :
845+ return new LogicalExpression (loc , operator , left , right );
846+
847+ case "=" :
848+ left = convertLValue (left ); // For plain assignments, the lhs can be a destructuring pattern.
849+ return new AssignmentExpression (loc , operator , left , right );
850+
851+ case "+=" :
852+ case "-=" :
853+ case "*=" :
854+ case "**=" :
855+ case "/=" :
856+ case "%=" :
857+ case "^=" :
858+ case "&=" :
859+ case "|=" :
860+ case ">>=" :
861+ case "<<=" :
862+ case ">>>=" :
863+ return new AssignmentExpression (loc , operator , convertLValue (left ), right );
864+
865+ default :
848866 return new BinaryExpression (loc , operator , left , right );
849867 }
850868 }
0 commit comments