Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Fix: default rest argument array elements as undefined #14032

Merged
merged 5 commits into from Dec 13, 2021
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
11 changes: 5 additions & 6 deletions packages/babel-plugin-transform-parameters/src/rest.ts
@@ -1,12 +1,8 @@
import { template, types as t } from "@babel/core";

const buildRest = template(`
for (var LEN = ARGUMENTS.length,
ARRAY = new Array(ARRAY_LEN),
KEY = START;
KEY < LEN;
KEY++) {
ARRAY[ARRAY_KEY] = ARGUMENTS[KEY];
for (var ARGS = ARGUMENTS, LEN = ARGS.length, ARRAY = new Array(ARRAY_LEN), KEY = START; KEY < LEN; KEY++) {
ARRAY[ARRAY_KEY] = ARGS[KEY];
}
`);

Expand Down Expand Up @@ -334,7 +330,10 @@ export default function convertFunctionRest(path) {
arrLen = t.identifier(len.name);
}

const args = scope.generateUidIdentifier("args");

const loop = buildRest({
ARGS: args,
ARGUMENTS: argsId,
ARRAY_KEY: arrKey,
ARRAY_LEN: arrLen,
Expand Down
Expand Up @@ -7,8 +7,8 @@ function t(x, _ref) {
var a = _ref.a,
b = _ref.b;

for (var _len = arguments.length, args = new Array(_len > 2 ? _len - 2 : 0), _key = 2; _key < _len; _key++) {
args[_key - 2] = arguments[_key];
for (var _args = arguments, _len = _args.length, args = new Array(_len > 2 ? _len - 2 : 0), _key = 2; _key < _len; _key++) {
args[_key - 2] = _args[_key];
}

console.log(x, a, b, args);
Expand Down
@@ -0,0 +1,4 @@
function func(...arguments) {
The-x-Theorist marked this conversation as resolved.
Show resolved Hide resolved
return arguments;
}
expect(func(1, 2, 3)).toStrictEqual([1, 2, 3])
@@ -0,0 +1,4 @@
function func(...arguments) {
console.log(arguments); // [1, 2, 3]
}
func(1, 2, 3);
@@ -0,0 +1,9 @@
function func() {
for (var _args = arguments, _len = _args.length, arguments = new Array(_len), _key = 0; _key < _len; _key++) {
arguments[_key] = _args[_key];
}

console.log(arguments); // [1, 2, 3]
}

func(1, 2, 3);
Expand Up @@ -17,8 +17,8 @@ rest2(undefined, 2);
function rest3() {
var b = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : a;

for (var _len = arguments.length, a = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {
a[_key - 1] = arguments[_key];
for (var _args = arguments, _len = _args.length, a = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {
a[_key - 1] = _args[_key];
}

expect(a).toHaveLength(1);
Expand Down
Expand Up @@ -6,8 +6,8 @@ function t() {
a = _ref.a,
b = _ref.b;

for (var _len = arguments.length, args = new Array(_len > 2 ? _len - 2 : 0), _key = 2; _key < _len; _key++) {
args[_key - 2] = arguments[_key];
for (var _args = arguments, _len = _args.length, args = new Array(_len > 2 ? _len - 2 : 0), _key = 2; _key < _len; _key++) {
args[_key - 2] = _args[_key];
}

console.log(x, a, b, args);
Expand Down
@@ -1,8 +1,8 @@
var args = 'bar';

function foo() {
for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
args[_key] = arguments[_key];
for (var _args = arguments, _len = _args.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
args[_key] = _args[_key];
}

return args;
Expand Down
@@ -1,6 +1,6 @@
let oneOf = function () {
for (var _len = arguments.length, nodes = new Array(_len), _key = 0; _key < _len; _key++) {
nodes[_key] = arguments[_key];
for (var _args = arguments, _len = _args.length, nodes = new Array(_len), _key = 0; _key < _len; _key++) {
nodes[_key] = _args[_key];
}

if (nodes.length === 1) {
Expand Down
@@ -1,6 +1,6 @@
function x() {
for (var _len = arguments.length, rest = new Array(_len), _key = 0; _key < _len; _key++) {
rest[_key] = arguments[_key];
for (var _args = arguments, _len = _args.length, rest = new Array(_len), _key = 0; _key < _len; _key++) {
rest[_key] = _args[_key];
}

arguments;
Expand Down
Expand Up @@ -24,8 +24,8 @@ var somefun = function () {
};

function demo1() {
for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
args[_key] = arguments[_key];
for (var _args = arguments, _len = _args.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
args[_key] = _args[_key];
}

return function (i) {
Expand All @@ -36,8 +36,8 @@ function demo1() {
var x = function () {
if (noNeedToWork) return 0;

for (var _len2 = arguments.length, rest = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {
rest[_key2] = arguments[_key2];
for (var _args2 = arguments, _len2 = _args2.length, rest = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {
rest[_key2] = _args2[_key2];
}

return rest;
Expand All @@ -46,8 +46,8 @@ var x = function () {
var innerclassproperties = function () {
var _class, _temp;

for (var _len3 = arguments.length, args = new Array(_len3), _key3 = 0; _key3 < _len3; _key3++) {
args[_key3] = arguments[_key3];
for (var _args3 = arguments, _len3 = _args3.length, args = new Array(_len3), _key3 = 0; _key3 < _len3; _key3++) {
args[_key3] = _args3[_key3];
}

return _temp = _class = function _class() {
Expand Down
Expand Up @@ -13,8 +13,8 @@ var x = /*#__PURE__*/function () {
var _ref2 = babelHelpers.asyncToGenerator(function* () {
if (noNeedToWork) return 0;

for (var _len = arguments.length, rest = new Array(_len), _key = 0; _key < _len; _key++) {
rest[_key] = arguments[_key];
for (var _args = arguments, _len = _args.length, rest = new Array(_len), _key = 0; _key < _len; _key++) {
rest[_key] = _args[_key];
}

return rest;
Expand Down
@@ -1,6 +1,6 @@
var deepAssign = function () {
for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
args[_key] = arguments[_key];
for (var _args = arguments, _len = _args.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
args[_key] = _args[_key];
}

return args = [];
Expand Down
Expand Up @@ -2,8 +2,8 @@
function r() {
if (noNeedToWork) return 0;

for (var _len = arguments.length, rest = new Array(_len), _key = 0; _key < _len; _key++) {
rest[_key] = arguments[_key];
for (var _args = arguments, _len = _args.length, rest = new Array(_len), _key = 0; _key < _len; _key++) {
rest[_key] = _args[_key];
}

return rest;
Expand All @@ -13,8 +13,8 @@ function r() {
function r() {
if (noNeedToWork) return 0;

for (var _len2 = arguments.length, rest = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {
rest[_key2] = arguments[_key2];
for (var _args2 = arguments, _len2 = _args2.length, rest = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {
rest[_key2] = _args2[_key2];
}

rest;
Expand All @@ -25,8 +25,8 @@ function r() {
function r() {
if (noNeedToWork) return 0;

for (var _len3 = arguments.length, rest = new Array(_len3), _key3 = 0; _key3 < _len3; _key3++) {
rest[_key3] = arguments[_key3];
for (var _args3 = arguments, _len3 = _args3.length, rest = new Array(_len3), _key3 = 0; _key3 < _len3; _key3++) {
rest[_key3] = _args3[_key3];
}

if (true) {
Expand All @@ -39,8 +39,8 @@ function r() {

function r() {
if (true) {
for (var _len4 = arguments.length, rest = new Array(_len4), _key4 = 0; _key4 < _len4; _key4++) {
rest[_key4] = arguments[_key4];
for (var _args4 = arguments, _len4 = _args4.length, rest = new Array(_len4), _key4 = 0; _key4 < _len4; _key4++) {
rest[_key4] = _args4[_key4];
}

if (true) {
Expand All @@ -55,8 +55,8 @@ function r() {
function r() {
if (noNeedToWork) return 0;

for (var _len5 = arguments.length, rest = new Array(_len5), _key5 = 0; _key5 < _len5; _key5++) {
rest[_key5] = arguments[_key5];
for (var _args5 = arguments, _len5 = _args5.length, rest = new Array(_len5), _key5 = 0; _key5 < _len5; _key5++) {
rest[_key5] = _args5[_key5];
}

if (lol) rest;
Expand All @@ -65,8 +65,8 @@ function r() {


function a() {
for (var _len6 = arguments.length, args = new Array(_len6), _key6 = 0; _key6 < _len6; _key6++) {
args[_key6] = arguments[_key6];
for (var _args6 = arguments, _len6 = _args6.length, args = new Array(_len6), _key6 = 0; _key6 < _len6; _key6++) {
args[_key6] = _args6[_key6];
}

return function () {
Expand All @@ -78,8 +78,8 @@ function a() {


function runQueue(queue) {
for (var _len7 = arguments.length, args = new Array(_len7 > 1 ? _len7 - 1 : 0), _key7 = 1; _key7 < _len7; _key7++) {
args[_key7 - 1] = arguments[_key7];
for (var _args7 = arguments, _len7 = _args7.length, args = new Array(_len7 > 1 ? _len7 - 1 : 0), _key7 = 1; _key7 < _len7; _key7++) {
args[_key7 - 1] = _args7[_key7];
}

for (var i = 0; i < queue.length; i++) {
Expand All @@ -90,8 +90,8 @@ function runQueue(queue) {

function runQueue(queue) {
if (foo) {
for (var _len8 = arguments.length, args = new Array(_len8 > 1 ? _len8 - 1 : 0), _key8 = 1; _key8 < _len8; _key8++) {
args[_key8 - 1] = arguments[_key8];
for (var _args8 = arguments, _len8 = _args8.length, args = new Array(_len8 > 1 ? _len8 - 1 : 0), _key8 = 1; _key8 < _len8; _key8++) {
args[_key8 - 1] = _args8[_key8];
}

for (var i = 0; i < queue.length; i++) {
Expand All @@ -103,8 +103,8 @@ function runQueue(queue) {
function r() {
if (noNeedToWork) return 0;

for (var _len9 = arguments.length, rest = new Array(_len9), _key9 = 0; _key9 < _len9; _key9++) {
rest[_key9] = arguments[_key9];
for (var _args9 = arguments, _len9 = _args9.length, rest = new Array(_len9), _key9 = 0; _key9 < _len9; _key9++) {
rest[_key9] = _args9[_key9];
}

var _x = x;
Expand Down
Expand Up @@ -6,8 +6,8 @@ var t = function (f) {
};

function t(f) {
for (var _len = arguments.length, items = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {
items[_key - 1] = arguments[_key];
for (var _args = arguments, _len = _args.length, items = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {
items[_key - 1] = _args[_key];
}

items;
Expand Down