Skip to content

Commit

Permalink
Ensure __spreadArray is backwards-compatible
Browse files Browse the repository at this point in the history
  • Loading branch information
rbuckton committed Jun 10, 2021
1 parent ad979d0 commit b5a1133
Show file tree
Hide file tree
Showing 55 changed files with 705 additions and 705 deletions.
4 changes: 2 additions & 2 deletions src/compiler/factory/emitHelpers.ts
Original file line number Diff line number Diff line change
Expand Up @@ -287,7 +287,7 @@ namespace ts {
return factory.createCallExpression(
getUnscopedHelperName("__spreadArray"),
/*typeArguments*/ undefined,
packFrom ? [to, from, factory.createTrue()] : [to, from]
[to, from, packFrom ? factory.createTrue() : factory.createFalse()]
);
}

Expand Down Expand Up @@ -638,7 +638,7 @@ namespace ts {
scoped: false,
text: `
var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
if (pack) for (var i = 0, l = from.length, ar; i < l; i++) {
if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
if (ar || !(i in from)) {
if (!ar) ar = Array.prototype.slice.call(from, 0, i);
ar[i] = from[i];
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@ foo(o); // Error because x has an array type namely

//// [argumentExpressionContextualTyping.js]
var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
if (pack) for (var i = 0, l = from.length, ar; i < l; i++) {
if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
if (ar || !(i in from)) {
if (!ar) ar = Array.prototype.slice.call(from, 0, i);
ar[i] = from[i];
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ var spr2:[number, number, number] = [1, 2, 3, ...tup]; // Error

//// [arrayLiteralExpressionContextualTyping.js]
var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
if (pack) for (var i = 0, l = from.length, ar; i < l; i++) {
if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
if (ar || !(i in from)) {
if (!ar) ar = Array.prototype.slice.call(from, 0, i);
ar[i] = from[i];
Expand Down
12 changes: 6 additions & 6 deletions tests/baselines/reference/arrayLiteralSpread.js
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@ function f2() {

//// [arrayLiteralSpread.js]
var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
if (pack) for (var i = 0, l = from.length, ar; i < l; i++) {
if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
if (ar || !(i in from)) {
if (!ar) ar = Array.prototype.slice.call(from, 0, i);
ar[i] = from[i];
Expand All @@ -38,15 +38,15 @@ function f0() {
var a1 = __spreadArray([], a, true);
var a2 = __spreadArray([1], a, true);
var a3 = __spreadArray([1, 2], a, true);
var a4 = __spreadArray(__spreadArray([], a, true), [1]);
var a5 = __spreadArray(__spreadArray([], a, true), [1, 2]);
var a6 = __spreadArray(__spreadArray([1, 2], a, true), [1, 2]);
var a7 = __spreadArray(__spreadArray(__spreadArray([1], a, true), [2]), a, true);
var a4 = __spreadArray(__spreadArray([], a, true), [1], false);
var a5 = __spreadArray(__spreadArray([], a, true), [1, 2], false);
var a6 = __spreadArray(__spreadArray([1, 2], a, true), [1, 2], false);
var a7 = __spreadArray(__spreadArray(__spreadArray([1], a, true), [2], false), a, true);
var a8 = __spreadArray(__spreadArray(__spreadArray([], a, true), a, true), a, true);
}
function f1() {
var a = [1, 2, 3];
var b = __spreadArray(__spreadArray(["hello"], a, true), [true]);
var b = __spreadArray(__spreadArray(["hello"], a, true), [true], false);
var b;
}
function f2() {
Expand Down
20 changes: 10 additions & 10 deletions tests/baselines/reference/arrayLiteralSpreadES5iterable.js
Original file line number Diff line number Diff line change
Expand Up @@ -41,7 +41,7 @@ var __read = (this && this.__read) || function (o, n) {
return ar;
};
var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
if (pack) for (var i = 0, l = from.length, ar; i < l; i++) {
if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
if (ar || !(i in from)) {
if (!ar) ar = Array.prototype.slice.call(from, 0, i);
ar[i] = from[i];
Expand All @@ -51,18 +51,18 @@ var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
};
function f0() {
var a = [1, 2, 3];
var a1 = __spreadArray([], __read(a));
var a2 = __spreadArray([1], __read(a));
var a3 = __spreadArray([1, 2], __read(a));
var a4 = __spreadArray(__spreadArray([], __read(a)), [1]);
var a5 = __spreadArray(__spreadArray([], __read(a)), [1, 2]);
var a6 = __spreadArray(__spreadArray([1, 2], __read(a)), [1, 2]);
var a7 = __spreadArray(__spreadArray(__spreadArray([1], __read(a)), [2]), __read(a));
var a8 = __spreadArray(__spreadArray(__spreadArray([], __read(a)), __read(a)), __read(a));
var a1 = __spreadArray([], __read(a), false);
var a2 = __spreadArray([1], __read(a), false);
var a3 = __spreadArray([1, 2], __read(a), false);
var a4 = __spreadArray(__spreadArray([], __read(a), false), [1], false);
var a5 = __spreadArray(__spreadArray([], __read(a), false), [1, 2], false);
var a6 = __spreadArray(__spreadArray([1, 2], __read(a), false), [1, 2], false);
var a7 = __spreadArray(__spreadArray(__spreadArray([1], __read(a), false), [2], false), __read(a), false);
var a8 = __spreadArray(__spreadArray(__spreadArray([], __read(a), false), __read(a), false), __read(a), false);
}
function f1() {
var a = [1, 2, 3];
var b = __spreadArray(__spreadArray(["hello"], __read(a)), [true]);
var b = __spreadArray(__spreadArray(["hello"], __read(a), false), [true], false);
var b;
}
function f2() {
Expand Down
8 changes: 4 additions & 4 deletions tests/baselines/reference/arrayLiterals2ES5.js
Original file line number Diff line number Diff line change
Expand Up @@ -63,7 +63,7 @@ var d9 = [[...temp1], ...["hello"]];
// ElementList, Elisionopt AssignmentExpression
// ElementList, Elisionopt SpreadElement
var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
if (pack) for (var i = 0, l = from.length, ar; i < l; i++) {
if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
if (ar || !(i in from)) {
if (!ar) ar = Array.prototype.slice.call(from, 0, i);
ar[i] = from[i];
Expand All @@ -75,10 +75,10 @@ var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
// ... AssignmentExpression
var a0 = [, , 2, 3, 4];
var a1 = ["hello", "world"];
var a2 = __spreadArray(__spreadArray([, , ,], a0, true), ["hello"]);
var a2 = __spreadArray(__spreadArray([, , ,], a0, true), ["hello"], false);
var a3 = __spreadArray([, ,], a0, true);
var a4 = [function () { return 1; },];
var a5 = __spreadArray(__spreadArray([], a0, true), [,]);
var a5 = __spreadArray(__spreadArray([], a0, true), [,], false);
// Each element expression in a non-empty array literal is processed as follows:
// - If the array literal contains no spread elements, and if the array literal is contextually typed (section 4.19)
// by a type T and T has a property with the numeric name N, where N is the index of the element expression in the array literal,
Expand Down Expand Up @@ -110,4 +110,4 @@ var d5 = __spreadArray([], temp3, true);
var d6 = __spreadArray([], temp4, true);
var d7 = __spreadArray([], temp1, true);
var d8 = [__spreadArray([], temp1, true)];
var d9 = __spreadArray([__spreadArray([], temp1, true)], ["hello"]);
var d9 = __spreadArray([__spreadArray([], temp1, true)], ["hello"], false);
2 changes: 1 addition & 1 deletion tests/baselines/reference/arrayLiterals3.js
Original file line number Diff line number Diff line change
Expand Up @@ -41,7 +41,7 @@ var c2: myArray = [...temp1, ...temp]; // Error cannot assign (number
// by a type T and T has a property with the numeric name N, where N is the index of the element expression in the array literal,
// the element expression is contextually typed by the type of that property.
var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
if (pack) for (var i = 0, l = from.length, ar; i < l; i++) {
if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
if (ar || !(i in from)) {
if (!ar) ar = Array.prototype.slice.call(from, 0, i);
ar[i] = from[i];
Expand Down
20 changes: 10 additions & 10 deletions tests/baselines/reference/callChain.js
Original file line number Diff line number Diff line change
Expand Up @@ -44,7 +44,7 @@ o2?.b()!.toString!;
//// [callChain.js]
"use strict";
var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
if (pack) for (var i = 0, l = from.length, ar; i < l; i++) {
if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
if (ar || !(i in from)) {
if (!ar) ar = Array.prototype.slice.call(from, 0, i);
ar[i] = from[i];
Expand All @@ -56,27 +56,27 @@ var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o;
o1 === null || o1 === void 0 ? void 0 : o1();
o1 === null || o1 === void 0 ? void 0 : o1(1);
o1 === null || o1 === void 0 ? void 0 : o1.apply(void 0, [1, 2]);
o1 === null || o1 === void 0 ? void 0 : o1.apply(void 0, __spreadArray(__spreadArray([1], [2, 3]), [4]));
o1 === null || o1 === void 0 ? void 0 : o1.apply(void 0, __spreadArray(__spreadArray([1], [2, 3], false), [4], false));
o2 === null || o2 === void 0 ? void 0 : o2.b();
o2 === null || o2 === void 0 ? void 0 : o2.b(1);
o2 === null || o2 === void 0 ? void 0 : o2.b.apply(o2, [1, 2]);
o2 === null || o2 === void 0 ? void 0 : o2.b.apply(o2, __spreadArray(__spreadArray([1], [2, 3]), [4]));
o2 === null || o2 === void 0 ? void 0 : o2.b.apply(o2, __spreadArray(__spreadArray([1], [2, 3], false), [4], false));
o2 === null || o2 === void 0 ? void 0 : o2["b"]();
o2 === null || o2 === void 0 ? void 0 : o2["b"](1);
o2 === null || o2 === void 0 ? void 0 : o2["b"].apply(o2, [1, 2]);
o2 === null || o2 === void 0 ? void 0 : o2["b"].apply(o2, __spreadArray(__spreadArray([1], [2, 3]), [4]));
o2 === null || o2 === void 0 ? void 0 : o2["b"].apply(o2, __spreadArray(__spreadArray([1], [2, 3], false), [4], false));
(_a = o3.b) === null || _a === void 0 ? void 0 : _a.call(o3).c;
(_b = o3.b) === null || _b === void 0 ? void 0 : _b.call(o3, 1).c;
(_c = o3.b) === null || _c === void 0 ? void 0 : _c.call.apply(_c, __spreadArray([o3], [1, 2])).c;
(_d = o3.b) === null || _d === void 0 ? void 0 : _d.call.apply(_d, __spreadArray(__spreadArray([o3, 1], [2, 3]), [4])).c;
(_c = o3.b) === null || _c === void 0 ? void 0 : _c.call.apply(_c, __spreadArray([o3], [1, 2], false)).c;
(_d = o3.b) === null || _d === void 0 ? void 0 : _d.call.apply(_d, __spreadArray(__spreadArray([o3, 1], [2, 3], false), [4], false)).c;
(_e = o3.b) === null || _e === void 0 ? void 0 : _e.call(o3)["c"];
(_f = o3.b) === null || _f === void 0 ? void 0 : _f.call(o3, 1)["c"];
(_g = o3.b) === null || _g === void 0 ? void 0 : _g.call.apply(_g, __spreadArray([o3], [1, 2]))["c"];
(_h = o3.b) === null || _h === void 0 ? void 0 : _h.call.apply(_h, __spreadArray(__spreadArray([o3, 1], [2, 3]), [4]))["c"];
(_g = o3.b) === null || _g === void 0 ? void 0 : _g.call.apply(_g, __spreadArray([o3], [1, 2], false))["c"];
(_h = o3.b) === null || _h === void 0 ? void 0 : _h.call.apply(_h, __spreadArray(__spreadArray([o3, 1], [2, 3], false), [4], false))["c"];
(_j = o3["b"]) === null || _j === void 0 ? void 0 : _j.call(o3).c;
(_k = o3["b"]) === null || _k === void 0 ? void 0 : _k.call(o3, 1).c;
(_l = o3["b"]) === null || _l === void 0 ? void 0 : _l.call.apply(_l, __spreadArray([o3], [1, 2])).c;
(_m = o3["b"]) === null || _m === void 0 ? void 0 : _m.call.apply(_m, __spreadArray(__spreadArray([o3, 1], [2, 3]), [4])).c;
(_l = o3["b"]) === null || _l === void 0 ? void 0 : _l.call.apply(_l, __spreadArray([o3], [1, 2], false)).c;
(_m = o3["b"]) === null || _m === void 0 ? void 0 : _m.call.apply(_m, __spreadArray(__spreadArray([o3, 1], [2, 3], false), [4], false)).c;
var v = o4 === null || o4 === void 0 ? void 0 : o4(incr);
(_o = o5()) === null || _o === void 0 ? void 0 : _o();
// GH#36031
Expand Down
4 changes: 2 additions & 2 deletions tests/baselines/reference/callOverload.js
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ withRest(...n);

//// [callOverload.js]
var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
if (pack) for (var i = 0, l = from.length, ar; i < l; i++) {
if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
if (ar || !(i in from)) {
if (!ar) ar = Array.prototype.slice.call(from, 0, i);
ar[i] = from[i];
Expand All @@ -25,6 +25,6 @@ var n;
fn(1); // no error
fn(1, 2, 3, 4);
takeTwo(1, 2, 3, 4);
withRest.apply(void 0, __spreadArray(['a'], n)); // no error
withRest.apply(void 0, __spreadArray(['a'], n, false)); // no error
withRest();
withRest.apply(void 0, n);
36 changes: 18 additions & 18 deletions tests/baselines/reference/callWithSpread.js
Original file line number Diff line number Diff line change
Expand Up @@ -75,7 +75,7 @@ var __extends = (this && this.__extends) || (function () {
};
})();
var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
if (pack) for (var i = 0, l = from.length, ar; i < l; i++) {
if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
if (ar || !(i in from)) {
if (!ar) ar = Array.prototype.slice.call(from, 0, i);
ar[i] = from[i];
Expand All @@ -95,23 +95,23 @@ var z;
var obj;
var xa;
foo(1, 2, "abc");
foo.apply(void 0, __spreadArray([1, 2], a));
foo.apply(void 0, __spreadArray(__spreadArray([1, 2], a), ["abc"]));
foo.apply(void 0, __spreadArray([1, 2], a, false));
foo.apply(void 0, __spreadArray(__spreadArray([1, 2], a, false), ["abc"], false));
obj.foo(1, 2, "abc");
obj.foo.apply(obj, __spreadArray([1, 2], a));
obj.foo.apply(obj, __spreadArray(__spreadArray([1, 2], a), ["abc"]));
obj.foo.apply(obj, __spreadArray([1, 2], a)).foo(1, 2, "abc");
(_a = obj.foo.apply(obj, __spreadArray([1, 2], a))).foo.apply(_a, __spreadArray([1, 2], a));
(_b = obj.foo.apply(obj, __spreadArray([1, 2], a))).foo.apply(_b, __spreadArray(__spreadArray([1, 2], a), ["abc"]));
obj.foo.apply(obj, __spreadArray([1, 2], a, false));
obj.foo.apply(obj, __spreadArray(__spreadArray([1, 2], a, false), ["abc"], false));
obj.foo.apply(obj, __spreadArray([1, 2], a, false)).foo(1, 2, "abc");
(_a = obj.foo.apply(obj, __spreadArray([1, 2], a, false))).foo.apply(_a, __spreadArray([1, 2], a, false));
(_b = obj.foo.apply(obj, __spreadArray([1, 2], a, false))).foo.apply(_b, __spreadArray(__spreadArray([1, 2], a, false), ["abc"], false));
(obj.foo)(1, 2, "abc");
obj.foo.apply(obj, __spreadArray([1, 2], a));
obj.foo.apply(obj, __spreadArray(__spreadArray([1, 2], a), ["abc"]));
(obj.foo.apply(obj, __spreadArray([1, 2], a)).foo)(1, 2, "abc");
(_c = obj.foo.apply(obj, __spreadArray([1, 2], a))).foo.apply(_c, __spreadArray([1, 2], a));
(_d = obj.foo.apply(obj, __spreadArray([1, 2], a))).foo.apply(_d, __spreadArray(__spreadArray([1, 2], a), ["abc"]));
obj.foo.apply(obj, __spreadArray([1, 2], a, false));
obj.foo.apply(obj, __spreadArray(__spreadArray([1, 2], a, false), ["abc"], false));
(obj.foo.apply(obj, __spreadArray([1, 2], a, false)).foo)(1, 2, "abc");
(_c = obj.foo.apply(obj, __spreadArray([1, 2], a, false))).foo.apply(_c, __spreadArray([1, 2], a, false));
(_d = obj.foo.apply(obj, __spreadArray([1, 2], a, false))).foo.apply(_d, __spreadArray(__spreadArray([1, 2], a, false), ["abc"], false));
xa[1].foo(1, 2, "abc");
(_e = xa[1]).foo.apply(_e, __spreadArray([1, 2], a));
(_f = xa[1]).foo.apply(_f, __spreadArray(__spreadArray([1, 2], a), ["abc"]));
(_e = xa[1]).foo.apply(_e, __spreadArray([1, 2], a, false));
(_f = xa[1]).foo.apply(_f, __spreadArray(__spreadArray([1, 2], a, false), ["abc"], false));
(_g = xa[1]).foo.apply(_g, [1, 2, "abc"]);
var C = /** @class */ (function () {
function C(x, y) {
Expand All @@ -120,7 +120,7 @@ var C = /** @class */ (function () {
z[_i - 2] = arguments[_i];
}
this.foo(x, y);
this.foo.apply(this, __spreadArray([x, y], z));
this.foo.apply(this, __spreadArray([x, y], z, false));
}
C.prototype.foo = function (x, y) {
var z = [];
Expand All @@ -134,12 +134,12 @@ var D = /** @class */ (function (_super) {
__extends(D, _super);
function D() {
var _this = _super.call(this, 1, 2) || this;
_this = _super.apply(this, __spreadArray([1, 2], a)) || this;
_this = _super.apply(this, __spreadArray([1, 2], a, false)) || this;
return _this;
}
D.prototype.foo = function () {
_super.prototype.foo.call(this, 1, 2);
_super.prototype.foo.apply(this, __spreadArray([1, 2], a));
_super.prototype.foo.apply(this, __spreadArray([1, 2], a, false));
};
return D;
}(C));
18 changes: 9 additions & 9 deletions tests/baselines/reference/callWithSpread2.js
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,7 @@ prefix2("g", ...ns);

//// [callWithSpread2.js]
var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
if (pack) for (var i = 0, l = from.length, ar; i < l; i++) {
if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
if (ar || !(i in from)) {
if (!ar) ar = Array.prototype.slice.call(from, 0, i);
ar[i] = from[i];
Expand All @@ -52,19 +52,19 @@ all.apply(void 0, ns);
weird.apply(void 0, ns);
weird.apply(void 0, mixed);
weird.apply(void 0, tuple);
prefix.apply(void 0, __spreadArray(["a"], ns));
rest.apply(void 0, __spreadArray(["d"], ns));
prefix.apply(void 0, __spreadArray(["a"], ns, false));
rest.apply(void 0, __spreadArray(["d"], ns, false));
// extra arguments
normal.apply(void 0, __spreadArray(["g"], ns));
normal.apply(void 0, __spreadArray(["g"], ns, false));
thunk.apply(void 0, ns);
// bad
all.apply(void 0, mixed);
all.apply(void 0, tuple);
prefix.apply(void 0, __spreadArray(["b"], mixed));
prefix.apply(void 0, __spreadArray(["c"], tuple));
rest.apply(void 0, __spreadArray(["e"], mixed));
rest.apply(void 0, __spreadArray(["f"], tuple));
prefix.apply(void 0, __spreadArray(["b"], mixed, false));
prefix.apply(void 0, __spreadArray(["c"], tuple, false));
rest.apply(void 0, __spreadArray(["e"], mixed, false));
rest.apply(void 0, __spreadArray(["f"], tuple, false));
prefix.apply(void 0, ns); // required parameters are required
prefix.apply(void 0, mixed);
prefix.apply(void 0, tuple);
prefix2.apply(void 0, __spreadArray(["g"], ns));
prefix2.apply(void 0, __spreadArray(["g"], ns, false));
Loading

0 comments on commit b5a1133

Please sign in to comment.