do not emit exportsStar function if module does not expose any values

This commit is contained in:
Vladimir Matveev 2015-10-04 22:00:57 -07:00
parent 331d26f402
commit 32b1ad36ec
52 changed files with 1020 additions and 22 deletions

View File

@ -14493,6 +14493,33 @@ namespace ts {
// Emitter support
function moduleExportsSomeValue(moduleReferenceExpression: Expression): boolean {
let moduleSymbol = resolveExternalModuleName(moduleReferenceExpression.parent, moduleReferenceExpression);
if (!moduleSymbol) {
// module not found - be conservative
return true;
}
const hasExportAssignment = getExportAssignmentSymbol(moduleSymbol) !== undefined;
moduleSymbol = resolveExternalModuleSymbol(moduleSymbol);
const symbolLinks = getSymbolLinks(moduleSymbol);
if (symbolLinks.exportsSomeValue == undefined) {
// for export assignments - check if resolved symbol for RHS is itself a value
// otherwise - check if at least one export is value
symbolLinks.exportsSomeValue = hasExportAssignment
? !!(moduleSymbol.flags & SymbolFlags.Value)
: forEachValue(getExportsOfModule(moduleSymbol), isValue);
}
return symbolLinks.exportsSomeValue;
function isValue(s: Symbol): boolean {
s = resolveSymbol(s);
return s && !!(s.flags & SymbolFlags.Value);
}
}
// When resolved as an expression identifier, if the given node references an exported entity, return the declaration
// node of the exported entity's container. Otherwise, return undefined.
function getReferencedExportContainer(node: Identifier): SourceFile | ModuleDeclaration | EnumDeclaration {
@ -14823,7 +14850,8 @@ namespace ts {
getBlockScopedVariableId,
getReferencedValueDeclaration,
getTypeReferenceSerializationKind,
isOptionalParameter
isOptionalParameter,
moduleExportsSomeValue
};
}

View File

@ -406,7 +406,7 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, Promi
let externalImports: (ImportDeclaration | ImportEqualsDeclaration | ExportDeclaration)[];
let exportSpecifiers: Map<ExportSpecifier[]>;
let exportEquals: ExportAssignment;
let hasExportStars: boolean;
let hasExportStarsToExportValues: boolean;
/** Write emitted output to disk */
let writeEmittedFiles = writeJavaScriptFile;
@ -5892,15 +5892,17 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, Promi
}
else {
// export * from "foo"
writeLine();
write("__export(");
if (modulekind !== ModuleKind.AMD) {
emitRequire(getExternalModuleName(node));
if (hasExportStarsToExportValues && resolver.moduleExportsSomeValue(node.moduleSpecifier)) {
writeLine();
write("__export(");
if (modulekind !== ModuleKind.AMD) {
emitRequire(getExternalModuleName(node));
}
else {
write(generatedName);
}
write(");");
}
else {
write(generatedName);
}
write(");");
}
emitEnd(node);
}
@ -5988,7 +5990,7 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, Promi
externalImports = [];
exportSpecifiers = {};
exportEquals = undefined;
hasExportStars = false;
hasExportStarsToExportValues = false;
for (let node of sourceFile.statements) {
switch (node.kind) {
case SyntaxKind.ImportDeclaration:
@ -6011,8 +6013,10 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, Promi
if ((<ExportDeclaration>node).moduleSpecifier) {
if (!(<ExportDeclaration>node).exportClause) {
// export * from "mod"
externalImports.push(<ExportDeclaration>node);
hasExportStars = true;
if (resolver.moduleExportsSomeValue((<ExportDeclaration>node).moduleSpecifier)) {
externalImports.push(<ExportDeclaration>node);
hasExportStarsToExportValues = true;
}
}
else if (resolver.isValueAliasDeclaration(node)) {
// export { x, y } from "mod" where at least one export is a value symbol
@ -6038,7 +6042,7 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, Promi
}
function emitExportStarHelper() {
if (hasExportStars) {
if (hasExportStarsToExportValues) {
writeLine();
write("function __export(m) {");
increaseIndent();
@ -6110,7 +6114,7 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, Promi
// should always win over entries with similar names that were added via star exports
// to support this we store names of local/indirect exported entries in a set.
// this set is used to filter names brought by star expors.
if (!hasExportStars) {
if (!hasExportStarsToExportValues) {
// local names set is needed only in presence of star exports
return undefined;
}
@ -6535,6 +6539,8 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, Promi
write("});");
}
else {
// collectExternalModuleInfo prefilters star exports to keep only ones that export values
// this means that check 'resolver.moduleExportsSomeValue' is redundant and can be omitted here
writeLine();
// export * from 'foo'
// emit as:
@ -6796,7 +6802,7 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, Promi
externalImports = undefined;
exportSpecifiers = undefined;
exportEquals = undefined;
hasExportStars = false;
hasExportStarsToExportValues = false;
emitEmitHelpers(node);
emitCaptureThisForNodeIfNecessary(node);
emitLinesStartingAt(node.statements, startIndex);
@ -6996,7 +7002,7 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, Promi
externalImports = undefined;
exportSpecifiers = undefined;
exportEquals = undefined;
hasExportStars = false;
hasExportStarsToExportValues = false;
emitEmitHelpers(node);
emitCaptureThisForNodeIfNecessary(node);
emitLinesStartingAt(node.statements, startIndex);

View File

@ -1602,6 +1602,7 @@ namespace ts {
getReferencedValueDeclaration(reference: Identifier): Declaration;
getTypeReferenceSerializationKind(typeName: EntityName): TypeReferenceSerializationKind;
isOptionalParameter(node: ParameterDeclaration): boolean;
moduleExportsSomeValue(moduleReferenceExpression: Expression): boolean;
}
export const enum SymbolFlags {
@ -1718,6 +1719,7 @@ namespace ts {
exportsChecked?: boolean; // True if exports of external module have been checked
isNestedRedeclaration?: boolean; // True if symbol is block scoped redeclaration
bindingElement?: BindingElement; // Binding element associated with property symbol
exportsSomeValue?: boolean; // true if module exports some value (not just types)
}
/* @internal */

View File

@ -289,7 +289,6 @@ exports.a8 = function_module_2.a;
var class_module_2 = require("class-module");
exports.a0 = class_module_2.a;
// export-star
__export(require("interface"));
__export(require("variable"));
__export(require("interface-variable"));
__export(require("module"));

View File

@ -53,7 +53,7 @@ var Bbb;
return SomeType;
})();
Bbb.SomeType = SomeType;
__export(require()); // this line causes the nullref
// this line causes the nullref
})(Bbb || (Bbb = {}));
var a;

View File

@ -0,0 +1,17 @@
//// [tests/cases/compiler/exportStarForValues.ts] ////
//// [file1.ts]
export interface Foo { x }
//// [file2.ts]
export * from "file1"
var x;
//// [file1.js]
define(["require", "exports"], function (require, exports) {
});
//// [file2.js]
define(["require", "exports"], function (require, exports) {
var x;
});

View File

@ -0,0 +1,11 @@
=== tests/cases/compiler/file1.ts ===
export interface Foo { x }
>Foo : Symbol(Foo, Decl(file1.ts, 0, 0))
>x : Symbol(x, Decl(file1.ts, 1, 22))
=== tests/cases/compiler/file2.ts ===
export * from "file1"
var x;
>x : Symbol(x, Decl(file2.ts, 1, 3))

View File

@ -0,0 +1,11 @@
=== tests/cases/compiler/file1.ts ===
export interface Foo { x }
>Foo : Foo
>x : any
=== tests/cases/compiler/file2.ts ===
export * from "file1"
var x;
>x : any

View File

@ -0,0 +1,52 @@
//// [tests/cases/compiler/exportStarForValues10.ts] ////
//// [file0.ts]
export var v = 1;
//// [file1.ts]
export interface Foo { x }
//// [file2.ts]
export * from "file0";
export * from "file1";
var x = 1;
//// [file0.js]
System.register([], function(exports_1) {
var v;
return {
setters:[],
execute: function() {
exports_1("v", v = 1);
}
}
});
//// [file1.js]
System.register([], function(exports_1) {
return {
setters:[],
execute: function() {
}
}
});
//// [file2.js]
System.register(["file0"], function(exports_1) {
var x;
function exportStar_1(m) {
var exports = {};
for(var n in m) {
if (n !== "default") exports[n] = m[n];
}
exports_1(exports);
}
return {
setters:[
function (file0_1_1) {
exportStar_1(file0_1_1);
}],
execute: function() {
x = 1;
}
}
});

View File

@ -0,0 +1,16 @@
=== tests/cases/compiler/file0.ts ===
export var v = 1;
>v : Symbol(v, Decl(file0.ts, 1, 10))
=== tests/cases/compiler/file1.ts ===
export interface Foo { x }
>Foo : Symbol(Foo, Decl(file1.ts, 0, 0))
>x : Symbol(x, Decl(file1.ts, 0, 22))
=== tests/cases/compiler/file2.ts ===
export * from "file0";
export * from "file1";
var x = 1;
>x : Symbol(x, Decl(file2.ts, 2, 3))

View File

@ -0,0 +1,18 @@
=== tests/cases/compiler/file0.ts ===
export var v = 1;
>v : number
>1 : number
=== tests/cases/compiler/file1.ts ===
export interface Foo { x }
>Foo : Foo
>x : any
=== tests/cases/compiler/file2.ts ===
export * from "file0";
export * from "file1";
var x = 1;
>x : number
>1 : number

View File

@ -0,0 +1,25 @@
//// [tests/cases/compiler/exportStarForValues2.ts] ////
//// [file1.ts]
export interface Foo { x }
//// [file2.ts]
export * from "file1"
var x = 1;
//// [file3.ts]
export * from "file2"
var x = 1;
//// [file1.js]
define(["require", "exports"], function (require, exports) {
});
//// [file2.js]
define(["require", "exports"], function (require, exports) {
var x = 1;
});
//// [file3.js]
define(["require", "exports"], function (require, exports) {
var x = 1;
});

View File

@ -0,0 +1,16 @@
=== tests/cases/compiler/file1.ts ===
export interface Foo { x }
>Foo : Symbol(Foo, Decl(file1.ts, 0, 0))
>x : Symbol(x, Decl(file1.ts, 1, 22))
=== tests/cases/compiler/file2.ts ===
export * from "file1"
var x = 1;
>x : Symbol(x, Decl(file2.ts, 1, 3))
=== tests/cases/compiler/file3.ts ===
export * from "file2"
var x = 1;
>x : Symbol(x, Decl(file3.ts, 1, 3))

View File

@ -0,0 +1,18 @@
=== tests/cases/compiler/file1.ts ===
export interface Foo { x }
>Foo : Foo
>x : any
=== tests/cases/compiler/file2.ts ===
export * from "file1"
var x = 1;
>x : number
>1 : number
=== tests/cases/compiler/file3.ts ===
export * from "file2"
var x = 1;
>x : number
>1 : number

View File

@ -0,0 +1,45 @@
//// [tests/cases/compiler/exportStarForValues3.ts] ////
//// [file1.ts]
export interface Foo { x }
//// [file2.ts]
export interface A { x }
export * from "file1"
var x = 1;
//// [file3.ts]
export interface B { x }
export * from "file1"
var x = 1;
//// [file4.ts]
export interface C { x }
export * from "file2"
export * from "file3"
var x = 1;
//// [file5.ts]
export * from "file4"
var x = 1;
//// [file1.js]
define(["require", "exports"], function (require, exports) {
});
//// [file2.js]
define(["require", "exports"], function (require, exports) {
var x = 1;
});
//// [file3.js]
define(["require", "exports"], function (require, exports) {
var x = 1;
});
//// [file4.js]
define(["require", "exports"], function (require, exports) {
var x = 1;
});
//// [file5.js]
define(["require", "exports"], function (require, exports) {
var x = 1;
});

View File

@ -0,0 +1,39 @@
=== tests/cases/compiler/file1.ts ===
export interface Foo { x }
>Foo : Symbol(Foo, Decl(file1.ts, 0, 0))
>x : Symbol(x, Decl(file1.ts, 1, 22))
=== tests/cases/compiler/file2.ts ===
export interface A { x }
>A : Symbol(A, Decl(file2.ts, 0, 0))
>x : Symbol(x, Decl(file2.ts, 0, 20))
export * from "file1"
var x = 1;
>x : Symbol(x, Decl(file2.ts, 2, 3))
=== tests/cases/compiler/file3.ts ===
export interface B { x }
>B : Symbol(B, Decl(file3.ts, 0, 0))
>x : Symbol(x, Decl(file3.ts, 0, 20))
export * from "file1"
var x = 1;
>x : Symbol(x, Decl(file3.ts, 2, 3))
=== tests/cases/compiler/file4.ts ===
export interface C { x }
>C : Symbol(C, Decl(file4.ts, 0, 0))
>x : Symbol(x, Decl(file4.ts, 0, 20))
export * from "file2"
export * from "file3"
var x = 1;
>x : Symbol(x, Decl(file4.ts, 3, 3))
=== tests/cases/compiler/file5.ts ===
export * from "file4"
var x = 1;
>x : Symbol(x, Decl(file5.ts, 1, 3))

View File

@ -0,0 +1,43 @@
=== tests/cases/compiler/file1.ts ===
export interface Foo { x }
>Foo : Foo
>x : any
=== tests/cases/compiler/file2.ts ===
export interface A { x }
>A : A
>x : any
export * from "file1"
var x = 1;
>x : number
>1 : number
=== tests/cases/compiler/file3.ts ===
export interface B { x }
>B : B
>x : any
export * from "file1"
var x = 1;
>x : number
>1 : number
=== tests/cases/compiler/file4.ts ===
export interface C { x }
>C : C
>x : any
export * from "file2"
export * from "file3"
var x = 1;
>x : number
>1 : number
=== tests/cases/compiler/file5.ts ===
export * from "file4"
var x = 1;
>x : number
>1 : number

View File

@ -0,0 +1,29 @@
//// [tests/cases/compiler/exportStarForValues4.ts] ////
//// [file1.ts]
export interface Foo { x }
//// [file2.ts]
export interface A { x }
export * from "file1"
export * from "file3"
var x = 1;
//// [file3.ts]
export interface B { x }
export * from "file2"
var x = 1;
//// [file1.js]
define(["require", "exports"], function (require, exports) {
});
//// [file3.js]
define(["require", "exports"], function (require, exports) {
var x = 1;
});
//// [file2.js]
define(["require", "exports"], function (require, exports) {
var x = 1;
});

View File

@ -0,0 +1,25 @@
=== tests/cases/compiler/file1.ts ===
export interface Foo { x }
>Foo : Symbol(Foo, Decl(file1.ts, 0, 0))
>x : Symbol(x, Decl(file1.ts, 1, 22))
=== tests/cases/compiler/file2.ts ===
export interface A { x }
>A : Symbol(A, Decl(file2.ts, 0, 0))
>x : Symbol(x, Decl(file2.ts, 0, 20))
export * from "file1"
export * from "file3"
var x = 1;
>x : Symbol(x, Decl(file2.ts, 3, 3))
=== tests/cases/compiler/file3.ts ===
export interface B { x }
>B : Symbol(B, Decl(file3.ts, 0, 0))
>x : Symbol(x, Decl(file3.ts, 0, 20))
export * from "file2"
var x = 1;
>x : Symbol(x, Decl(file3.ts, 2, 3))

View File

@ -0,0 +1,27 @@
=== tests/cases/compiler/file1.ts ===
export interface Foo { x }
>Foo : Foo
>x : any
=== tests/cases/compiler/file2.ts ===
export interface A { x }
>A : A
>x : any
export * from "file1"
export * from "file3"
var x = 1;
>x : number
>1 : number
=== tests/cases/compiler/file3.ts ===
export interface B { x }
>B : B
>x : any
export * from "file2"
var x = 1;
>x : number
>1 : number

View File

@ -0,0 +1,16 @@
//// [tests/cases/compiler/exportStarForValues5.ts] ////
//// [file1.ts]
export interface Foo { x }
//// [file2.ts]
export * from "file1"
export var x;
//// [file1.js]
define(["require", "exports"], function (require, exports) {
});
//// [file2.js]
define(["require", "exports"], function (require, exports) {
});

View File

@ -0,0 +1,11 @@
=== tests/cases/compiler/file1.ts ===
export interface Foo { x }
>Foo : Symbol(Foo, Decl(file1.ts, 0, 0))
>x : Symbol(x, Decl(file1.ts, 1, 22))
=== tests/cases/compiler/file2.ts ===
export * from "file1"
export var x;
>x : Symbol(x, Decl(file2.ts, 1, 10))

View File

@ -0,0 +1,11 @@
=== tests/cases/compiler/file1.ts ===
export interface Foo { x }
>Foo : Foo
>x : any
=== tests/cases/compiler/file2.ts ===
export * from "file1"
export var x;
>x : any

View File

@ -0,0 +1,28 @@
//// [tests/cases/compiler/exportStarForValues6.ts] ////
//// [file1.ts]
export interface Foo { x }
//// [file2.ts]
export * from "file1"
export var x = 1;
//// [file1.js]
System.register([], function(exports_1) {
return {
setters:[],
execute: function() {
}
}
});
//// [file2.js]
System.register([], function(exports_1) {
var x;
return {
setters:[],
execute: function() {
exports_1("x", x = 1);
}
}
});

View File

@ -0,0 +1,11 @@
=== tests/cases/compiler/file1.ts ===
export interface Foo { x }
>Foo : Symbol(Foo, Decl(file1.ts, 0, 0))
>x : Symbol(x, Decl(file1.ts, 1, 22))
=== tests/cases/compiler/file2.ts ===
export * from "file1"
export var x = 1;
>x : Symbol(x, Decl(file2.ts, 1, 10))

View File

@ -0,0 +1,12 @@
=== tests/cases/compiler/file1.ts ===
export interface Foo { x }
>Foo : Foo
>x : any
=== tests/cases/compiler/file2.ts ===
export * from "file1"
export var x = 1;
>x : number
>1 : number

View File

@ -0,0 +1,29 @@
//// [tests/cases/compiler/exportStarForValues7.ts] ////
//// [file1.ts]
export interface Foo { x }
//// [file2.ts]
export * from "file1"
export var x = 1;
//// [file3.ts]
export * from "file2"
export var x = 1;
//// [file1.js]
define(["require", "exports"], function (require, exports) {
});
//// [file2.js]
define(["require", "exports"], function (require, exports) {
exports.x = 1;
});
//// [file3.js]
define(["require", "exports", "file2"], function (require, exports, file2_1) {
function __export(m) {
for (var p in m) if (!exports.hasOwnProperty(p)) exports[p] = m[p];
}
__export(file2_1);
exports.x = 1;
});

View File

@ -0,0 +1,16 @@
=== tests/cases/compiler/file1.ts ===
export interface Foo { x }
>Foo : Symbol(Foo, Decl(file1.ts, 0, 0))
>x : Symbol(x, Decl(file1.ts, 1, 22))
=== tests/cases/compiler/file2.ts ===
export * from "file1"
export var x = 1;
>x : Symbol(x, Decl(file2.ts, 1, 10))
=== tests/cases/compiler/file3.ts ===
export * from "file2"
export var x = 1;
>x : Symbol(x, Decl(file3.ts, 1, 10))

View File

@ -0,0 +1,18 @@
=== tests/cases/compiler/file1.ts ===
export interface Foo { x }
>Foo : Foo
>x : any
=== tests/cases/compiler/file2.ts ===
export * from "file1"
export var x = 1;
>x : number
>1 : number
=== tests/cases/compiler/file3.ts ===
export * from "file2"
export var x = 1;
>x : number
>1 : number

View File

@ -0,0 +1,54 @@
//// [tests/cases/compiler/exportStarForValues8.ts] ////
//// [file1.ts]
export interface Foo { x }
//// [file2.ts]
export interface A { x }
export * from "file1"
export var x = 1;
//// [file3.ts]
export interface B { x }
export * from "file1"
export var x = 1;
//// [file4.ts]
export interface C { x }
export * from "file2"
export * from "file3"
export var x = 1;
//// [file5.ts]
export * from "file4"
export var x = 1;
//// [file1.js]
define(["require", "exports"], function (require, exports) {
});
//// [file2.js]
define(["require", "exports"], function (require, exports) {
exports.x = 1;
});
//// [file3.js]
define(["require", "exports"], function (require, exports) {
exports.x = 1;
});
//// [file4.js]
define(["require", "exports", "file2", "file3"], function (require, exports, file2_1, file3_1) {
function __export(m) {
for (var p in m) if (!exports.hasOwnProperty(p)) exports[p] = m[p];
}
__export(file2_1);
__export(file3_1);
exports.x = 1;
});
//// [file5.js]
define(["require", "exports", "file4"], function (require, exports, file4_1) {
function __export(m) {
for (var p in m) if (!exports.hasOwnProperty(p)) exports[p] = m[p];
}
__export(file4_1);
exports.x = 1;
});

View File

@ -0,0 +1,39 @@
=== tests/cases/compiler/file1.ts ===
export interface Foo { x }
>Foo : Symbol(Foo, Decl(file1.ts, 0, 0))
>x : Symbol(x, Decl(file1.ts, 1, 22))
=== tests/cases/compiler/file2.ts ===
export interface A { x }
>A : Symbol(A, Decl(file2.ts, 0, 0))
>x : Symbol(x, Decl(file2.ts, 0, 20))
export * from "file1"
export var x = 1;
>x : Symbol(x, Decl(file2.ts, 2, 10))
=== tests/cases/compiler/file3.ts ===
export interface B { x }
>B : Symbol(B, Decl(file3.ts, 0, 0))
>x : Symbol(x, Decl(file3.ts, 0, 20))
export * from "file1"
export var x = 1;
>x : Symbol(x, Decl(file3.ts, 2, 10))
=== tests/cases/compiler/file4.ts ===
export interface C { x }
>C : Symbol(C, Decl(file4.ts, 0, 0))
>x : Symbol(x, Decl(file4.ts, 0, 20))
export * from "file2"
export * from "file3"
export var x = 1;
>x : Symbol(x, Decl(file4.ts, 3, 10))
=== tests/cases/compiler/file5.ts ===
export * from "file4"
export var x = 1;
>x : Symbol(x, Decl(file5.ts, 1, 10))

View File

@ -0,0 +1,43 @@
=== tests/cases/compiler/file1.ts ===
export interface Foo { x }
>Foo : Foo
>x : any
=== tests/cases/compiler/file2.ts ===
export interface A { x }
>A : A
>x : any
export * from "file1"
export var x = 1;
>x : number
>1 : number
=== tests/cases/compiler/file3.ts ===
export interface B { x }
>B : B
>x : any
export * from "file1"
export var x = 1;
>x : number
>1 : number
=== tests/cases/compiler/file4.ts ===
export interface C { x }
>C : C
>x : any
export * from "file2"
export * from "file3"
export var x = 1;
>x : number
>1 : number
=== tests/cases/compiler/file5.ts ===
export * from "file4"
export var x = 1;
>x : number
>1 : number

View File

@ -0,0 +1,37 @@
//// [tests/cases/compiler/exportStarForValues9.ts] ////
//// [file1.ts]
export interface Foo { x }
//// [file2.ts]
export interface A { x }
export * from "file1"
export * from "file3"
export var x = 1;
//// [file3.ts]
export interface B { x }
export * from "file2"
export var x = 1;
//// [file1.js]
define(["require", "exports"], function (require, exports) {
});
//// [file3.js]
define(["require", "exports", "file2"], function (require, exports, file2_1) {
function __export(m) {
for (var p in m) if (!exports.hasOwnProperty(p)) exports[p] = m[p];
}
__export(file2_1);
exports.x = 1;
});
//// [file2.js]
define(["require", "exports", "file3"], function (require, exports, file3_1) {
function __export(m) {
for (var p in m) if (!exports.hasOwnProperty(p)) exports[p] = m[p];
}
__export(file3_1);
exports.x = 1;
});

View File

@ -0,0 +1,25 @@
=== tests/cases/compiler/file1.ts ===
export interface Foo { x }
>Foo : Symbol(Foo, Decl(file1.ts, 0, 0))
>x : Symbol(x, Decl(file1.ts, 1, 22))
=== tests/cases/compiler/file2.ts ===
export interface A { x }
>A : Symbol(A, Decl(file2.ts, 0, 0))
>x : Symbol(x, Decl(file2.ts, 0, 20))
export * from "file1"
export * from "file3"
export var x = 1;
>x : Symbol(x, Decl(file2.ts, 3, 10))
=== tests/cases/compiler/file3.ts ===
export interface B { x }
>B : Symbol(B, Decl(file3.ts, 0, 0))
>x : Symbol(x, Decl(file3.ts, 0, 20))
export * from "file2"
export var x = 1;
>x : Symbol(x, Decl(file3.ts, 2, 10))

View File

@ -0,0 +1,27 @@
=== tests/cases/compiler/file1.ts ===
export interface Foo { x }
>Foo : Foo
>x : any
=== tests/cases/compiler/file2.ts ===
export interface A { x }
>A : A
>x : any
export * from "file1"
export * from "file3"
export var x = 1;
>x : number
>1 : number
=== tests/cases/compiler/file3.ts ===
export interface B { x }
>B : B
>x : any
export * from "file2"
export var x = 1;
>x : number
>1 : number

View File

@ -0,0 +1,28 @@
//// [tests/cases/compiler/exportStarForValuesInSystem.ts] ////
//// [file1.ts]
export interface Foo { x }
//// [file2.ts]
export * from "file1"
var x = 1;
//// [file1.js]
System.register([], function(exports_1) {
return {
setters:[],
execute: function() {
}
}
});
//// [file2.js]
System.register([], function(exports_1) {
var x;
return {
setters:[],
execute: function() {
x = 1;
}
}
});

View File

@ -0,0 +1,11 @@
=== tests/cases/compiler/file1.ts ===
export interface Foo { x }
>Foo : Symbol(Foo, Decl(file1.ts, 0, 0))
>x : Symbol(x, Decl(file1.ts, 1, 22))
=== tests/cases/compiler/file2.ts ===
export * from "file1"
var x = 1;
>x : Symbol(x, Decl(file2.ts, 1, 3))

View File

@ -0,0 +1,12 @@
=== tests/cases/compiler/file1.ts ===
export interface Foo { x }
>Foo : Foo
>x : any
=== tests/cases/compiler/file2.ts ===
export * from "file1"
var x = 1;
>x : number
>1 : number

View File

@ -34,7 +34,6 @@
{
var v;
function foo() { }
__export(require("ambient"));
exports["default"] = v;
var C = (function () {
function C() {

View File

@ -34,7 +34,6 @@ function blah () {
function blah() {
var v;
function foo() { }
__export(require("ambient"));
exports["default"] = v;
var C = (function () {
function C() {

View File

@ -37,7 +37,6 @@ var P;
{
var v;
function foo() { }
__export(require("ambient"));
P["default"] = v;
var C = (function () {
function C() {

View File

@ -0,0 +1,8 @@
// @module: amd
// @filename: file1.ts
export interface Foo { x }
// @filename: file2.ts
export * from "file1"
var x;

View File

@ -0,0 +1,12 @@
// @module: system
// @filename: file0.ts
export var v = 1;
// @filename: file1.ts
export interface Foo { x }
// @filename: file2.ts
export * from "file0";
export * from "file1";
var x = 1;

View File

@ -0,0 +1,12 @@
// @module: amd
// @filename: file1.ts
export interface Foo { x }
// @filename: file2.ts
export * from "file1"
var x = 1;
// @filename: file3.ts
export * from "file2"
var x = 1;

View File

@ -0,0 +1,24 @@
// @module: amd
// @filename: file1.ts
export interface Foo { x }
// @filename: file2.ts
export interface A { x }
export * from "file1"
var x = 1;
// @filename: file3.ts
export interface B { x }
export * from "file1"
var x = 1;
// @filename: file4.ts
export interface C { x }
export * from "file2"
export * from "file3"
var x = 1;
// @filename: file5.ts
export * from "file4"
var x = 1;

View File

@ -0,0 +1,15 @@
// @module: amd
// @filename: file1.ts
export interface Foo { x }
// @filename: file2.ts
export interface A { x }
export * from "file1"
export * from "file3"
var x = 1;
// @filename: file3.ts
export interface B { x }
export * from "file2"
var x = 1;

View File

@ -0,0 +1,8 @@
// @module: amd
// @filename: file1.ts
export interface Foo { x }
// @filename: file2.ts
export * from "file1"
export var x;

View File

@ -0,0 +1,8 @@
// @module: system
// @filename: file1.ts
export interface Foo { x }
// @filename: file2.ts
export * from "file1"
export var x = 1;

View File

@ -0,0 +1,12 @@
// @module: amd
// @filename: file1.ts
export interface Foo { x }
// @filename: file2.ts
export * from "file1"
export var x = 1;
// @filename: file3.ts
export * from "file2"
export var x = 1;

View File

@ -0,0 +1,24 @@
// @module: amd
// @filename: file1.ts
export interface Foo { x }
// @filename: file2.ts
export interface A { x }
export * from "file1"
export var x = 1;
// @filename: file3.ts
export interface B { x }
export * from "file1"
export var x = 1;
// @filename: file4.ts
export interface C { x }
export * from "file2"
export * from "file3"
export var x = 1;
// @filename: file5.ts
export * from "file4"
export var x = 1;

View File

@ -0,0 +1,15 @@
// @module: amd
// @filename: file1.ts
export interface Foo { x }
// @filename: file2.ts
export interface A { x }
export * from "file1"
export * from "file3"
export var x = 1;
// @filename: file3.ts
export interface B { x }
export * from "file2"
export var x = 1;

View File

@ -0,0 +1,8 @@
// @module: system
// @filename: file1.ts
export interface Foo { x }
// @filename: file2.ts
export * from "file1"
var x = 1;