From a7acde3885df4583ed84e780c4b0fce5815631f6 Mon Sep 17 00:00:00 2001 From: Sneh Khatri Date: Tue, 14 Dec 2021 02:21:57 +0530 Subject: [PATCH] Fix: default rest argument array elements as undefined (#14032) --- packages/babel-plugin-transform-parameters/src/rest.ts | 2 ++ .../test/fixtures/parameters/default-arguments/exec.js | 4 ++++ .../test/fixtures/parameters/default-arguments/input.js | 4 ++++ .../test/fixtures/parameters/default-arguments/output.js | 9 +++++++++ .../rest-argument-with-other-arguments/exec.js | 5 +++++ .../rest-argument-with-other-arguments/input.js | 5 +++++ .../rest-argument-with-other-arguments/output.js | 9 +++++++++ 7 files changed, 38 insertions(+) create mode 100644 packages/babel-plugin-transform-parameters/test/fixtures/parameters/default-arguments/exec.js create mode 100644 packages/babel-plugin-transform-parameters/test/fixtures/parameters/default-arguments/input.js create mode 100644 packages/babel-plugin-transform-parameters/test/fixtures/parameters/default-arguments/output.js create mode 100644 packages/babel-plugin-transform-parameters/test/fixtures/parameters/rest-argument-with-other-arguments/exec.js create mode 100644 packages/babel-plugin-transform-parameters/test/fixtures/parameters/rest-argument-with-other-arguments/input.js create mode 100644 packages/babel-plugin-transform-parameters/test/fixtures/parameters/rest-argument-with-other-arguments/output.js diff --git a/packages/babel-plugin-transform-parameters/src/rest.ts b/packages/babel-plugin-transform-parameters/src/rest.ts index 196c11f82dfa..3d784f58b024 100644 --- a/packages/babel-plugin-transform-parameters/src/rest.ts +++ b/packages/babel-plugin-transform-parameters/src/rest.ts @@ -242,6 +242,8 @@ export default function convertFunctionRest(path) { let rest = node.params.pop().argument; + if (rest.name === "arguments") scope.rename(rest.name); + const argsId = t.identifier("arguments"); if (t.isPattern(rest)) { diff --git a/packages/babel-plugin-transform-parameters/test/fixtures/parameters/default-arguments/exec.js b/packages/babel-plugin-transform-parameters/test/fixtures/parameters/default-arguments/exec.js new file mode 100644 index 000000000000..808a93a1a76f --- /dev/null +++ b/packages/babel-plugin-transform-parameters/test/fixtures/parameters/default-arguments/exec.js @@ -0,0 +1,4 @@ +function func(...arguments) { + return arguments; +} +expect(func(1, 2, 3)).toStrictEqual([1, 2, 3]) diff --git a/packages/babel-plugin-transform-parameters/test/fixtures/parameters/default-arguments/input.js b/packages/babel-plugin-transform-parameters/test/fixtures/parameters/default-arguments/input.js new file mode 100644 index 000000000000..e14a98de58b8 --- /dev/null +++ b/packages/babel-plugin-transform-parameters/test/fixtures/parameters/default-arguments/input.js @@ -0,0 +1,4 @@ +function func(...arguments) { + console.log(arguments); // [1, 2, 3] +} +func(1, 2, 3); diff --git a/packages/babel-plugin-transform-parameters/test/fixtures/parameters/default-arguments/output.js b/packages/babel-plugin-transform-parameters/test/fixtures/parameters/default-arguments/output.js new file mode 100644 index 000000000000..a477e9689c75 --- /dev/null +++ b/packages/babel-plugin-transform-parameters/test/fixtures/parameters/default-arguments/output.js @@ -0,0 +1,9 @@ +function func() { + for (var _len = arguments.length, _arguments = new Array(_len), _key = 0; _key < _len; _key++) { + _arguments[_key] = arguments[_key]; + } + + console.log(_arguments); // [1, 2, 3] +} + +func(1, 2, 3); diff --git a/packages/babel-plugin-transform-parameters/test/fixtures/parameters/rest-argument-with-other-arguments/exec.js b/packages/babel-plugin-transform-parameters/test/fixtures/parameters/rest-argument-with-other-arguments/exec.js new file mode 100644 index 000000000000..5d73453be999 --- /dev/null +++ b/packages/babel-plugin-transform-parameters/test/fixtures/parameters/rest-argument-with-other-arguments/exec.js @@ -0,0 +1,5 @@ +function func(a, b, ...arguments) { + return [a, b, arguments]; +} + +expect(func('a', 'b', 1, 2, 3)).toStrictEqual(['a', 'b', [1, 2, 3]]) \ No newline at end of file diff --git a/packages/babel-plugin-transform-parameters/test/fixtures/parameters/rest-argument-with-other-arguments/input.js b/packages/babel-plugin-transform-parameters/test/fixtures/parameters/rest-argument-with-other-arguments/input.js new file mode 100644 index 000000000000..29d87e8cabcc --- /dev/null +++ b/packages/babel-plugin-transform-parameters/test/fixtures/parameters/rest-argument-with-other-arguments/input.js @@ -0,0 +1,5 @@ +function func(a, b, ...arguments) { + return [a, b, arguments]; +} + +func('a', 'b', 1, 2, 3) \ No newline at end of file diff --git a/packages/babel-plugin-transform-parameters/test/fixtures/parameters/rest-argument-with-other-arguments/output.js b/packages/babel-plugin-transform-parameters/test/fixtures/parameters/rest-argument-with-other-arguments/output.js new file mode 100644 index 000000000000..84ba9facd4b6 --- /dev/null +++ b/packages/babel-plugin-transform-parameters/test/fixtures/parameters/rest-argument-with-other-arguments/output.js @@ -0,0 +1,9 @@ +function func(a, b) { + for (var _len = arguments.length, _arguments = new Array(_len > 2 ? _len - 2 : 0), _key = 2; _key < _len; _key++) { + _arguments[_key - 2] = arguments[_key]; + } + + return [a, b, _arguments]; +} + +func('a', 'b', 1, 2, 3);