From a749907bc2cfd757d2e23922f7952ab79fce2b51 Mon Sep 17 00:00:00 2001 From: Brian Ng Date: Wed, 11 Jan 2017 09:23:21 -0600 Subject: [PATCH 1/2] Ensure array is always copied during destructure --- .../src/index.js | 5 +---- .../test/fixtures/destructuring/issue-5090/exec.js | 9 +++++++++ 2 files changed, 10 insertions(+), 4 deletions(-) create mode 100644 packages/babel-plugin-transform-es2015-destructuring/test/fixtures/destructuring/issue-5090/exec.js diff --git a/packages/babel-plugin-transform-es2015-destructuring/src/index.js b/packages/babel-plugin-transform-es2015-destructuring/src/index.js index 3fe8c9fd3bf7..b82ac321dd12 100644 --- a/packages/babel-plugin-transform-es2015-destructuring/src/index.js +++ b/packages/babel-plugin-transform-es2015-destructuring/src/index.js @@ -294,10 +294,7 @@ export default function ({ types: t }) { if (t.isRestElement(elem)) { elemRef = this.toArray(arrayRef); - - if (i > 0) { - elemRef = t.callExpression(t.memberExpression(elemRef, t.identifier("slice")), [t.numericLiteral(i)]); - } + elemRef = t.callExpression(t.memberExpression(elemRef, t.identifier("slice")), [t.numericLiteral(i)]); // set the element to the rest element argument since we've dealt with it // being a rest already diff --git a/packages/babel-plugin-transform-es2015-destructuring/test/fixtures/destructuring/issue-5090/exec.js b/packages/babel-plugin-transform-es2015-destructuring/test/fixtures/destructuring/issue-5090/exec.js new file mode 100644 index 000000000000..d295a9c9f617 --- /dev/null +++ b/packages/babel-plugin-transform-es2015-destructuring/test/fixtures/destructuring/issue-5090/exec.js @@ -0,0 +1,9 @@ +const assign = ([...arr], index, value) => { + arr[index] = value; + return arr; +} + +const arr = [1, 2, 3]; +assign(arr, 1, 42); + +assert.deepEqual(arr, [1, 2, 3]); From 46d9339488829e482ec7190eed7e64ae8935dcb1 Mon Sep 17 00:00:00 2001 From: Brian Ng Date: Wed, 11 Jan 2017 17:12:09 -0600 Subject: [PATCH 2/2] arrow --- .../test/fixtures/destructuring/issue-5090/exec.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/babel-plugin-transform-es2015-destructuring/test/fixtures/destructuring/issue-5090/exec.js b/packages/babel-plugin-transform-es2015-destructuring/test/fixtures/destructuring/issue-5090/exec.js index d295a9c9f617..b7727da60494 100644 --- a/packages/babel-plugin-transform-es2015-destructuring/test/fixtures/destructuring/issue-5090/exec.js +++ b/packages/babel-plugin-transform-es2015-destructuring/test/fixtures/destructuring/issue-5090/exec.js @@ -1,4 +1,4 @@ -const assign = ([...arr], index, value) => { +const assign = function([...arr], index, value) { arr[index] = value; return arr; }