Fix some rest optimization errors.

Commit message edited by @jmm.
This commit is contained in:
Victor Felder
2016-02-11 00:08:56 +01:00
committed by Jesse McCarthy
parent 6ca07974c9
commit 183fbab967
2 changed files with 12 additions and 3 deletions

View File

@@ -60,6 +60,12 @@ let memberExpressionOptimisationVisitor = {
let {parentPath} = path;
let grandparentPath = parentPath.parentPath;
// ex: [rest[0]] = [rest[1]]
if (grandparentPath.isLVal()) {
state.deopted = true;
return;
}
// ex: args[0]
if (
parentPath.isMemberExpression({ computed: true, object: node }) &&
@@ -68,7 +74,8 @@ let memberExpressionOptimisationVisitor = {
!(
grandparentPath.isAssignmentExpression() &&
parentPath.node === grandparentPath.node.left
)
) &&
!grandparentPath.isForInStatement()
) {
// if we know that this member expression is referencing a number then
// we can safely optimise it

View File

@@ -83,10 +83,12 @@ function swap() {
rest[_key9] = arguments[_key9];
}
[rest[0], rest[1]] = [rest[1], rest[0]];
var _ref = [rest[1], rest[0]];
rest[0] = _ref[0];
rest[1] = _ref[1];
}
function x() {
function forIn() {
for (var _len10 = arguments.length, rest = Array(_len10), _key10 = 0; _key10 < _len10; _key10++) {
rest[_key10] = arguments[_key10];
}