Fix assert with declaration emit for export specifier for a global

This commit is contained in:
Mohamed Hegazy 2015-06-25 17:38:11 -07:00
parent d695afa102
commit f9de30c728
9 changed files with 97 additions and 18 deletions

View File

@ -1165,7 +1165,9 @@ namespace ts {
// Check if symbol is any of the alias
return forEachValue(symbols, symbolFromSymbolTable => {
if (symbolFromSymbolTable.flags & SymbolFlags.Alias && symbolFromSymbolTable.name !== "export=") {
if (symbolFromSymbolTable.flags & SymbolFlags.Alias
&& symbolFromSymbolTable.name !== "export="
&& !getDeclarationOfKind(symbolFromSymbolTable, SyntaxKind.ExportSpecifier)) {
if (!useOnlyExternalAliasing || // We can use any type of alias to get the name
// Is this external alias, then use it to name
ts.forEach(symbolFromSymbolTable.declarations, isExternalModuleImportEqualsDeclaration)) {
@ -1207,7 +1209,7 @@ namespace ts {
}
// Qualify if the symbol from symbol table has same meaning as expected
symbolFromSymbolTable = (symbolFromSymbolTable.flags & SymbolFlags.Alias) ? resolveAlias(symbolFromSymbolTable) : symbolFromSymbolTable;
symbolFromSymbolTable = (symbolFromSymbolTable.flags & SymbolFlags.Alias && !getDeclarationOfKind(symbolFromSymbolTable, SyntaxKind.ExportSpecifier)) ? resolveAlias(symbolFromSymbolTable) : symbolFromSymbolTable;
if (symbolFromSymbolTable.flags & meaning) {
qualify = true;
return true;

View File

@ -31,8 +31,8 @@ export { c as c2 } from "server";
export { i, m as instantiatedModule } from "server";
>i : any
>m : typeof instantiatedModule
>instantiatedModule : typeof instantiatedModule
>m : typeof m
>instantiatedModule : typeof m
export { uninstantiated } from "server";
>uninstantiated : any

View File

@ -31,8 +31,8 @@ export { c as c2 } from "server";
export { i, m as instantiatedModule } from "server";
>i : any
>m : typeof instantiatedModule
>instantiatedModule : typeof instantiatedModule
>m : typeof m
>instantiatedModule : typeof m
export { uninstantiated } from "server";
>uninstantiated : any

View File

@ -0,0 +1,25 @@
//// [tests/cases/compiler/exportSpecifierForAGlobal.ts] ////
//// [a.d.ts]
declare class X { }
//// [b.ts]
export {X};
export function f() {
var x: X;
return x;
}
//// [b.js]
function f() {
var x;
return x;
}
exports.f = f;
//// [b.d.ts]
export { X };
export declare function f(): X;

View File

@ -0,0 +1,20 @@
=== tests/cases/compiler/a.d.ts ===
declare class X { }
>X : Symbol(X, Decl(a.d.ts, 0, 0))
=== tests/cases/compiler/b.ts ===
export {X};
>X : Symbol(X, Decl(b.ts, 0, 8))
export function f() {
>f : Symbol(f, Decl(b.ts, 0, 11))
var x: X;
>x : Symbol(x, Decl(b.ts, 2, 7))
>X : Symbol(X, Decl(a.d.ts, 0, 0))
return x;
>x : Symbol(x, Decl(b.ts, 2, 7))
}

View File

@ -0,0 +1,20 @@
=== tests/cases/compiler/a.d.ts ===
declare class X { }
>X : X
=== tests/cases/compiler/b.ts ===
export {X};
>X : typeof X
export function f() {
>f : () => X
var x: X;
>x : X
>X : X
return x;
>x : X
}

View File

@ -16,17 +16,17 @@ export enum E {
>E : Symbol(E, Decl(t1.ts, 6, 1))
A, B, C
>A : Symbol(E1.A, Decl(t1.ts, 7, 15))
>B : Symbol(E1.B, Decl(t1.ts, 8, 6))
>C : Symbol(E1.C, Decl(t1.ts, 8, 9))
>A : Symbol(E.A, Decl(t1.ts, 7, 15))
>B : Symbol(E.B, Decl(t1.ts, 8, 6))
>C : Symbol(E.C, Decl(t1.ts, 8, 9))
}
export const enum D {
>D : Symbol(D, Decl(t1.ts, 9, 1))
A, B, C
>A : Symbol(D1.A, Decl(t1.ts, 10, 21))
>B : Symbol(D1.B, Decl(t1.ts, 11, 6))
>C : Symbol(D1.C, Decl(t1.ts, 11, 9))
>A : Symbol(D.A, Decl(t1.ts, 10, 21))
>B : Symbol(D.B, Decl(t1.ts, 11, 6))
>C : Symbol(D.C, Decl(t1.ts, 11, 9))
}
export module M {
>M : Symbol(M, Decl(t1.ts, 12, 1))

View File

@ -16,17 +16,17 @@ export enum E {
>E : Symbol(E, Decl(t1.ts, 6, 1))
A, B, C
>A : Symbol(E1.A, Decl(t1.ts, 7, 15))
>B : Symbol(E1.B, Decl(t1.ts, 8, 6))
>C : Symbol(E1.C, Decl(t1.ts, 8, 9))
>A : Symbol(E.A, Decl(t1.ts, 7, 15))
>B : Symbol(E.B, Decl(t1.ts, 8, 6))
>C : Symbol(E.C, Decl(t1.ts, 8, 9))
}
export const enum D {
>D : Symbol(D, Decl(t1.ts, 9, 1))
A, B, C
>A : Symbol(D1.A, Decl(t1.ts, 10, 21))
>B : Symbol(D1.B, Decl(t1.ts, 11, 6))
>C : Symbol(D1.C, Decl(t1.ts, 11, 9))
>A : Symbol(D.A, Decl(t1.ts, 10, 21))
>B : Symbol(D.B, Decl(t1.ts, 11, 6))
>C : Symbol(D.C, Decl(t1.ts, 11, 9))
}
export module M {
>M : Symbol(M, Decl(t1.ts, 12, 1))

View File

@ -0,0 +1,12 @@
// @declaration: true
// @module: commonjs
// @filename: a.d.ts
declare class X { }
// @filename: b.ts
export {X};
export function f() {
var x: X;
return x;
}