Skip to content

Commit 3d23b9c

Browse files
authored
Merge pull request #15423 from Microsoft/fix15403
Fix block-scoped enum declarations
2 parents aa11ab1 + 324c9bb commit 3d23b9c

9 files changed

+24
-22
lines changed

src/compiler/transformers/ts.ts

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2601,14 +2601,16 @@ namespace ts {
26012601
* Adds a leading VariableStatement for a enum or module declaration.
26022602
*/
26032603
function addVarForEnumOrModuleDeclaration(statements: Statement[], node: ModuleDeclaration | EnumDeclaration) {
2604-
// Emit a variable statement for the module.
2604+
// Emit a variable statement for the module. We emit top-level enums as a `var`
2605+
// declaration to avoid static errors in global scripts scripts due to redeclaration.
2606+
// enums in any other scope are emitted as a `let` declaration.
26052607
const statement = createVariableStatement(
26062608
visitNodes(node.modifiers, modifierVisitor, isModifier),
2607-
[
2609+
createVariableDeclarationList([
26082610
createVariableDeclaration(
26092611
getLocalName(node, /*allowComments*/ false, /*allowSourceMaps*/ true)
26102612
)
2611-
]
2613+
], currentScope.kind === SyntaxKind.SourceFile ? NodeFlags.None : NodeFlags.Let)
26122614
);
26132615

26142616
setOriginalNode(statement, node);

tests/baselines/reference/ClassAndModuleWithSameNameAndCommonRootES6.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -59,7 +59,7 @@ var X;
5959
(function (X) {
6060
var Y;
6161
(function (Y) {
62-
var Point;
62+
let Point;
6363
(function (Point) {
6464
Point.Origin = new Point(0, 0);
6565
})(Point = Y.Point || (Y.Point = {}));

tests/baselines/reference/errorRecoveryWithDotFollowedByNamespaceKeyword.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ var A;
1616
if (true) {
1717
B.
1818
;
19-
var B;
19+
var B = void 0;
2020
(function (B) {
2121
function baz() { }
2222
B.baz = baz;

tests/baselines/reference/es6ModuleConstEnumDeclaration2.js

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -62,13 +62,13 @@ var x = 0 /* a */;
6262
var y = 0 /* x */;
6363
export var m1;
6464
(function (m1) {
65-
var e3;
65+
let e3;
6666
(function (e3) {
6767
e3[e3["a"] = 0] = "a";
6868
e3[e3["b"] = 1] = "b";
6969
e3[e3["c"] = 2] = "c";
7070
})(e3 = m1.e3 || (m1.e3 = {}));
71-
var e4;
71+
let e4;
7272
(function (e4) {
7373
e4[e4["x"] = 0] = "x";
7474
e4[e4["y"] = 1] = "y";
@@ -81,13 +81,13 @@ export var m1;
8181
})(m1 || (m1 = {}));
8282
var m2;
8383
(function (m2) {
84-
var e5;
84+
let e5;
8585
(function (e5) {
8686
e5[e5["a"] = 0] = "a";
8787
e5[e5["b"] = 1] = "b";
8888
e5[e5["c"] = 2] = "c";
8989
})(e5 = m2.e5 || (m2.e5 = {}));
90-
var e6;
90+
let e6;
9191
(function (e6) {
9292
e6[e6["x"] = 0] = "x";
9393
e6[e6["y"] = 1] = "y";

tests/baselines/reference/es6ModuleEnumDeclaration.js

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -62,13 +62,13 @@ var x = e1.a;
6262
var y = e2.x;
6363
export var m1;
6464
(function (m1) {
65-
var e3;
65+
let e3;
6666
(function (e3) {
6767
e3[e3["a"] = 0] = "a";
6868
e3[e3["b"] = 1] = "b";
6969
e3[e3["c"] = 2] = "c";
7070
})(e3 = m1.e3 || (m1.e3 = {}));
71-
var e4;
71+
let e4;
7272
(function (e4) {
7373
e4[e4["x"] = 0] = "x";
7474
e4[e4["y"] = 1] = "y";
@@ -81,13 +81,13 @@ export var m1;
8181
})(m1 || (m1 = {}));
8282
var m2;
8383
(function (m2) {
84-
var e5;
84+
let e5;
8585
(function (e5) {
8686
e5[e5["a"] = 0] = "a";
8787
e5[e5["b"] = 1] = "b";
8888
e5[e5["c"] = 2] = "c";
8989
})(e5 = m2.e5 || (m2.e5 = {}));
90-
var e6;
90+
let e6;
9191
(function (e6) {
9292
e6[e6["x"] = 0] = "x";
9393
e6[e6["y"] = 1] = "y";

tests/baselines/reference/es6ModuleInternalNamedImports.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -41,15 +41,15 @@ export var M;
4141
}
4242
M.M_C = M_C;
4343
// instantiated module
44-
var M_M;
44+
let M_M;
4545
(function (M_M) {
4646
var x;
4747
})(M_M = M.M_M || (M.M_M = {}));
4848
// function
4949
function M_F() { }
5050
M.M_F = M_F;
5151
// enum
52-
var M_E;
52+
let M_E;
5353
(function (M_E) {
5454
})(M_E = M.M_E || (M.M_E = {}));
5555
// alias

tests/baselines/reference/es6ModuleInternalNamedImports2.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -43,15 +43,15 @@ export var M;
4343
}
4444
M.M_C = M_C;
4545
// instantiated module
46-
var M_M;
46+
let M_M;
4747
(function (M_M) {
4848
var x;
4949
})(M_M = M.M_M || (M.M_M = {}));
5050
// function
5151
function M_F() { }
5252
M.M_F = M_F;
5353
// enum
54-
var M_E;
54+
let M_E;
5555
(function (M_E) {
5656
})(M_E = M.M_E || (M.M_E = {}));
5757
// alias

tests/baselines/reference/es6ModuleModuleDeclaration.js

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -29,12 +29,12 @@ export var m1;
2929
(function (m1) {
3030
m1.a = 10;
3131
var b = 10;
32-
var innerExportedModule;
32+
let innerExportedModule;
3333
(function (innerExportedModule) {
3434
innerExportedModule.k = 10;
3535
var l = 10;
3636
})(innerExportedModule = m1.innerExportedModule || (m1.innerExportedModule = {}));
37-
var innerNonExportedModule;
37+
let innerNonExportedModule;
3838
(function (innerNonExportedModule) {
3939
innerNonExportedModule.x = 10;
4040
var y = 10;
@@ -44,12 +44,12 @@ var m2;
4444
(function (m2) {
4545
m2.a = 10;
4646
var b = 10;
47-
var innerExportedModule;
47+
let innerExportedModule;
4848
(function (innerExportedModule) {
4949
innerExportedModule.k = 10;
5050
var l = 10;
5151
})(innerExportedModule = m2.innerExportedModule || (m2.innerExportedModule = {}));
52-
var innerNonExportedModule;
52+
let innerNonExportedModule;
5353
(function (innerNonExportedModule) {
5454
innerNonExportedModule.x = 10;
5555
var y = 10;

tests/baselines/reference/localTypes1.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -188,7 +188,7 @@ function f2() {
188188
}
189189
function f3(b) {
190190
if (true) {
191-
var E;
191+
var E = void 0;
192192
(function (E) {
193193
E[E["A"] = 0] = "A";
194194
E[E["B"] = 1] = "B";

0 commit comments

Comments
 (0)