Skip to content

Commit 78ece7b

Browse files
committed
direct isInAmbientContext
1 parent c1d851c commit 78ece7b

12 files changed

+72
-118
lines changed

src/compiler/binder.ts

Lines changed: 1 addition & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -2503,27 +2503,8 @@ namespace ts {
25032503
}
25042504
}
25052505

2506-
function needParameterStrictModeCheck(node: Node) {
2507-
if (node.parent.kind === SyntaxKind.ConstructorType || node.parent.kind === SyntaxKind.FunctionType) {
2508-
return false;
2509-
}
2510-
2511-
if (node.parent.parent && (
2512-
node.parent.parent.kind === SyntaxKind.InterfaceDeclaration ||
2513-
node.parent.parent.kind === SyntaxKind.TypeLiteral
2514-
)) {
2515-
return false;
2516-
}
2517-
2518-
if (isDeclarationFile(file) || isInAmbientContext(node)) {
2519-
return false;
2520-
}
2521-
2522-
return true;
2523-
}
2524-
25252506
function bindParameter(node: ParameterDeclaration) {
2526-
if (inStrictMode && needParameterStrictModeCheck(node)) {
2507+
if (inStrictMode && !isInAmbientContext(node)) {
25272508
// It is a SyntaxError if the identifier eval or arguments appears within a FormalParameterList of a
25282509
// strict mode FunctionLikeDeclaration or FunctionExpression(13.1)
25292510
checkStrictModeEvalOrArguments(node, node.name);

tests/baselines/reference/collisionArgumentsFunction.errors.txt

Lines changed: 6 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -51,12 +51,9 @@ tests/cases/compiler/collisionArgumentsFunction.ts(30,22): error TS2396: Duplica
5151
var arguments: any; // No error
5252
}
5353

54-
namespace strict {
55-
"use strict";
56-
declare function f5(arguments: number, ...rest); // no codegen no error
57-
declare function f5(arguments: string, ...rest); // no codegen no error
58-
declare function f52(i: number, ...arguments); // no codegen no error
59-
declare function f52(i: string, ...arguments); // no codegen no error
60-
declare function f6(arguments: number); // no codegen no error
61-
declare function f6(arguments: string); // no codegen no error
62-
}
54+
declare function f5(arguments: number, ...rest); // no codegen no error
55+
declare function f5(arguments: string, ...rest); // no codegen no error
56+
declare function f52(i: number, ...arguments); // no codegen no error
57+
declare function f52(i: string, ...arguments); // no codegen no error
58+
declare function f6(arguments: number); // no codegen no error
59+
declare function f6(arguments: string); // no codegen no error

tests/baselines/reference/collisionArgumentsFunction.js

Lines changed: 6 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -37,15 +37,12 @@ function f4NoError(arguments: any) { // no error
3737
var arguments: any; // No error
3838
}
3939

40-
namespace strict {
41-
"use strict";
42-
declare function f5(arguments: number, ...rest); // no codegen no error
43-
declare function f5(arguments: string, ...rest); // no codegen no error
44-
declare function f52(i: number, ...arguments); // no codegen no error
45-
declare function f52(i: string, ...arguments); // no codegen no error
46-
declare function f6(arguments: number); // no codegen no error
47-
declare function f6(arguments: string); // no codegen no error
48-
}
40+
declare function f5(arguments: number, ...rest); // no codegen no error
41+
declare function f5(arguments: string, ...rest); // no codegen no error
42+
declare function f52(i: number, ...arguments); // no codegen no error
43+
declare function f52(i: string, ...arguments); // no codegen no error
44+
declare function f6(arguments: number); // no codegen no error
45+
declare function f6(arguments: string); // no codegen no error
4946

5047
//// [collisionArgumentsFunction.js]
5148
// Functions
@@ -93,7 +90,3 @@ function f42(i) {
9390
function f4NoError(arguments) {
9491
var arguments; // No error
9592
}
96-
var strict;
97-
(function (strict) {
98-
"use strict";
99-
})(strict || (strict = {}));

tests/baselines/reference/collisionArgumentsInType.js

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
11
//// [collisionArgumentsInType.ts]
2-
"use strict";
32
var v1: (i: number, ...arguments) => void; // no error - no code gen
43
var v12: (arguments: number, ...restParameters) => void; // no error - no code gen
54
var v2: {
@@ -16,7 +15,6 @@ var v21: {
1615
}
1716

1817
//// [collisionArgumentsInType.js]
19-
"use strict";
2018
var v1; // no error - no code gen
2119
var v12; // no error - no code gen
2220
var v2;
Lines changed: 28 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -1,54 +1,53 @@
11
=== tests/cases/compiler/collisionArgumentsInType.ts ===
2-
"use strict";
32
var v1: (i: number, ...arguments) => void; // no error - no code gen
4-
>v1 : Symbol(v1, Decl(collisionArgumentsInType.ts, 1, 3))
5-
>i : Symbol(i, Decl(collisionArgumentsInType.ts, 1, 9))
6-
>arguments : Symbol(arguments, Decl(collisionArgumentsInType.ts, 1, 19))
3+
>v1 : Symbol(v1, Decl(collisionArgumentsInType.ts, 0, 3))
4+
>i : Symbol(i, Decl(collisionArgumentsInType.ts, 0, 9))
5+
>arguments : Symbol(arguments, Decl(collisionArgumentsInType.ts, 0, 19))
76

87
var v12: (arguments: number, ...restParameters) => void; // no error - no code gen
9-
>v12 : Symbol(v12, Decl(collisionArgumentsInType.ts, 2, 3))
10-
>arguments : Symbol(arguments, Decl(collisionArgumentsInType.ts, 2, 10))
11-
>restParameters : Symbol(restParameters, Decl(collisionArgumentsInType.ts, 2, 28))
8+
>v12 : Symbol(v12, Decl(collisionArgumentsInType.ts, 1, 3))
9+
>arguments : Symbol(arguments, Decl(collisionArgumentsInType.ts, 1, 10))
10+
>restParameters : Symbol(restParameters, Decl(collisionArgumentsInType.ts, 1, 28))
1211

1312
var v2: {
14-
>v2 : Symbol(v2, Decl(collisionArgumentsInType.ts, 3, 3))
13+
>v2 : Symbol(v2, Decl(collisionArgumentsInType.ts, 2, 3))
1514

1615
(arguments: number, ...restParameters); // no error - no code gen
17-
>arguments : Symbol(arguments, Decl(collisionArgumentsInType.ts, 4, 5))
18-
>restParameters : Symbol(restParameters, Decl(collisionArgumentsInType.ts, 4, 23))
16+
>arguments : Symbol(arguments, Decl(collisionArgumentsInType.ts, 3, 5))
17+
>restParameters : Symbol(restParameters, Decl(collisionArgumentsInType.ts, 3, 23))
1918

2019
new (arguments: number, ...restParameters); // no error - no code gen
21-
>arguments : Symbol(arguments, Decl(collisionArgumentsInType.ts, 5, 9))
22-
>restParameters : Symbol(restParameters, Decl(collisionArgumentsInType.ts, 5, 27))
20+
>arguments : Symbol(arguments, Decl(collisionArgumentsInType.ts, 4, 9))
21+
>restParameters : Symbol(restParameters, Decl(collisionArgumentsInType.ts, 4, 27))
2322

2423
foo(arguments: number, ...restParameters); // no error - no code gen
25-
>foo : Symbol(foo, Decl(collisionArgumentsInType.ts, 5, 47))
26-
>arguments : Symbol(arguments, Decl(collisionArgumentsInType.ts, 6, 8))
27-
>restParameters : Symbol(restParameters, Decl(collisionArgumentsInType.ts, 6, 26))
24+
>foo : Symbol(foo, Decl(collisionArgumentsInType.ts, 4, 47))
25+
>arguments : Symbol(arguments, Decl(collisionArgumentsInType.ts, 5, 8))
26+
>restParameters : Symbol(restParameters, Decl(collisionArgumentsInType.ts, 5, 26))
2827

2928
prop: (arguments: number, ...restParameters) => void; // no error - no code gen
30-
>prop : Symbol(prop, Decl(collisionArgumentsInType.ts, 6, 46))
31-
>arguments : Symbol(arguments, Decl(collisionArgumentsInType.ts, 7, 11))
32-
>restParameters : Symbol(restParameters, Decl(collisionArgumentsInType.ts, 7, 29))
29+
>prop : Symbol(prop, Decl(collisionArgumentsInType.ts, 5, 46))
30+
>arguments : Symbol(arguments, Decl(collisionArgumentsInType.ts, 6, 11))
31+
>restParameters : Symbol(restParameters, Decl(collisionArgumentsInType.ts, 6, 29))
3332
}
3433
var v21: {
35-
>v21 : Symbol(v21, Decl(collisionArgumentsInType.ts, 9, 3))
34+
>v21 : Symbol(v21, Decl(collisionArgumentsInType.ts, 8, 3))
3635

3736
(i: number, ...arguments); // no error - no code gen
38-
>i : Symbol(i, Decl(collisionArgumentsInType.ts, 10, 5))
39-
>arguments : Symbol(arguments, Decl(collisionArgumentsInType.ts, 10, 15))
37+
>i : Symbol(i, Decl(collisionArgumentsInType.ts, 9, 5))
38+
>arguments : Symbol(arguments, Decl(collisionArgumentsInType.ts, 9, 15))
4039

4140
new (i: number, ...arguments); // no error - no code gen
42-
>i : Symbol(i, Decl(collisionArgumentsInType.ts, 11, 9))
43-
>arguments : Symbol(arguments, Decl(collisionArgumentsInType.ts, 11, 19))
41+
>i : Symbol(i, Decl(collisionArgumentsInType.ts, 10, 9))
42+
>arguments : Symbol(arguments, Decl(collisionArgumentsInType.ts, 10, 19))
4443

4544
foo(i: number, ...arguments); // no error - no code gen
46-
>foo : Symbol(foo, Decl(collisionArgumentsInType.ts, 11, 34))
47-
>i : Symbol(i, Decl(collisionArgumentsInType.ts, 12, 8))
48-
>arguments : Symbol(arguments, Decl(collisionArgumentsInType.ts, 12, 18))
45+
>foo : Symbol(foo, Decl(collisionArgumentsInType.ts, 10, 34))
46+
>i : Symbol(i, Decl(collisionArgumentsInType.ts, 11, 8))
47+
>arguments : Symbol(arguments, Decl(collisionArgumentsInType.ts, 11, 18))
4948

5049
prop: (i: number, ...arguments) => void; // no error - no code gen
51-
>prop : Symbol(prop, Decl(collisionArgumentsInType.ts, 12, 33))
52-
>i : Symbol(i, Decl(collisionArgumentsInType.ts, 13, 11))
53-
>arguments : Symbol(arguments, Decl(collisionArgumentsInType.ts, 13, 21))
50+
>prop : Symbol(prop, Decl(collisionArgumentsInType.ts, 11, 33))
51+
>i : Symbol(i, Decl(collisionArgumentsInType.ts, 12, 11))
52+
>arguments : Symbol(arguments, Decl(collisionArgumentsInType.ts, 12, 21))
5453
}

tests/baselines/reference/collisionArgumentsInType.types

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,4 @@
11
=== tests/cases/compiler/collisionArgumentsInType.ts ===
2-
"use strict";
3-
>"use strict" : "use strict"
4-
52
var v1: (i: number, ...arguments) => void; // no error - no code gen
63
>v1 : (i: number, ...arguments: any[]) => void
74
>i : number

tests/baselines/reference/collisionArgumentsInterfaceMembers.js

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
11
//// [collisionArgumentsInterfaceMembers.ts]
2-
"use strict";
32
// call
43
interface i1 {
54
(i: number, ...arguments); // no error - no code gen
@@ -30,4 +29,3 @@ interface i3 {
3029
}
3130

3231
//// [collisionArgumentsInterfaceMembers.js]
33-
"use strict";
Lines changed: 25 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -1,64 +1,63 @@
11
=== tests/cases/compiler/collisionArgumentsInterfaceMembers.ts ===
2-
"use strict";
32
// call
43
interface i1 {
5-
>i1 : Symbol(i1, Decl(collisionArgumentsInterfaceMembers.ts, 0, 13))
4+
>i1 : Symbol(i1, Decl(collisionArgumentsInterfaceMembers.ts, 0, 0))
65

76
(i: number, ...arguments); // no error - no code gen
8-
>i : Symbol(i, Decl(collisionArgumentsInterfaceMembers.ts, 3, 5))
9-
>arguments : Symbol(arguments, Decl(collisionArgumentsInterfaceMembers.ts, 3, 15))
7+
>i : Symbol(i, Decl(collisionArgumentsInterfaceMembers.ts, 2, 5))
8+
>arguments : Symbol(arguments, Decl(collisionArgumentsInterfaceMembers.ts, 2, 15))
109
}
1110
interface i12 {
12-
>i12 : Symbol(i12, Decl(collisionArgumentsInterfaceMembers.ts, 4, 1))
11+
>i12 : Symbol(i12, Decl(collisionArgumentsInterfaceMembers.ts, 3, 1))
1312

1413
(arguments: number, ...rest); // no error - no code gen
15-
>arguments : Symbol(arguments, Decl(collisionArgumentsInterfaceMembers.ts, 6, 5))
16-
>rest : Symbol(rest, Decl(collisionArgumentsInterfaceMembers.ts, 6, 23))
14+
>arguments : Symbol(arguments, Decl(collisionArgumentsInterfaceMembers.ts, 5, 5))
15+
>rest : Symbol(rest, Decl(collisionArgumentsInterfaceMembers.ts, 5, 23))
1716
}
1817
interface i1NoError {
19-
>i1NoError : Symbol(i1NoError, Decl(collisionArgumentsInterfaceMembers.ts, 7, 1))
18+
>i1NoError : Symbol(i1NoError, Decl(collisionArgumentsInterfaceMembers.ts, 6, 1))
2019

2120
(arguments: number); // no error
22-
>arguments : Symbol(arguments, Decl(collisionArgumentsInterfaceMembers.ts, 9, 5))
21+
>arguments : Symbol(arguments, Decl(collisionArgumentsInterfaceMembers.ts, 8, 5))
2322
}
2423

2524
// new
2625
interface i2 {
27-
>i2 : Symbol(i2, Decl(collisionArgumentsInterfaceMembers.ts, 10, 1))
26+
>i2 : Symbol(i2, Decl(collisionArgumentsInterfaceMembers.ts, 9, 1))
2827

2928
new (i: number, ...arguments); // no error - no code gen
30-
>i : Symbol(i, Decl(collisionArgumentsInterfaceMembers.ts, 14, 9))
31-
>arguments : Symbol(arguments, Decl(collisionArgumentsInterfaceMembers.ts, 14, 19))
29+
>i : Symbol(i, Decl(collisionArgumentsInterfaceMembers.ts, 13, 9))
30+
>arguments : Symbol(arguments, Decl(collisionArgumentsInterfaceMembers.ts, 13, 19))
3231
}
3332
interface i21 {
34-
>i21 : Symbol(i21, Decl(collisionArgumentsInterfaceMembers.ts, 15, 1))
33+
>i21 : Symbol(i21, Decl(collisionArgumentsInterfaceMembers.ts, 14, 1))
3534

3635
new (arguments: number, ...rest); // no error - no code gen
37-
>arguments : Symbol(arguments, Decl(collisionArgumentsInterfaceMembers.ts, 17, 9))
38-
>rest : Symbol(rest, Decl(collisionArgumentsInterfaceMembers.ts, 17, 27))
36+
>arguments : Symbol(arguments, Decl(collisionArgumentsInterfaceMembers.ts, 16, 9))
37+
>rest : Symbol(rest, Decl(collisionArgumentsInterfaceMembers.ts, 16, 27))
3938
}
4039
interface i2NoError {
41-
>i2NoError : Symbol(i2NoError, Decl(collisionArgumentsInterfaceMembers.ts, 18, 1))
40+
>i2NoError : Symbol(i2NoError, Decl(collisionArgumentsInterfaceMembers.ts, 17, 1))
4241

4342
new (arguments: number); // no error
44-
>arguments : Symbol(arguments, Decl(collisionArgumentsInterfaceMembers.ts, 20, 9))
43+
>arguments : Symbol(arguments, Decl(collisionArgumentsInterfaceMembers.ts, 19, 9))
4544
}
4645

4746
// method
4847
interface i3 {
49-
>i3 : Symbol(i3, Decl(collisionArgumentsInterfaceMembers.ts, 21, 1))
48+
>i3 : Symbol(i3, Decl(collisionArgumentsInterfaceMembers.ts, 20, 1))
5049

5150
foo(i: number, ...arguments); // no error - no code gen
52-
>foo : Symbol(i3.foo, Decl(collisionArgumentsInterfaceMembers.ts, 24, 14))
53-
>i : Symbol(i, Decl(collisionArgumentsInterfaceMembers.ts, 25, 8))
54-
>arguments : Symbol(arguments, Decl(collisionArgumentsInterfaceMembers.ts, 25, 18))
51+
>foo : Symbol(i3.foo, Decl(collisionArgumentsInterfaceMembers.ts, 23, 14))
52+
>i : Symbol(i, Decl(collisionArgumentsInterfaceMembers.ts, 24, 8))
53+
>arguments : Symbol(arguments, Decl(collisionArgumentsInterfaceMembers.ts, 24, 18))
5554

5655
foo1(arguments: number, ...rest); // no error - no code gen
57-
>foo1 : Symbol(i3.foo1, Decl(collisionArgumentsInterfaceMembers.ts, 25, 33))
58-
>arguments : Symbol(arguments, Decl(collisionArgumentsInterfaceMembers.ts, 26, 9))
59-
>rest : Symbol(rest, Decl(collisionArgumentsInterfaceMembers.ts, 26, 27))
56+
>foo1 : Symbol(i3.foo1, Decl(collisionArgumentsInterfaceMembers.ts, 24, 33))
57+
>arguments : Symbol(arguments, Decl(collisionArgumentsInterfaceMembers.ts, 25, 9))
58+
>rest : Symbol(rest, Decl(collisionArgumentsInterfaceMembers.ts, 25, 27))
6059

6160
fooNoError(arguments: number); // no error
62-
>fooNoError : Symbol(i3.fooNoError, Decl(collisionArgumentsInterfaceMembers.ts, 26, 37))
63-
>arguments : Symbol(arguments, Decl(collisionArgumentsInterfaceMembers.ts, 27, 15))
61+
>fooNoError : Symbol(i3.fooNoError, Decl(collisionArgumentsInterfaceMembers.ts, 25, 37))
62+
>arguments : Symbol(arguments, Decl(collisionArgumentsInterfaceMembers.ts, 26, 15))
6463
}

tests/baselines/reference/collisionArgumentsInterfaceMembers.types

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,4 @@
11
=== tests/cases/compiler/collisionArgumentsInterfaceMembers.ts ===
2-
"use strict";
3-
>"use strict" : "use strict"
4-
52
// call
63
interface i1 {
74
>i1 : i1

tests/cases/compiler/collisionArgumentsFunction.ts

Lines changed: 6 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -36,12 +36,9 @@ function f4NoError(arguments: any) { // no error
3636
var arguments: any; // No error
3737
}
3838

39-
namespace strict {
40-
"use strict";
41-
declare function f5(arguments: number, ...rest); // no codegen no error
42-
declare function f5(arguments: string, ...rest); // no codegen no error
43-
declare function f52(i: number, ...arguments); // no codegen no error
44-
declare function f52(i: string, ...arguments); // no codegen no error
45-
declare function f6(arguments: number); // no codegen no error
46-
declare function f6(arguments: string); // no codegen no error
47-
}
39+
declare function f5(arguments: number, ...rest); // no codegen no error
40+
declare function f5(arguments: string, ...rest); // no codegen no error
41+
declare function f52(i: number, ...arguments); // no codegen no error
42+
declare function f52(i: string, ...arguments); // no codegen no error
43+
declare function f6(arguments: number); // no codegen no error
44+
declare function f6(arguments: string); // no codegen no error

0 commit comments

Comments
 (0)