really fix spread inside the RHS of a destructuring assignment causing invalid unpack optimisation

This commit is contained in:
Sebastian McKenzie 2015-07-14 22:18:30 +01:00
parent 7fb3158be7
commit e677e49638
3 changed files with 7 additions and 8 deletions

View File

@ -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

View File

@ -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];

View File

@ -30,4 +30,3 @@ var _ref5 = [].concat(babelHelpers.toConsumableArray(foo), [bar]);
var a = _ref5[0];
var b = _ref5[1];
var c = _ref5[2];