really fix spread inside the RHS of a destructuring assignment causing invalid unpack optimisation
This commit is contained in:
parent
7fb3158be7
commit
e677e49638
@ -491,17 +491,17 @@ class DestructuringTransformer {
|
||||
if (pattern.elements.length > arr.elements.length) return;
|
||||
if (pattern.elements.length < arr.elements.length && !hasRest(pattern)) return false;
|
||||
|
||||
for (var i = 0; i < pattern.elements.length; i++) {
|
||||
var elem = pattern.elements[i];
|
||||
|
||||
for (let elem of (pattern.elements: Array)) {
|
||||
// deopt on holes
|
||||
if (!elem) return false;
|
||||
|
||||
// deopt on member expressions as they may be included in the RHS
|
||||
if (t.isMemberExpression(elem)) return false;
|
||||
}
|
||||
|
||||
for (let elem of (arr.elements: Array)) {
|
||||
// deopt on spread elements
|
||||
if (t.isSpreadElement(elem)) return false;
|
||||
|
||||
// deopt on member expressions
|
||||
if (t.isMemberExpression(elem)) return false;
|
||||
}
|
||||
|
||||
// deopt on reference to left side identifiers
|
||||
|
||||
@ -9,4 +9,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]];
|
||||
var [a, b, c] = [...foo, bar];
|
||||
var [a, b] = [...foo, bar];
|
||||
|
||||
@ -30,4 +30,3 @@ var _ref5 = [].concat(babelHelpers.toConsumableArray(foo), [bar]);
|
||||
|
||||
var a = _ref5[0];
|
||||
var b = _ref5[1];
|
||||
var c = _ref5[2];
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user