From 2dea8b2352345bbf3f176a64d8cd4532d4d72c55 Mon Sep 17 00:00:00 2001 From: Victor Felder Date: Mon, 14 Dec 2015 13:49:47 +0100 Subject: [PATCH] Safely transform multiple rest arguments --- .../src/rest.js | 2 +- .../fixtures/parameters/rest-multiple/actual.js | 7 +++++++ .../fixtures/parameters/rest-multiple/expected.js | 15 +++++++++++---- 3 files changed, 19 insertions(+), 5 deletions(-) diff --git a/packages/babel-plugin-transform-es2015-parameters/src/rest.js b/packages/babel-plugin-transform-es2015-parameters/src/rest.js index ec1a8fe076..f544232b42 100644 --- a/packages/babel-plugin-transform-es2015-parameters/src/rest.js +++ b/packages/babel-plugin-transform-es2015-parameters/src/rest.js @@ -121,7 +121,7 @@ export let visitor = { argsId._shadowedFunctionLiteral = path; function optimiseCandidate(parent, parentPath, offset) { - if (t.isReturnStatement(parentPath.parent) || t.isIdentifier(parentPath.parent.id)) { + if (t.isReturnStatement(parentPath.parent) || t.isIdentifier(parentPath.parent.id) || t.isIdentifier(parentPath.parent.left)) { parentPath.replaceWith(loadRest({ ARGUMENTS: argsId, INDEX: t.numericLiteral(parent.property.value + offset) diff --git a/packages/babel-plugin-transform-es2015-parameters/test/fixtures/parameters/rest-multiple/actual.js b/packages/babel-plugin-transform-es2015-parameters/test/fixtures/parameters/rest-multiple/actual.js index 59f2c222f8..c0f61ede0d 100644 --- a/packages/babel-plugin-transform-es2015-parameters/test/fixtures/parameters/rest-multiple/actual.js +++ b/packages/babel-plugin-transform-es2015-parameters/test/fixtures/parameters/rest-multiple/actual.js @@ -9,3 +9,10 @@ function t(f, ...items) { x = items[0]; x = items[1]; } + +function u(f, g, ...items) { + var x = f; + var y = g; + x = items[0]; + y = items[1]; +} diff --git a/packages/babel-plugin-transform-es2015-parameters/test/fixtures/parameters/rest-multiple/expected.js b/packages/babel-plugin-transform-es2015-parameters/test/fixtures/parameters/rest-multiple/expected.js index 1975c117ba..a8d86df09f 100644 --- a/packages/babel-plugin-transform-es2015-parameters/test/fixtures/parameters/rest-multiple/expected.js +++ b/packages/babel-plugin-transform-es2015-parameters/test/fixtures/parameters/rest-multiple/expected.js @@ -1,11 +1,18 @@ var t = function (f) { var x = f; - x = arguments[1]; - x = arguments[2]; + x = arguments.length <= 1 ? undefined : arguments[1]; + x = arguments.length <= 2 ? undefined : arguments[2]; }; function t(f) { var x = f; - x = arguments[1]; - x = arguments[2]; + x = arguments.length <= 1 ? undefined : arguments[1]; + x = arguments.length <= 2 ? undefined : arguments[2]; +} + +function u(f, g) { + var x = f; + var y = g; + x = arguments.length <= 2 ? undefined : arguments[2]; + y = arguments.length <= 3 ? undefined : arguments[3]; }