Skip to content

Commit 2044f5f

Browse files
committed
TS: reorganize convertBinaryExpression and create AssignmentExpression when appropriate
1 parent cc0961a commit 2044f5f

2 files changed

Lines changed: 30 additions & 12 deletions

File tree

javascript/extractor/src/com/semmle/js/parser/TypeScriptASTConverter.java

Lines changed: 27 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -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
}

javascript/extractor/tests/ts/output/trap/exprs.ts.trap

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -326,11 +326,11 @@ hasLocation(#20098,#20096)
326326
exit_cfg_node(#20099,#20004)
327327
hasLocation(#20099,#20094)
328328
successor(#20012,#20017)
329-
successor(#20033,#20037)
330-
successor(#20043,#20035)
329+
successor(#20033,#20043)
331330
successor(#20037,#20039)
332-
successor(#20041,#20043)
331+
successor(#20041,#20035)
333332
successor(#20039,#20041)
333+
successor(#20043,#20037)
334334
successor(#20035,#20099)
335335
successor(#20025,#20027)
336336
successor(#20027,#20029)

0 commit comments

Comments
 (0)