addressed PR feedback

This commit is contained in:
Vladimir Matveev
2015-05-11 14:17:34 -07:00
parent 546330ed7d
commit c828bcb0c7
13 changed files with 359 additions and 8 deletions

View File

@@ -4377,15 +4377,18 @@ var __param = (this && this.__param) || function (paramIndex, decorator) {
return;
}
if (!(node.flags & NodeFlags.Export) || isES6ExportedDeclaration(node)) {
emitStart(node);
if (isES6ExportedDeclaration(node)) {
write("export ");
if (!shouldHoistDeclarationInSystemJsModule(node)) {
// do not emit var if variable was already hoisted
if (!(node.flags & NodeFlags.Export) || isES6ExportedDeclaration(node)) {
emitStart(node);
if (isES6ExportedDeclaration(node)) {
write("export ");
}
write("var ");
emit(node.name);
emitEnd(node);
write(";");
}
write("var ");
emit(node.name);
emitEnd(node);
write(";");
}
writeLine();
emitStart(node);

View File

@@ -0,0 +1,27 @@
//// [systemModuleConstEnums.ts]
declare function use(a: any);
const enum TopLevelConstEnum { X }
export function foo() {
use(TopLevelConstEnum.X);
use(M.NonTopLevelConstEnum.X);
}
module M {
export const enum NonTopLevelConstEnum { X }
}
//// [systemModuleConstEnums.js]
System.register([], function(exports_1) {
function foo() {
use(0 /* X */);
use(0 /* X */);
}
exports_1("foo", foo);
return {
setters:[],
execute: function() {
}
}
});

View File

@@ -0,0 +1,35 @@
=== tests/cases/compiler/systemModuleConstEnums.ts ===
declare function use(a: any);
>use : Symbol(use, Decl(systemModuleConstEnums.ts, 0, 0))
>a : Symbol(a, Decl(systemModuleConstEnums.ts, 1, 21))
const enum TopLevelConstEnum { X }
>TopLevelConstEnum : Symbol(TopLevelConstEnum, Decl(systemModuleConstEnums.ts, 1, 29))
>X : Symbol(TopLevelConstEnum.X, Decl(systemModuleConstEnums.ts, 2, 30))
export function foo() {
>foo : Symbol(foo, Decl(systemModuleConstEnums.ts, 2, 34))
use(TopLevelConstEnum.X);
>use : Symbol(use, Decl(systemModuleConstEnums.ts, 0, 0))
>TopLevelConstEnum.X : Symbol(TopLevelConstEnum.X, Decl(systemModuleConstEnums.ts, 2, 30))
>TopLevelConstEnum : Symbol(TopLevelConstEnum, Decl(systemModuleConstEnums.ts, 1, 29))
>X : Symbol(TopLevelConstEnum.X, Decl(systemModuleConstEnums.ts, 2, 30))
use(M.NonTopLevelConstEnum.X);
>use : Symbol(use, Decl(systemModuleConstEnums.ts, 0, 0))
>M.NonTopLevelConstEnum.X : Symbol(M.NonTopLevelConstEnum.X, Decl(systemModuleConstEnums.ts, 10, 44))
>M.NonTopLevelConstEnum : Symbol(M.NonTopLevelConstEnum, Decl(systemModuleConstEnums.ts, 9, 10))
>M : Symbol(M, Decl(systemModuleConstEnums.ts, 7, 1))
>NonTopLevelConstEnum : Symbol(M.NonTopLevelConstEnum, Decl(systemModuleConstEnums.ts, 9, 10))
>X : Symbol(M.NonTopLevelConstEnum.X, Decl(systemModuleConstEnums.ts, 10, 44))
}
module M {
>M : Symbol(M, Decl(systemModuleConstEnums.ts, 7, 1))
export const enum NonTopLevelConstEnum { X }
>NonTopLevelConstEnum : Symbol(NonTopLevelConstEnum, Decl(systemModuleConstEnums.ts, 9, 10))
>X : Symbol(NonTopLevelConstEnum.X, Decl(systemModuleConstEnums.ts, 10, 44))
}

View File

@@ -0,0 +1,37 @@
=== tests/cases/compiler/systemModuleConstEnums.ts ===
declare function use(a: any);
>use : (a: any) => any
>a : any
const enum TopLevelConstEnum { X }
>TopLevelConstEnum : TopLevelConstEnum
>X : TopLevelConstEnum
export function foo() {
>foo : () => void
use(TopLevelConstEnum.X);
>use(TopLevelConstEnum.X) : any
>use : (a: any) => any
>TopLevelConstEnum.X : TopLevelConstEnum
>TopLevelConstEnum : typeof TopLevelConstEnum
>X : TopLevelConstEnum
use(M.NonTopLevelConstEnum.X);
>use(M.NonTopLevelConstEnum.X) : any
>use : (a: any) => any
>M.NonTopLevelConstEnum.X : M.NonTopLevelConstEnum
>M.NonTopLevelConstEnum : typeof M.NonTopLevelConstEnum
>M : typeof M
>NonTopLevelConstEnum : typeof M.NonTopLevelConstEnum
>X : M.NonTopLevelConstEnum
}
module M {
>M : typeof M
export const enum NonTopLevelConstEnum { X }
>NonTopLevelConstEnum : NonTopLevelConstEnum
>X : NonTopLevelConstEnum
}

View File

@@ -0,0 +1,37 @@
//// [systemModuleConstEnumsSeparateCompilation.ts]
declare function use(a: any);
const enum TopLevelConstEnum { X }
export function foo() {
use(TopLevelConstEnum.X);
use(M.NonTopLevelConstEnum.X);
}
module M {
export const enum NonTopLevelConstEnum { X }
}
//// [systemModuleConstEnumsSeparateCompilation.js]
System.register([], function(exports_1) {
var TopLevelConstEnum, M;
function foo() {
use(TopLevelConstEnum.X);
use(M.NonTopLevelConstEnum.X);
}
exports_1("foo", foo);
return {
setters:[],
execute: function() {
(function (TopLevelConstEnum) {
TopLevelConstEnum[TopLevelConstEnum["X"] = 0] = "X";
})(TopLevelConstEnum || (TopLevelConstEnum = {}));
(function (M) {
(function (NonTopLevelConstEnum) {
NonTopLevelConstEnum[NonTopLevelConstEnum["X"] = 0] = "X";
})(M.NonTopLevelConstEnum || (M.NonTopLevelConstEnum = {}));
var NonTopLevelConstEnum = M.NonTopLevelConstEnum;
})(M || (M = {}));
}
}
});

View File

@@ -0,0 +1,35 @@
=== tests/cases/compiler/systemModuleConstEnumsSeparateCompilation.ts ===
declare function use(a: any);
>use : Symbol(use, Decl(systemModuleConstEnumsSeparateCompilation.ts, 0, 0))
>a : Symbol(a, Decl(systemModuleConstEnumsSeparateCompilation.ts, 1, 21))
const enum TopLevelConstEnum { X }
>TopLevelConstEnum : Symbol(TopLevelConstEnum, Decl(systemModuleConstEnumsSeparateCompilation.ts, 1, 29))
>X : Symbol(TopLevelConstEnum.X, Decl(systemModuleConstEnumsSeparateCompilation.ts, 2, 30))
export function foo() {
>foo : Symbol(foo, Decl(systemModuleConstEnumsSeparateCompilation.ts, 2, 34))
use(TopLevelConstEnum.X);
>use : Symbol(use, Decl(systemModuleConstEnumsSeparateCompilation.ts, 0, 0))
>TopLevelConstEnum.X : Symbol(TopLevelConstEnum.X, Decl(systemModuleConstEnumsSeparateCompilation.ts, 2, 30))
>TopLevelConstEnum : Symbol(TopLevelConstEnum, Decl(systemModuleConstEnumsSeparateCompilation.ts, 1, 29))
>X : Symbol(TopLevelConstEnum.X, Decl(systemModuleConstEnumsSeparateCompilation.ts, 2, 30))
use(M.NonTopLevelConstEnum.X);
>use : Symbol(use, Decl(systemModuleConstEnumsSeparateCompilation.ts, 0, 0))
>M.NonTopLevelConstEnum.X : Symbol(M.NonTopLevelConstEnum.X, Decl(systemModuleConstEnumsSeparateCompilation.ts, 10, 44))
>M.NonTopLevelConstEnum : Symbol(M.NonTopLevelConstEnum, Decl(systemModuleConstEnumsSeparateCompilation.ts, 9, 10))
>M : Symbol(M, Decl(systemModuleConstEnumsSeparateCompilation.ts, 7, 1))
>NonTopLevelConstEnum : Symbol(M.NonTopLevelConstEnum, Decl(systemModuleConstEnumsSeparateCompilation.ts, 9, 10))
>X : Symbol(M.NonTopLevelConstEnum.X, Decl(systemModuleConstEnumsSeparateCompilation.ts, 10, 44))
}
module M {
>M : Symbol(M, Decl(systemModuleConstEnumsSeparateCompilation.ts, 7, 1))
export const enum NonTopLevelConstEnum { X }
>NonTopLevelConstEnum : Symbol(NonTopLevelConstEnum, Decl(systemModuleConstEnumsSeparateCompilation.ts, 9, 10))
>X : Symbol(NonTopLevelConstEnum.X, Decl(systemModuleConstEnumsSeparateCompilation.ts, 10, 44))
}

View File

@@ -0,0 +1,37 @@
=== tests/cases/compiler/systemModuleConstEnumsSeparateCompilation.ts ===
declare function use(a: any);
>use : (a: any) => any
>a : any
const enum TopLevelConstEnum { X }
>TopLevelConstEnum : TopLevelConstEnum
>X : TopLevelConstEnum
export function foo() {
>foo : () => void
use(TopLevelConstEnum.X);
>use(TopLevelConstEnum.X) : any
>use : (a: any) => any
>TopLevelConstEnum.X : TopLevelConstEnum
>TopLevelConstEnum : typeof TopLevelConstEnum
>X : TopLevelConstEnum
use(M.NonTopLevelConstEnum.X);
>use(M.NonTopLevelConstEnum.X) : any
>use : (a: any) => any
>M.NonTopLevelConstEnum.X : M.NonTopLevelConstEnum
>M.NonTopLevelConstEnum : typeof M.NonTopLevelConstEnum
>M : typeof M
>NonTopLevelConstEnum : typeof M.NonTopLevelConstEnum
>X : M.NonTopLevelConstEnum
}
module M {
>M : typeof M
export const enum NonTopLevelConstEnum { X }
>NonTopLevelConstEnum : NonTopLevelConstEnum
>X : NonTopLevelConstEnum
}

View File

@@ -0,0 +1,67 @@
//// [tests/cases/compiler/systemModuleExportDefault.ts] ////
//// [file1.ts]
export default function() {}
//// [file2.ts]
export default function foo() {}
//// [file3.ts]
export default class {}
//// [file4.ts]
export default class C {}
//// [file1.js]
System.register([], function(exports_1) {
function default_1() { }
exports_1("default", default_1);
return {
setters:[],
execute: function() {
}
}
});
//// [file2.js]
System.register([], function(exports_1) {
function foo() { }
exports_1("default", foo);
return {
setters:[],
execute: function() {
}
}
});
//// [file3.js]
System.register([], function(exports_1) {
var default_1;
return {
setters:[],
execute: function() {
default_1 = (function () {
function default_1() {
}
return default_1;
})();
exports_1("default", default_1);
}
}
});
//// [file4.js]
System.register([], function(exports_1) {
var C;
return {
setters:[],
execute: function() {
C = (function () {
function C() {
}
return C;
})();
exports_1("default", C);
}
}
});

View File

@@ -0,0 +1,16 @@
=== tests/cases/compiler/file1.ts ===
No type information for this code.export default function() {}
No type information for this code.
No type information for this code.=== tests/cases/compiler/file2.ts ===
export default function foo() {}
>foo : Symbol(foo, Decl(file2.ts, 0, 0))
=== tests/cases/compiler/file3.ts ===
export default class {}
No type information for this code.
No type information for this code.=== tests/cases/compiler/file4.ts ===
export default class C {}
>C : Symbol(C, Decl(file4.ts, 0, 0))

View File

@@ -0,0 +1,16 @@
=== tests/cases/compiler/file1.ts ===
No type information for this code.export default function() {}
No type information for this code.
No type information for this code.=== tests/cases/compiler/file2.ts ===
export default function foo() {}
>foo : () => void
=== tests/cases/compiler/file3.ts ===
export default class {}
No type information for this code.
No type information for this code.=== tests/cases/compiler/file4.ts ===
export default class C {}
>C : C

View File

@@ -0,0 +1,13 @@
// @module: system
declare function use(a: any);
const enum TopLevelConstEnum { X }
export function foo() {
use(TopLevelConstEnum.X);
use(M.NonTopLevelConstEnum.X);
}
module M {
export const enum NonTopLevelConstEnum { X }
}

View File

@@ -0,0 +1,14 @@
// @module: system
// @separateCompilation: true
declare function use(a: any);
const enum TopLevelConstEnum { X }
export function foo() {
use(TopLevelConstEnum.X);
use(M.NonTopLevelConstEnum.X);
}
module M {
export const enum NonTopLevelConstEnum { X }
}

View File

@@ -0,0 +1,14 @@
// @module: system
// @filename: file1.ts
export default function() {}
// @filename: file2.ts
export default function foo() {}
// @filename: file3.ts
export default class {}
// @filename: file4.ts
export default class C {}