Skip to content

Commit dcbfa69

Browse files
Modules are always in strict mode in ES6.
1 parent 417cfa5 commit dcbfa69

9 files changed

+48
-68
lines changed

src/compiler/binder.ts

+5-1
Original file line numberDiff line numberDiff line change
@@ -88,7 +88,11 @@ namespace ts {
8888
let container: Node;
8989
let blockScopeContainer: Node;
9090
let lastContainer: Node;
91-
let inStrictMode = false;
91+
92+
// If this file is an external module, then it is automatically in strict-mode according to
93+
// ES6. If it is not an external module, then we'll determine if it is in strict mode or
94+
// not depending on if we see "use strict" in certain places.
95+
let inStrictMode = !!file.externalModuleIndicator;
9296

9397
let symbolCount = 0;
9498
let Symbol = objectAllocator.getSymbolConstructor();

tests/baselines/reference/exportNonInitializedVariablesAMD.errors.txt

+4-1
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,18 @@
11
tests/cases/conformance/externalModules/exportNonInitializedVariablesAMD.ts(2,4): error TS1123: Variable declaration list cannot be empty.
2+
tests/cases/conformance/externalModules/exportNonInitializedVariablesAMD.ts(3,1): error TS1212: Identifier expected. 'let' is a reserved word in strict mode
23
tests/cases/conformance/externalModules/exportNonInitializedVariablesAMD.ts(3,1): error TS2304: Cannot find name 'let'.
34
tests/cases/conformance/externalModules/exportNonInitializedVariablesAMD.ts(4,6): error TS1123: Variable declaration list cannot be empty.
45

56

6-
==== tests/cases/conformance/externalModules/exportNonInitializedVariablesAMD.ts (3 errors) ====
7+
==== tests/cases/conformance/externalModules/exportNonInitializedVariablesAMD.ts (4 errors) ====
78

89
var;
910

1011
!!! error TS1123: Variable declaration list cannot be empty.
1112
let;
1213
~~~
14+
!!! error TS1212: Identifier expected. 'let' is a reserved word in strict mode
15+
~~~
1316
!!! error TS2304: Cannot find name 'let'.
1417
const;
1518

tests/baselines/reference/exportNonInitializedVariablesCommonJS.errors.txt

+4-1
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,18 @@
11
tests/cases/conformance/externalModules/exportNonInitializedVariablesCommonJS.ts(2,4): error TS1123: Variable declaration list cannot be empty.
2+
tests/cases/conformance/externalModules/exportNonInitializedVariablesCommonJS.ts(3,1): error TS1212: Identifier expected. 'let' is a reserved word in strict mode
23
tests/cases/conformance/externalModules/exportNonInitializedVariablesCommonJS.ts(3,1): error TS2304: Cannot find name 'let'.
34
tests/cases/conformance/externalModules/exportNonInitializedVariablesCommonJS.ts(4,6): error TS1123: Variable declaration list cannot be empty.
45

56

6-
==== tests/cases/conformance/externalModules/exportNonInitializedVariablesCommonJS.ts (3 errors) ====
7+
==== tests/cases/conformance/externalModules/exportNonInitializedVariablesCommonJS.ts (4 errors) ====
78

89
var;
910

1011
!!! error TS1123: Variable declaration list cannot be empty.
1112
let;
1213
~~~
14+
!!! error TS1212: Identifier expected. 'let' is a reserved word in strict mode
15+
~~~
1316
!!! error TS2304: Cannot find name 'let'.
1417
const;
1518

tests/baselines/reference/exportNonInitializedVariablesES6.errors.txt

+4-1
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,18 @@
11
tests/cases/conformance/externalModules/exportNonInitializedVariablesES6.ts(2,4): error TS1123: Variable declaration list cannot be empty.
2+
tests/cases/conformance/externalModules/exportNonInitializedVariablesES6.ts(3,1): error TS1212: Identifier expected. 'let' is a reserved word in strict mode
23
tests/cases/conformance/externalModules/exportNonInitializedVariablesES6.ts(3,1): error TS2304: Cannot find name 'let'.
34
tests/cases/conformance/externalModules/exportNonInitializedVariablesES6.ts(4,6): error TS1123: Variable declaration list cannot be empty.
45

56

6-
==== tests/cases/conformance/externalModules/exportNonInitializedVariablesES6.ts (3 errors) ====
7+
==== tests/cases/conformance/externalModules/exportNonInitializedVariablesES6.ts (4 errors) ====
78

89
var;
910

1011
!!! error TS1123: Variable declaration list cannot be empty.
1112
let;
1213
~~~
14+
!!! error TS1212: Identifier expected. 'let' is a reserved word in strict mode
15+
~~~
1316
!!! error TS2304: Cannot find name 'let'.
1417
const;
1518

tests/baselines/reference/exportNonInitializedVariablesSystem.errors.txt

+4-1
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,18 @@
11
tests/cases/conformance/externalModules/exportNonInitializedVariablesSystem.ts(2,4): error TS1123: Variable declaration list cannot be empty.
2+
tests/cases/conformance/externalModules/exportNonInitializedVariablesSystem.ts(3,1): error TS1212: Identifier expected. 'let' is a reserved word in strict mode
23
tests/cases/conformance/externalModules/exportNonInitializedVariablesSystem.ts(3,1): error TS2304: Cannot find name 'let'.
34
tests/cases/conformance/externalModules/exportNonInitializedVariablesSystem.ts(4,6): error TS1123: Variable declaration list cannot be empty.
45

56

6-
==== tests/cases/conformance/externalModules/exportNonInitializedVariablesSystem.ts (3 errors) ====
7+
==== tests/cases/conformance/externalModules/exportNonInitializedVariablesSystem.ts (4 errors) ====
78

89
var;
910

1011
!!! error TS1123: Variable declaration list cannot be empty.
1112
let;
1213
~~~
14+
!!! error TS1212: Identifier expected. 'let' is a reserved word in strict mode
15+
~~~
1316
!!! error TS2304: Cannot find name 'let'.
1417
const;
1518

tests/baselines/reference/exportNonInitializedVariablesUMD.errors.txt

+4-1
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,18 @@
11
tests/cases/conformance/externalModules/exportNonInitializedVariablesUMD.ts(2,4): error TS1123: Variable declaration list cannot be empty.
2+
tests/cases/conformance/externalModules/exportNonInitializedVariablesUMD.ts(3,1): error TS1212: Identifier expected. 'let' is a reserved word in strict mode
23
tests/cases/conformance/externalModules/exportNonInitializedVariablesUMD.ts(3,1): error TS2304: Cannot find name 'let'.
34
tests/cases/conformance/externalModules/exportNonInitializedVariablesUMD.ts(4,6): error TS1123: Variable declaration list cannot be empty.
45

56

6-
==== tests/cases/conformance/externalModules/exportNonInitializedVariablesUMD.ts (3 errors) ====
7+
==== tests/cases/conformance/externalModules/exportNonInitializedVariablesUMD.ts (4 errors) ====
78

89
var;
910

1011
!!! error TS1123: Variable declaration list cannot be empty.
1112
let;
1213
~~~
14+
!!! error TS1212: Identifier expected. 'let' is a reserved word in strict mode
15+
~~~
1316
!!! error TS2304: Cannot find name 'let'.
1417
const;
1518

Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
tests/cases/conformance/es6/modules/t3.ts(1,17): error TS1212: Identifier expected. 'yield' is a reserved word in strict mode
2+
3+
4+
==== tests/cases/conformance/es6/modules/t1.ts (0 errors) ====
5+
6+
let set = {
7+
set foo(x: number) {
8+
}
9+
}
10+
let get = 10;
11+
12+
export { set, get };
13+
14+
==== tests/cases/conformance/es6/modules/t2.ts (0 errors) ====
15+
import * as set from "./t1";
16+
17+
==== tests/cases/conformance/es6/modules/t3.ts (1 errors) ====
18+
import { set as yield } from "./t1";
19+
~~~~~
20+
!!! error TS1212: Identifier expected. 'yield' is a reserved word in strict mode
21+
22+
==== tests/cases/conformance/es6/modules/t4.ts (0 errors) ====
23+
import { get } from "./t1";

tests/baselines/reference/exportsAndImportsWithContextualKeywordNames01.symbols

-30
This file was deleted.

tests/baselines/reference/exportsAndImportsWithContextualKeywordNames01.types

-32
This file was deleted.

0 commit comments

Comments
 (0)