deopt array unpack optimisation on member expressions - fixes #1241
This commit is contained in:
@@ -403,9 +403,14 @@ class DestructuringTransformer {
|
||||
if (pattern.elements.length > arr.elements.length) return;
|
||||
if (pattern.elements.length < arr.elements.length && !hasRest(pattern)) return false;
|
||||
|
||||
// deopt on holes
|
||||
for (var i = 0; i < pattern.elements.length; i++) {
|
||||
if (!pattern.elements[i]) return false;
|
||||
var elem = pattern.elements[i];
|
||||
|
||||
// deopt on holes
|
||||
if (!elem) return false;
|
||||
|
||||
// deopt on member expressions
|
||||
if (t.isMemberExpression(elem)) return false;
|
||||
}
|
||||
|
||||
// deopt on reference to left side identifiers
|
||||
|
||||
@@ -8,3 +8,4 @@ var [[a, b, ...c]] = [[1, 2, 3, 4]];
|
||||
var [a, b] = [1, 2, 3];
|
||||
var [[a, b]] = [[1, 2, 3]];
|
||||
var [a, b] = [a, b];
|
||||
[a[0], a[1]] = [a[1], a[0]];
|
||||
|
||||
@@ -22,3 +22,7 @@ var b = _ref2[1];
|
||||
var _ref3 = [a, b];
|
||||
var a = _ref3[0];
|
||||
var b = _ref3[1];
|
||||
var _temp = [a[1], a[0]];
|
||||
a[0] = _temp[0];
|
||||
a[1] = _temp[1];
|
||||
_temp;
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
"use strict";
|
||||
|
||||
foo.foo = 1;
|
||||
foo.bar = 2;
|
||||
var _ref = [1, 2];
|
||||
foo.foo = _ref[0];
|
||||
foo.bar = _ref[1];
|
||||
|
||||
;
|
||||
|
||||
Reference in New Issue
Block a user