ensure consistent expression value for post-assignment unary expressions (#3650)

This commit is contained in:
Guy Bedford
2016-08-20 18:21:17 +02:00
committed by Henry Zhu
parent 55f37a1b1e
commit de2791a696
5 changed files with 26 additions and 4 deletions

View File

@@ -43,10 +43,26 @@ export default function ({ types: t }) {
let node = path.node;
// if it is a non-prefix update expression (x++ etc)
// then we must replace with the expression (_export('x', x + 1), x++)
// in order to ensure the same update expression value
let isPostUpdateExpression = path.isUpdateExpression() && !node.prefix;
if (isPostUpdateExpression) {
if (node.operator === "++")
node = t.binaryExpression("+", node.argument, t.numericLiteral(1));
else if (node.operator === "--")
node = t.binaryExpression("-", node.argument, t.numericLiteral(1));
else
isPostUpdateExpression = false;
}
for (let exportedName of exportedNames) {
node = this.buildCall(exportedName, node).expression;
}
if (isPostUpdateExpression)
node = t.sequenceExpression([node, path.node]);
path.replaceWith(node);
}
};

View File

@@ -1,3 +0,0 @@
{
"plugins": ["external-helpers", "transform-es2015-modules-systemjs"]
}

View File

@@ -1,8 +1,10 @@
System.register([], function (_export, _context) {
"use strict";
var c;
function a() {
alert("a");
_export("c", c + 1), c++;
}
_export("a", a);
@@ -14,6 +16,10 @@ System.register([], function (_export, _context) {
return {
setters: [],
execute: function () {
_export("c", c = 5);
_export("c", c);
b();
}
};

View File

@@ -10,7 +10,7 @@ System.register([], function (_export, _context) {
_export("test", test);
_export("test", test = 5);
_export("test", test++);
_export("test", test + 1), test++;
(function () {
var test = 2;