Skip to content

Commit 3e52f3d

Browse files
committed
Codegen: Do not subtract 0 in arguments to rest array loop
1 parent 52ec508 commit 3e52f3d

File tree

96 files changed

+170
-168
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

96 files changed

+170
-168
lines changed

src/compiler/transformers/es2015.ts

+3-1
Original file line numberDiff line numberDiff line change
@@ -1306,7 +1306,9 @@ namespace ts {
13061306
createAssignment(
13071307
createElementAccess(
13081308
expressionName,
1309-
createSubtract(temp, createLiteral(restIndex))
1309+
restIndex === 0
1310+
? temp
1311+
: createSubtract(temp, createLiteral(restIndex))
13101312
),
13111313
createElementAccess(createIdentifier("arguments"), temp)
13121314
),

tests/baselines/reference/accessorWithRestParam.js

+2-2
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ var C = (function () {
1313
set: function () {
1414
var v = [];
1515
for (var _i = 0; _i < arguments.length; _i++) {
16-
v[_i - 0] = arguments[_i];
16+
v[_i] = arguments[_i];
1717
}
1818
},
1919
enumerable: true,
@@ -23,7 +23,7 @@ var C = (function () {
2323
set: function () {
2424
var v2 = [];
2525
for (var _i = 0; _i < arguments.length; _i++) {
26-
v2[_i - 0] = arguments[_i];
26+
v2[_i] = arguments[_i];
2727
}
2828
},
2929
enumerable: true,

tests/baselines/reference/assignmentCompatWithCallSignaturesWithRestParameters.js

+3-3
Original file line numberDiff line numberDiff line change
@@ -52,14 +52,14 @@ a = function () { return 1; }; // ok, same number of required params
5252
a = function () {
5353
var args = [];
5454
for (var _i = 0; _i < arguments.length; _i++) {
55-
args[_i - 0] = arguments[_i];
55+
args[_i] = arguments[_i];
5656
}
5757
return 1;
5858
}; // ok, same number of required params
5959
a = function () {
6060
var args = [];
6161
for (var _i = 0; _i < arguments.length; _i++) {
62-
args[_i - 0] = arguments[_i];
62+
args[_i] = arguments[_i];
6363
}
6464
return 1;
6565
}; // error, type mismatch
@@ -72,7 +72,7 @@ a2 = function () { return 1; }; // ok, fewer required params
7272
a2 = function () {
7373
var args = [];
7474
for (var _i = 0; _i < arguments.length; _i++) {
75-
args[_i - 0] = arguments[_i];
75+
args[_i] = arguments[_i];
7676
}
7777
return 1;
7878
}; // ok, fewer required params

tests/baselines/reference/baseTypeAfterDerivedType.js

+1-1
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ var Derived2 = (function () {
2323
Derived2.prototype.method = function () {
2424
var args = [];
2525
for (var _i = 0; _i < arguments.length; _i++) {
26-
args[_i - 0] = arguments[_i];
26+
args[_i] = arguments[_i];
2727
}
2828
};
2929
return Derived2;

tests/baselines/reference/checkSuperCallBeforeThisAccessing5.js

+1-1
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ var Based = (function () {
1717
function Based() {
1818
var arg = [];
1919
for (var _i = 0; _i < arguments.length; _i++) {
20-
arg[_i - 0] = arguments[_i];
20+
arg[_i] = arguments[_i];
2121
}
2222
}
2323
return Based;

tests/baselines/reference/checkSuperCallBeforeThisAccessing6.js

+1-1
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ var Base = (function () {
2020
function Base() {
2121
var arg = [];
2222
for (var _i = 0; _i < arguments.length; _i++) {
23-
arg[_i - 0] = arguments[_i];
23+
arg[_i] = arguments[_i];
2424
}
2525
}
2626
return Base;

tests/baselines/reference/checkSuperCallBeforeThisAccessing8.js

+1-1
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ var Base = (function () {
2020
function Base() {
2121
var arg = [];
2222
for (var _i = 0; _i < arguments.length; _i++) {
23-
arg[_i - 0] = arguments[_i];
23+
arg[_i] = arguments[_i];
2424
}
2525
}
2626
return Base;

tests/baselines/reference/collisionArgumentsArrowFunctions.js

+1-1
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@ var f1NoError = function (arguments) {
3737
var f2 = function () {
3838
var restParameters = [];
3939
for (var _i = 0; _i < arguments.length; _i++) {
40-
restParameters[_i - 0] = arguments[_i];
40+
restParameters[_i] = arguments[_i];
4141
}
4242
var arguments = 10; // No Error
4343
};

tests/baselines/reference/collisionArgumentsClassConstructor.js

+1-1
Original file line numberDiff line numberDiff line change
@@ -118,7 +118,7 @@ var c2 = (function () {
118118
function c2() {
119119
var restParameters = [];
120120
for (var _i = 0; _i < arguments.length; _i++) {
121-
restParameters[_i - 0] = arguments[_i];
121+
restParameters[_i] = arguments[_i];
122122
}
123123
var arguments = 10; // no error
124124
}

tests/baselines/reference/collisionArgumentsClassMethod.js

+1-1
Original file line numberDiff line numberDiff line change
@@ -94,7 +94,7 @@ var c3 = (function () {
9494
c3.prototype.foo = function () {
9595
var restParameters = [];
9696
for (var _i = 0; _i < arguments.length; _i++) {
97-
restParameters[_i - 0] = arguments[_i];
97+
restParameters[_i] = arguments[_i];
9898
}
9999
var arguments = 10; // no error
100100
};

tests/baselines/reference/collisionArgumentsFunction.js

+1-1
Original file line numberDiff line numberDiff line change
@@ -66,7 +66,7 @@ function f1NoError(arguments) {
6666
function f3() {
6767
var restParameters = [];
6868
for (var _i = 0; _i < arguments.length; _i++) {
69-
restParameters[_i - 0] = arguments[_i];
69+
restParameters[_i] = arguments[_i];
7070
}
7171
var arguments = 10; // no error
7272
}

tests/baselines/reference/collisionArgumentsFunctionExpressions.js

+1-1
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,7 @@ function foo() {
5656
function f3() {
5757
var restParameters = [];
5858
for (var _i = 0; _i < arguments.length; _i++) {
59-
restParameters[_i - 0] = arguments[_i];
59+
restParameters[_i] = arguments[_i];
6060
}
6161
var arguments = 10; // no error
6262
}

tests/baselines/reference/collisionRestParameterArrowFunctions.js

+1-1
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ var f1NoError = function (_i) {
2727
var f2 = function () {
2828
var restParameters = [];
2929
for (var _a = 0; _a < arguments.length; _a++) {
30-
restParameters[_a - 0] = arguments[_a];
30+
restParameters[_a] = arguments[_a];
3131
}
3232
var _i = 10; // No Error
3333
};

tests/baselines/reference/collisionRestParameterClassConstructor.js

+1-1
Original file line numberDiff line numberDiff line change
@@ -88,7 +88,7 @@ var c2 = (function () {
8888
function c2() {
8989
var restParameters = [];
9090
for (var _a = 0; _a < arguments.length; _a++) {
91-
restParameters[_a - 0] = arguments[_a];
91+
restParameters[_a] = arguments[_a];
9292
}
9393
var _i = 10; // no error
9494
}

tests/baselines/reference/collisionRestParameterClassMethod.js

+1-1
Original file line numberDiff line numberDiff line change
@@ -70,7 +70,7 @@ var c3 = (function () {
7070
c3.prototype.foo = function () {
7171
var restParameters = [];
7272
for (var _a = 0; _a < arguments.length; _a++) {
73-
restParameters[_a - 0] = arguments[_a];
73+
restParameters[_a] = arguments[_a];
7474
}
7575
var _i = 10; // no error
7676
};

tests/baselines/reference/collisionRestParameterFunction.js

+1-1
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,7 @@ function f1NoError(_i) {
4848
function f3() {
4949
var restParameters = [];
5050
for (var _a = 0; _a < arguments.length; _a++) {
51-
restParameters[_a - 0] = arguments[_a];
51+
restParameters[_a] = arguments[_a];
5252
}
5353
var _i = 10; // no error
5454
}

tests/baselines/reference/collisionRestParameterFunctionExpressions.js

+1-1
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@ function foo() {
3939
function f3() {
4040
var restParameters = [];
4141
for (var _a = 0; _a < arguments.length; _a++) {
42-
restParameters[_a - 0] = arguments[_a];
42+
restParameters[_a] = arguments[_a];
4343
}
4444
var _i = 10; // no error
4545
}

tests/baselines/reference/collisionRestParameterUnderscoreIUsage.js

+1-1
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ var Foo = (function () {
1414
function Foo() {
1515
var args = [];
1616
for (var _a = 0; _a < arguments.length; _a++) {
17-
args[_a - 0] = arguments[_a];
17+
args[_a] = arguments[_a];
1818
}
1919
console.log(_i); // This should result in error
2020
}

tests/baselines/reference/constructorWithIncompleteTypeAnnotation.js

+1-1
Original file line numberDiff line numberDiff line change
@@ -297,7 +297,7 @@ var TypeScriptAllInOne;
297297
Program.Main = function () {
298298
var args = [];
299299
for (var _i = 0; _i < arguments.length; _i++) {
300-
args[_i - 0] = arguments[_i];
300+
args[_i] = arguments[_i];
301301
}
302302
try {
303303
var bfs = new BasicFeatures();

tests/baselines/reference/contextuallyTypedIife.js

+3-3
Original file line numberDiff line numberDiff line change
@@ -57,21 +57,21 @@ let eleven = (o => o.a(11))({ a: function(n) { return n; } });
5757
(function () {
5858
var numbers = [];
5959
for (var _i = 0; _i < arguments.length; _i++) {
60-
numbers[_i - 0] = arguments[_i];
60+
numbers[_i] = arguments[_i];
6161
}
6262
return numbers.every(function (n) { return n > 0; });
6363
})(5, 6, 7);
6464
(function () {
6565
var mixed = [];
6666
for (var _i = 0; _i < arguments.length; _i++) {
67-
mixed[_i - 0] = arguments[_i];
67+
mixed[_i] = arguments[_i];
6868
}
6969
return mixed.every(function (n) { return !!n; });
7070
})(5, 'oops', 'oh no');
7171
(function () {
7272
var noNumbers = [];
7373
for (var _i = 0; _i < arguments.length; _i++) {
74-
noNumbers[_i - 0] = arguments[_i];
74+
noNumbers[_i] = arguments[_i];
7575
}
7676
return noNumbers.some(function (n) { return n > 0; });
7777
})();

tests/baselines/reference/contextuallyTypingRestParameters.js

+1-1
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ var x: (...y: string[]) => void = function (.../*3*/y) {
1111
var x = function () {
1212
var y = [];
1313
for (var _i = 0; _i < arguments.length; _i++) {
14-
y[_i - 0] = arguments[_i];
14+
y[_i] = arguments[_i];
1515
}
1616
var t = y;
1717
var x2 = t; // This should be error

tests/baselines/reference/declFileRestParametersOfFunctionAndFunctionType.js

+1-1
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ var f6 = () => { return [<any>10]; }
1414
function f1() {
1515
var args = [];
1616
for (var _i = 0; _i < arguments.length; _i++) {
17-
args[_i - 0] = arguments[_i];
17+
args[_i] = arguments[_i];
1818
}
1919
}
2020
function f2(x) { }

tests/baselines/reference/declarationEmitDestructuringOptionalBindingParametersInOverloads.js

+2-2
Original file line numberDiff line numberDiff line change
@@ -13,13 +13,13 @@ function foo2(...rest: any[]) {
1313
function foo() {
1414
var rest = [];
1515
for (var _i = 0; _i < arguments.length; _i++) {
16-
rest[_i - 0] = arguments[_i];
16+
rest[_i] = arguments[_i];
1717
}
1818
}
1919
function foo2() {
2020
var rest = [];
2121
for (var _i = 0; _i < arguments.length; _i++) {
22-
rest[_i - 0] = arguments[_i];
22+
rest[_i] = arguments[_i];
2323
}
2424
}
2525

tests/baselines/reference/defaultExportWithOverloads01.js

+1-1
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ export default function f(...args: any[]) {
1010
function f() {
1111
var args = [];
1212
for (var _i = 0; _i < arguments.length; _i++) {
13-
args[_i - 0] = arguments[_i];
13+
args[_i] = arguments[_i];
1414
}
1515
}
1616
Object.defineProperty(exports, "__esModule", { value: true });

tests/baselines/reference/destructuringParameterDeclaration4.js

+7-7
Original file line numberDiff line numberDiff line change
@@ -43,31 +43,31 @@ foo1(1, 2, "string", E1.a, E.b); // Error
4343
function a0() {
4444
var x = [];
4545
for (var _i = 0; _i < arguments.length; _i++) {
46-
x[_i - 0] = arguments[_i];
46+
x[_i] = arguments[_i];
4747
}
4848
} // Error, rest parameter must be array type
4949
function a1() {
5050
var x = [];
5151
for (var _i = 0; _i < arguments.length; _i++) {
52-
x[_i - 0] = arguments[_i];
52+
x[_i] = arguments[_i];
5353
}
5454
}
5555
function a2() {
5656
var a = [];
5757
for (var _i = 0; _i < arguments.length; _i++) {
58-
a[_i - 0] = arguments[_i];
58+
a[_i] = arguments[_i];
5959
}
6060
} // Error, rest parameter must be array type
6161
function a3() {
6262
var b = [];
6363
for (var _i = 0; _i < arguments.length; _i++) {
64-
b[_i - 0] = arguments[_i];
64+
b[_i] = arguments[_i];
6565
}
6666
} // Error, can't be optional
6767
function a4() {
6868
var b = [];
6969
for (var _i = 0; _i < arguments.length; _i++) {
70-
b[_i - 0] = arguments[_i];
70+
b[_i] = arguments[_i];
7171
}
7272
} // Error, can't have initializer
7373
function a5(_a) {
@@ -86,7 +86,7 @@ var C = (function () {
8686
function C() {
8787
var temp = [];
8888
for (var _i = 0; _i < arguments.length; _i++) {
89-
temp[_i - 0] = arguments[_i];
89+
temp[_i] = arguments[_i];
9090
}
9191
this.temp = temp;
9292
} // Error, rest parameter can't have properties
@@ -96,7 +96,7 @@ var C = (function () {
9696
function foo1() {
9797
var a = [];
9898
for (var _i = 0; _i < arguments.length; _i++) {
99-
a[_i - 0] = arguments[_i];
99+
a[_i] = arguments[_i];
100100
}
101101
}
102102
foo1(1, 2, "string", E1.a, E.b); // Error

tests/baselines/reference/destructuringParameterDeclaration6.js

+3-3
Original file line numberDiff line numberDiff line change
@@ -40,20 +40,20 @@ while (, )
4040
function a5() {
4141
var = [];
4242
for (var _i = 0; _i < arguments.length; _i++) {
43-
[_i - 0] = arguments[_i];
43+
[_i] = arguments[_i];
4444
}
4545
}
4646
while () { }
4747
function a6() {
4848
var public = [];
4949
for (var _i = 0; _i < arguments.length; _i++) {
50-
public[_i - 0] = arguments[_i];
50+
public[_i] = arguments[_i];
5151
}
5252
}
5353
function a7() {
5454
var a = [];
5555
for (var _i = 0; _i < arguments.length; _i++) {
56-
a[_i - 0] = arguments[_i];
56+
a[_i] = arguments[_i];
5757
}
5858
}
5959
a({ "while": 1 });

tests/baselines/reference/detachedCommentAtStartOfLambdaFunction1.js

+1-1
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ var TestFile = (function () {
1919
return function () {
2020
var x = [];
2121
for (var _i = 0; _i < arguments.length; _i++) {
22-
x[_i - 0] = arguments[_i];
22+
x[_i] = arguments[_i];
2323
}
2424
/// <summary>Test summary</summary>
2525
/// <param name="message" type="String" />

tests/baselines/reference/detachedCommentAtStartOfLambdaFunction2.js

+1-1
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ var TestFile = (function () {
2323
/// <returns type="Function" />
2424
var x = [];
2525
for (var _i = 0; _i < arguments.length; _i++) {
26-
x[_i - 0] = arguments[_i];
26+
x[_i] = arguments[_i];
2727
}
2828
return message + _this.name;
2929
};

tests/baselines/reference/disallowLineTerminatorBeforeArrow.js

+2-2
Original file line numberDiff line numberDiff line change
@@ -92,13 +92,13 @@ var f4 = function (x, y) {
9292
var f5 = function () {
9393
var rest = [];
9494
for (var _i = 0; _i < arguments.length; _i++) {
95-
rest[_i - 0] = arguments[_i];
95+
rest[_i] = arguments[_i];
9696
}
9797
};
9898
var f6 = function () {
9999
var rest = [];
100100
for (var _i = 0; _i < arguments.length; _i++) {
101-
rest[_i - 0] = arguments[_i];
101+
rest[_i] = arguments[_i];
102102
}
103103
};
104104
var f7 = function (x, y, z) {

0 commit comments

Comments
 (0)