6060import com .semmle .js .ast .InvokeExpression ;
6161import com .semmle .js .ast .LabeledStatement ;
6262import com .semmle .js .ast .Literal ;
63+ import com .semmle .js .ast .LogicalExpression ;
6364import com .semmle .js .ast .MemberDefinition ;
6465import com .semmle .js .ast .MemberExpression ;
6566import com .semmle .js .ast .DeclarationFlags ;
@@ -825,8 +826,9 @@ private Node convertBinaryExpression(JsonObject node, SourceLocation loc) throws
825826 Expression left = convertChild (node , "left" );
826827 Expression right = convertChild (node , "right" );
827828 JsonObject operatorToken = node .get ("operatorToken" ).getAsJsonObject ();
828- String operatorKind = getKind (operatorToken );
829- if ("CommaToken" .equals (operatorKind )) {
829+ String operator = getSourceLocation (operatorToken ).getSource ();
830+ switch (operator ) {
831+ case "," :
830832 List <Expression > expressions = new ArrayList <Expression >();
831833 if (left instanceof SequenceExpression )
832834 expressions .addAll (((SequenceExpression ) left ).getExpressions ());
@@ -837,10 +839,30 @@ private Node convertBinaryExpression(JsonObject node, SourceLocation loc) throws
837839 else
838840 expressions .add (right );
839841 return new SequenceExpression (loc , expressions );
840- } else {
841- String operator = getSourceLocation (operatorToken ).getSource ();
842- if ("EqualsToken" .equals (operatorKind ))
843- 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 :
844866 return new BinaryExpression (loc , operator , left , right );
845867 }
846868 }
0 commit comments