Skip to content

Commit

Permalink
ensure consistent expression value for post-assignment unary expressions
Browse files Browse the repository at this point in the history
  • Loading branch information
guybedford committed Aug 11, 2016
1 parent 033681a commit bd46f8d
Show file tree
Hide file tree
Showing 5 changed files with 26 additions and 4 deletions.
Expand Up @@ -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);
}
};
Expand Down

This file was deleted.

@@ -1,7 +1,10 @@
export function a() {
alert("a");
c++;
}

export var c = 5;

function b() {
a();
}
Expand Down
@@ -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);
Expand All @@ -14,6 +16,10 @@ System.register([], function (_export, _context) {
return {
setters: [],
execute: function () {
_export("c", c = 5);

_export("c", c);

b();
}
};
Expand Down
Expand Up @@ -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;
Expand Down

0 comments on commit bd46f8d

Please sign in to comment.