diff --git a/packages/babel/src/transformation/transformers/es6/destructuring.js b/packages/babel/src/transformation/transformers/es6/destructuring.js index a8587fecdb..104a858e47 100644 --- a/packages/babel/src/transformation/transformers/es6/destructuring.js +++ b/packages/babel/src/transformation/transformers/es6/destructuring.js @@ -497,6 +497,9 @@ class DestructuringTransformer { // deopt on holes if (!elem) return false; + // deopt on spread elements + if (t.isSpreadElement(elem)) return false; + // deopt on member expressions if (t.isMemberExpression(elem)) return false; } diff --git a/packages/babel/test/fixtures/transformation/es6.destructuring/array-unpack-optimisation/actual.js b/packages/babel/test/fixtures/transformation/es6.destructuring/array-unpack-optimisation/actual.js index 98df044d89..e4268d8574 100644 --- a/packages/babel/test/fixtures/transformation/es6.destructuring/array-unpack-optimisation/actual.js +++ b/packages/babel/test/fixtures/transformation/es6.destructuring/array-unpack-optimisation/actual.js @@ -9,3 +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]; diff --git a/packages/babel/test/fixtures/transformation/es6.destructuring/array-unpack-optimisation/expected.js b/packages/babel/test/fixtures/transformation/es6.destructuring/array-unpack-optimisation/expected.js index 42e1f86c03..eb655e4a1e 100644 --- a/packages/babel/test/fixtures/transformation/es6.destructuring/array-unpack-optimisation/expected.js +++ b/packages/babel/test/fixtures/transformation/es6.destructuring/array-unpack-optimisation/expected.js @@ -25,4 +25,9 @@ var b = _ref3[1]; var _ref4 = [a[1], a[0]]; a[0] = _ref4[0]; a[1] = _ref4[1]; -_ref4; + +var _ref5 = [].concat(babelHelpers.toConsumableArray(foo), [bar]); + +var a = _ref5[0]; +var b = _ref5[1]; +var c = _ref5[2];