TS: reorganize convertBinaryExpression and create AssignmentExpression when appropriate

This commit is contained in:
Asger F
2018-12-17 16:20:14 +00:00
parent cc0961a988
commit 2044f5fe89
2 changed files with 30 additions and 12 deletions

View File

@@ -826,8 +826,9 @@ public class TypeScriptASTConverter {
Expression left = convertChild(node, "left");
Expression right = convertChild(node, "right");
JsonObject operatorToken = node.get("operatorToken").getAsJsonObject();
String operatorKind = getKind(operatorToken);
if ("CommaToken".equals(operatorKind)) {
String operator = getSourceLocation(operatorToken).getSource();
switch (operator) {
case ",":
List<Expression> expressions = new ArrayList<Expression>();
if (left instanceof SequenceExpression)
expressions.addAll(((SequenceExpression) left).getExpressions());
@@ -838,13 +839,30 @@ public class TypeScriptASTConverter {
else
expressions.add(right);
return new SequenceExpression(loc, expressions);
} else {
String operator = getSourceLocation(operatorToken).getSource();
if ("||".equals(operator) || "&&".equals(operator)) {
return new LogicalExpression(loc, operator, left, right);
}
if ("EqualsToken".equals(operatorKind))
left = convertLValue(left);
case "||":
case "&&":
return new LogicalExpression(loc, operator, left, right);
case "=":
left = convertLValue(left); // For plain assignments, the lhs can be a destructuring pattern.
return new AssignmentExpression(loc, operator, left, right);
case "+=":
case "-=":
case "*=":
case "**=":
case "/=":
case "%=":
case "^=":
case "&=":
case "|=":
case ">>=":
case "<<=":
case ">>>=":
return new AssignmentExpression(loc, operator, convertLValue(left), right);
default:
return new BinaryExpression(loc, operator, left, right);
}
}

View File

@@ -326,11 +326,11 @@ hasLocation(#20098,#20096)
exit_cfg_node(#20099,#20004)
hasLocation(#20099,#20094)
successor(#20012,#20017)
successor(#20033,#20037)
successor(#20043,#20035)
successor(#20033,#20043)
successor(#20037,#20039)
successor(#20041,#20043)
successor(#20041,#20035)
successor(#20039,#20041)
successor(#20043,#20037)
successor(#20035,#20099)
successor(#20025,#20027)
successor(#20027,#20029)