Add more check

This commit is contained in:
kingwl
2020-05-15 11:33:54 +08:00
parent c0c60015c4
commit f78a408ab5
11 changed files with 126 additions and 87 deletions

View File

@@ -1,6 +1,9 @@
/*@internal*/
namespace ts {
export function transformESNext(context: TransformationContext) {
const {
hoistVariableDeclaration
} = context;
return chainBundle(transformSourceFile);
function transformSourceFile(node: SourceFile) {
@@ -31,15 +34,45 @@ namespace ts {
const operator = binaryExpression.operatorToken;
if (isCompoundAssignment(operator.kind) && isLogicalOrCoalescingAssignmentOperator(operator.kind)) {
const nonAssignmentOperator = getNonAssignmentOperatorForCompoundAssignment(operator.kind);
const left = visitNode(binaryExpression.left, visitor, isExpression);
const right = visitNode(binaryExpression.right, visitor, isExpression);
let left = skipParentheses(visitNode(binaryExpression.left, visitor, isLeftHandSideExpression));
let assignmentTarget = left
const right = skipParentheses(visitNode(binaryExpression.right, visitor, isExpression));
if (isPropertyAccessExpression(left) || isElementAccessExpression(left)) {
const tempVariable = createTempVariable(hoistVariableDeclaration)
if (isPropertyAccessExpression(left)) {
assignmentTarget = createPropertyAccess(
tempVariable,
left.name
);
left = createPropertyAccess(
createAssignment(
tempVariable,
left.expression
),
left.name
);
}
else {
assignmentTarget = createElementAccess(
tempVariable,
left.argumentExpression
);
left = createElementAccess(
createAssignment(
tempVariable,
left.expression
),
left.argumentExpression
);
}
}
return createBinary(
left,
nonAssignmentOperator,
createParen(
createAssignment(
left,
assignmentTarget,
right
)
)