Skip to content

Commit c828bcb

Browse files
committed
addressed PR feedback
1 parent 546330e commit c828bcb

13 files changed

+359
-8
lines changed

src/compiler/emitter.ts

Lines changed: 11 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -4377,15 +4377,18 @@ var __param = (this && this.__param) || function (paramIndex, decorator) {
43774377
return;
43784378
}
43794379

4380-
if (!(node.flags & NodeFlags.Export) || isES6ExportedDeclaration(node)) {
4381-
emitStart(node);
4382-
if (isES6ExportedDeclaration(node)) {
4383-
write("export ");
4380+
if (!shouldHoistDeclarationInSystemJsModule(node)) {
4381+
// do not emit var if variable was already hoisted
4382+
if (!(node.flags & NodeFlags.Export) || isES6ExportedDeclaration(node)) {
4383+
emitStart(node);
4384+
if (isES6ExportedDeclaration(node)) {
4385+
write("export ");
4386+
}
4387+
write("var ");
4388+
emit(node.name);
4389+
emitEnd(node);
4390+
write(";");
43844391
}
4385-
write("var ");
4386-
emit(node.name);
4387-
emitEnd(node);
4388-
write(";");
43894392
}
43904393
writeLine();
43914394
emitStart(node);
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
//// [systemModuleConstEnums.ts]
2+
3+
declare function use(a: any);
4+
const enum TopLevelConstEnum { X }
5+
6+
export function foo() {
7+
use(TopLevelConstEnum.X);
8+
use(M.NonTopLevelConstEnum.X);
9+
}
10+
11+
module M {
12+
export const enum NonTopLevelConstEnum { X }
13+
}
14+
15+
//// [systemModuleConstEnums.js]
16+
System.register([], function(exports_1) {
17+
function foo() {
18+
use(0 /* X */);
19+
use(0 /* X */);
20+
}
21+
exports_1("foo", foo);
22+
return {
23+
setters:[],
24+
execute: function() {
25+
}
26+
}
27+
});
Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
=== tests/cases/compiler/systemModuleConstEnums.ts ===
2+
3+
declare function use(a: any);
4+
>use : Symbol(use, Decl(systemModuleConstEnums.ts, 0, 0))
5+
>a : Symbol(a, Decl(systemModuleConstEnums.ts, 1, 21))
6+
7+
const enum TopLevelConstEnum { X }
8+
>TopLevelConstEnum : Symbol(TopLevelConstEnum, Decl(systemModuleConstEnums.ts, 1, 29))
9+
>X : Symbol(TopLevelConstEnum.X, Decl(systemModuleConstEnums.ts, 2, 30))
10+
11+
export function foo() {
12+
>foo : Symbol(foo, Decl(systemModuleConstEnums.ts, 2, 34))
13+
14+
use(TopLevelConstEnum.X);
15+
>use : Symbol(use, Decl(systemModuleConstEnums.ts, 0, 0))
16+
>TopLevelConstEnum.X : Symbol(TopLevelConstEnum.X, Decl(systemModuleConstEnums.ts, 2, 30))
17+
>TopLevelConstEnum : Symbol(TopLevelConstEnum, Decl(systemModuleConstEnums.ts, 1, 29))
18+
>X : Symbol(TopLevelConstEnum.X, Decl(systemModuleConstEnums.ts, 2, 30))
19+
20+
use(M.NonTopLevelConstEnum.X);
21+
>use : Symbol(use, Decl(systemModuleConstEnums.ts, 0, 0))
22+
>M.NonTopLevelConstEnum.X : Symbol(M.NonTopLevelConstEnum.X, Decl(systemModuleConstEnums.ts, 10, 44))
23+
>M.NonTopLevelConstEnum : Symbol(M.NonTopLevelConstEnum, Decl(systemModuleConstEnums.ts, 9, 10))
24+
>M : Symbol(M, Decl(systemModuleConstEnums.ts, 7, 1))
25+
>NonTopLevelConstEnum : Symbol(M.NonTopLevelConstEnum, Decl(systemModuleConstEnums.ts, 9, 10))
26+
>X : Symbol(M.NonTopLevelConstEnum.X, Decl(systemModuleConstEnums.ts, 10, 44))
27+
}
28+
29+
module M {
30+
>M : Symbol(M, Decl(systemModuleConstEnums.ts, 7, 1))
31+
32+
export const enum NonTopLevelConstEnum { X }
33+
>NonTopLevelConstEnum : Symbol(NonTopLevelConstEnum, Decl(systemModuleConstEnums.ts, 9, 10))
34+
>X : Symbol(NonTopLevelConstEnum.X, Decl(systemModuleConstEnums.ts, 10, 44))
35+
}
Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
=== tests/cases/compiler/systemModuleConstEnums.ts ===
2+
3+
declare function use(a: any);
4+
>use : (a: any) => any
5+
>a : any
6+
7+
const enum TopLevelConstEnum { X }
8+
>TopLevelConstEnum : TopLevelConstEnum
9+
>X : TopLevelConstEnum
10+
11+
export function foo() {
12+
>foo : () => void
13+
14+
use(TopLevelConstEnum.X);
15+
>use(TopLevelConstEnum.X) : any
16+
>use : (a: any) => any
17+
>TopLevelConstEnum.X : TopLevelConstEnum
18+
>TopLevelConstEnum : typeof TopLevelConstEnum
19+
>X : TopLevelConstEnum
20+
21+
use(M.NonTopLevelConstEnum.X);
22+
>use(M.NonTopLevelConstEnum.X) : any
23+
>use : (a: any) => any
24+
>M.NonTopLevelConstEnum.X : M.NonTopLevelConstEnum
25+
>M.NonTopLevelConstEnum : typeof M.NonTopLevelConstEnum
26+
>M : typeof M
27+
>NonTopLevelConstEnum : typeof M.NonTopLevelConstEnum
28+
>X : M.NonTopLevelConstEnum
29+
}
30+
31+
module M {
32+
>M : typeof M
33+
34+
export const enum NonTopLevelConstEnum { X }
35+
>NonTopLevelConstEnum : NonTopLevelConstEnum
36+
>X : NonTopLevelConstEnum
37+
}
Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
//// [systemModuleConstEnumsSeparateCompilation.ts]
2+
3+
declare function use(a: any);
4+
const enum TopLevelConstEnum { X }
5+
6+
export function foo() {
7+
use(TopLevelConstEnum.X);
8+
use(M.NonTopLevelConstEnum.X);
9+
}
10+
11+
module M {
12+
export const enum NonTopLevelConstEnum { X }
13+
}
14+
15+
//// [systemModuleConstEnumsSeparateCompilation.js]
16+
System.register([], function(exports_1) {
17+
var TopLevelConstEnum, M;
18+
function foo() {
19+
use(TopLevelConstEnum.X);
20+
use(M.NonTopLevelConstEnum.X);
21+
}
22+
exports_1("foo", foo);
23+
return {
24+
setters:[],
25+
execute: function() {
26+
(function (TopLevelConstEnum) {
27+
TopLevelConstEnum[TopLevelConstEnum["X"] = 0] = "X";
28+
})(TopLevelConstEnum || (TopLevelConstEnum = {}));
29+
(function (M) {
30+
(function (NonTopLevelConstEnum) {
31+
NonTopLevelConstEnum[NonTopLevelConstEnum["X"] = 0] = "X";
32+
})(M.NonTopLevelConstEnum || (M.NonTopLevelConstEnum = {}));
33+
var NonTopLevelConstEnum = M.NonTopLevelConstEnum;
34+
})(M || (M = {}));
35+
}
36+
}
37+
});
Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
=== tests/cases/compiler/systemModuleConstEnumsSeparateCompilation.ts ===
2+
3+
declare function use(a: any);
4+
>use : Symbol(use, Decl(systemModuleConstEnumsSeparateCompilation.ts, 0, 0))
5+
>a : Symbol(a, Decl(systemModuleConstEnumsSeparateCompilation.ts, 1, 21))
6+
7+
const enum TopLevelConstEnum { X }
8+
>TopLevelConstEnum : Symbol(TopLevelConstEnum, Decl(systemModuleConstEnumsSeparateCompilation.ts, 1, 29))
9+
>X : Symbol(TopLevelConstEnum.X, Decl(systemModuleConstEnumsSeparateCompilation.ts, 2, 30))
10+
11+
export function foo() {
12+
>foo : Symbol(foo, Decl(systemModuleConstEnumsSeparateCompilation.ts, 2, 34))
13+
14+
use(TopLevelConstEnum.X);
15+
>use : Symbol(use, Decl(systemModuleConstEnumsSeparateCompilation.ts, 0, 0))
16+
>TopLevelConstEnum.X : Symbol(TopLevelConstEnum.X, Decl(systemModuleConstEnumsSeparateCompilation.ts, 2, 30))
17+
>TopLevelConstEnum : Symbol(TopLevelConstEnum, Decl(systemModuleConstEnumsSeparateCompilation.ts, 1, 29))
18+
>X : Symbol(TopLevelConstEnum.X, Decl(systemModuleConstEnumsSeparateCompilation.ts, 2, 30))
19+
20+
use(M.NonTopLevelConstEnum.X);
21+
>use : Symbol(use, Decl(systemModuleConstEnumsSeparateCompilation.ts, 0, 0))
22+
>M.NonTopLevelConstEnum.X : Symbol(M.NonTopLevelConstEnum.X, Decl(systemModuleConstEnumsSeparateCompilation.ts, 10, 44))
23+
>M.NonTopLevelConstEnum : Symbol(M.NonTopLevelConstEnum, Decl(systemModuleConstEnumsSeparateCompilation.ts, 9, 10))
24+
>M : Symbol(M, Decl(systemModuleConstEnumsSeparateCompilation.ts, 7, 1))
25+
>NonTopLevelConstEnum : Symbol(M.NonTopLevelConstEnum, Decl(systemModuleConstEnumsSeparateCompilation.ts, 9, 10))
26+
>X : Symbol(M.NonTopLevelConstEnum.X, Decl(systemModuleConstEnumsSeparateCompilation.ts, 10, 44))
27+
}
28+
29+
module M {
30+
>M : Symbol(M, Decl(systemModuleConstEnumsSeparateCompilation.ts, 7, 1))
31+
32+
export const enum NonTopLevelConstEnum { X }
33+
>NonTopLevelConstEnum : Symbol(NonTopLevelConstEnum, Decl(systemModuleConstEnumsSeparateCompilation.ts, 9, 10))
34+
>X : Symbol(NonTopLevelConstEnum.X, Decl(systemModuleConstEnumsSeparateCompilation.ts, 10, 44))
35+
}
Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
=== tests/cases/compiler/systemModuleConstEnumsSeparateCompilation.ts ===
2+
3+
declare function use(a: any);
4+
>use : (a: any) => any
5+
>a : any
6+
7+
const enum TopLevelConstEnum { X }
8+
>TopLevelConstEnum : TopLevelConstEnum
9+
>X : TopLevelConstEnum
10+
11+
export function foo() {
12+
>foo : () => void
13+
14+
use(TopLevelConstEnum.X);
15+
>use(TopLevelConstEnum.X) : any
16+
>use : (a: any) => any
17+
>TopLevelConstEnum.X : TopLevelConstEnum
18+
>TopLevelConstEnum : typeof TopLevelConstEnum
19+
>X : TopLevelConstEnum
20+
21+
use(M.NonTopLevelConstEnum.X);
22+
>use(M.NonTopLevelConstEnum.X) : any
23+
>use : (a: any) => any
24+
>M.NonTopLevelConstEnum.X : M.NonTopLevelConstEnum
25+
>M.NonTopLevelConstEnum : typeof M.NonTopLevelConstEnum
26+
>M : typeof M
27+
>NonTopLevelConstEnum : typeof M.NonTopLevelConstEnum
28+
>X : M.NonTopLevelConstEnum
29+
}
30+
31+
module M {
32+
>M : typeof M
33+
34+
export const enum NonTopLevelConstEnum { X }
35+
>NonTopLevelConstEnum : NonTopLevelConstEnum
36+
>X : NonTopLevelConstEnum
37+
}
Lines changed: 67 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,67 @@
1+
//// [tests/cases/compiler/systemModuleExportDefault.ts] ////
2+
3+
//// [file1.ts]
4+
5+
export default function() {}
6+
7+
//// [file2.ts]
8+
export default function foo() {}
9+
10+
//// [file3.ts]
11+
export default class {}
12+
13+
//// [file4.ts]
14+
export default class C {}
15+
16+
17+
18+
//// [file1.js]
19+
System.register([], function(exports_1) {
20+
function default_1() { }
21+
exports_1("default", default_1);
22+
return {
23+
setters:[],
24+
execute: function() {
25+
}
26+
}
27+
});
28+
//// [file2.js]
29+
System.register([], function(exports_1) {
30+
function foo() { }
31+
exports_1("default", foo);
32+
return {
33+
setters:[],
34+
execute: function() {
35+
}
36+
}
37+
});
38+
//// [file3.js]
39+
System.register([], function(exports_1) {
40+
var default_1;
41+
return {
42+
setters:[],
43+
execute: function() {
44+
default_1 = (function () {
45+
function default_1() {
46+
}
47+
return default_1;
48+
})();
49+
exports_1("default", default_1);
50+
}
51+
}
52+
});
53+
//// [file4.js]
54+
System.register([], function(exports_1) {
55+
var C;
56+
return {
57+
setters:[],
58+
execute: function() {
59+
C = (function () {
60+
function C() {
61+
}
62+
return C;
63+
})();
64+
exports_1("default", C);
65+
}
66+
}
67+
});
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
=== tests/cases/compiler/file1.ts ===
2+
3+
No type information for this code.export default function() {}
4+
No type information for this code.
5+
No type information for this code.=== tests/cases/compiler/file2.ts ===
6+
export default function foo() {}
7+
>foo : Symbol(foo, Decl(file2.ts, 0, 0))
8+
9+
=== tests/cases/compiler/file3.ts ===
10+
export default class {}
11+
No type information for this code.
12+
No type information for this code.=== tests/cases/compiler/file4.ts ===
13+
export default class C {}
14+
>C : Symbol(C, Decl(file4.ts, 0, 0))
15+
16+
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
=== tests/cases/compiler/file1.ts ===
2+
3+
No type information for this code.export default function() {}
4+
No type information for this code.
5+
No type information for this code.=== tests/cases/compiler/file2.ts ===
6+
export default function foo() {}
7+
>foo : () => void
8+
9+
=== tests/cases/compiler/file3.ts ===
10+
export default class {}
11+
No type information for this code.
12+
No type information for this code.=== tests/cases/compiler/file4.ts ===
13+
export default class C {}
14+
>C : C
15+
16+

0 commit comments

Comments
 (0)