Skip to content

Commit

Permalink
Handle side effects correctly in rest params index expressions (#4348) (
Browse files Browse the repository at this point in the history
  • Loading branch information
motiz88 authored and danez committed Oct 5, 2016
1 parent 7a7704f commit 0366d1a
Show file tree
Hide file tree
Showing 4 changed files with 33 additions and 6 deletions.
23 changes: 19 additions & 4 deletions packages/babel-plugin-transform-es2015-parameters/src/rest.js
Expand Up @@ -17,6 +17,10 @@ let restIndex = template(`
ARGUMENTS.length <= INDEX ? undefined : ARGUMENTS[INDEX]
`);

let restIndexImpure = template(`
REF = INDEX, ARGUMENTS.length <= REF ? undefined : ARGUMENTS[REF]
`);

let restLength = template(`
ARGUMENTS.length <= OFFSET ? 0 : ARGUMENTS.length - OFFSET
`);
Expand Down Expand Up @@ -161,10 +165,21 @@ function optimiseIndexGetter(path, argsId, offset) {
index = t.binaryExpression("+", path.parent.property, t.numericLiteral(offset));
}

path.parentPath.replaceWith(restIndex({
ARGUMENTS: argsId,
INDEX: index,
}));
const { scope } = path;
if (!scope.isPure(index)) {
let temp = scope.generateUidIdentifierBasedOnNode(index);
scope.push({id: temp, kind: "var"});
path.parentPath.replaceWith(restIndexImpure({
ARGUMENTS: argsId,
INDEX: index,
REF: temp
}));
} else {
path.parentPath.replaceWith(restIndex({
ARGUMENTS: argsId,
INDEX: index,
}));
}
}

function optimiseLengthGetter(path, argsId, offset) {
Expand Down
@@ -0,0 +1,4 @@
function first(...values) {
var index = 0;
return values[index++];
}
@@ -0,0 +1,6 @@
function first() {
var _ref;

var index = 0;
return _ref = index++ + 0, arguments.length <= _ref ? undefined : arguments[_ref];
}
@@ -1,6 +1,8 @@
var t = function (f) {
var _ref;

arguments.length <= 1 ? undefined : arguments[1];
arguments.length <= (arguments.length <= 1 ? 0 : arguments.length - 1) - 1 + 1 ? undefined : arguments[(arguments.length <= 1 ? 0 : arguments.length - 1) - 1 + 1];
_ref = (arguments.length <= 1 ? 0 : arguments.length - 1) - 1 + 1, arguments.length <= _ref ? undefined : arguments[_ref];
};

function t(f) {
Expand All @@ -11,4 +13,4 @@ function t(f) {
items;
items[0];
items[items.length - 1];
}
}

0 comments on commit 0366d1a

Please sign in to comment.