From bea7221174de736d7f01ea9de3624d971a76f2c6 Mon Sep 17 00:00:00 2001 From: Mohamed Hegazy Date: Mon, 30 Mar 2015 16:59:34 -0700 Subject: [PATCH] Ensure we find export default declaration targets if we search for them by name --- src/compiler/checker.ts | 7 ++++ .../es5ExportDefaultClassDeclaration3.js | 35 +++++++++++++++++++ .../es5ExportDefaultClassDeclaration3.types | 33 +++++++++++++++++ .../es5ExportDefaultFunctionDeclaration3.js | 21 +++++++++++ ...es5ExportDefaultFunctionDeclaration3.types | 22 ++++++++++++ .../es5ExportDefaultClassDeclaration3.ts | 16 +++++++++ .../es5ExportDefaultFunctionDeclaration3.ts | 11 ++++++ 7 files changed, 145 insertions(+) create mode 100644 tests/baselines/reference/es5ExportDefaultClassDeclaration3.js create mode 100644 tests/baselines/reference/es5ExportDefaultClassDeclaration3.types create mode 100644 tests/baselines/reference/es5ExportDefaultFunctionDeclaration3.js create mode 100644 tests/baselines/reference/es5ExportDefaultFunctionDeclaration3.types create mode 100644 tests/cases/compiler/es5ExportDefaultClassDeclaration3.ts create mode 100644 tests/cases/compiler/es5ExportDefaultFunctionDeclaration3.ts diff --git a/src/compiler/checker.ts b/src/compiler/checker.ts index 3c0bf39f1fa..cf4049294bb 100644 --- a/src/compiler/checker.ts +++ b/src/compiler/checker.ts @@ -349,6 +349,13 @@ module ts { } result = undefined; } + else if (location.kind === SyntaxKind.SourceFile) { + result = getSymbol(getSymbolOfNode(location).exports, "default", meaning & SymbolFlags.ModuleMember); + if (result && (result.flags & meaning) && result.valueDeclaration && (result.valueDeclaration.flags & NodeFlags.Default) && result.valueDeclaration.localSymbol.name === name) { + break loop; + } + result = undefined; + } break; case SyntaxKind.EnumDeclaration: if (result = getSymbol(getSymbolOfNode(location).exports, name, meaning & SymbolFlags.EnumMember)) { diff --git a/tests/baselines/reference/es5ExportDefaultClassDeclaration3.js b/tests/baselines/reference/es5ExportDefaultClassDeclaration3.js new file mode 100644 index 00000000000..bff80940a02 --- /dev/null +++ b/tests/baselines/reference/es5ExportDefaultClassDeclaration3.js @@ -0,0 +1,35 @@ +//// [es5ExportDefaultClassDeclaration3.ts] + +var before: C = new C(); + +export default class C { + method(): C { + return new C(); + } +} + +var after: C = new C(); + +var t: typeof C = C; + + + +//// [es5ExportDefaultClassDeclaration3.js] +var before = new C(); +var C = (function () { + function C() { + } + C.prototype.method = function () { + return new C(); + }; + return C; +})(); +exports.default = C; +var after = new C(); +var t = C; + + +//// [es5ExportDefaultClassDeclaration3.d.ts] +export default class C { + method(): C; +} diff --git a/tests/baselines/reference/es5ExportDefaultClassDeclaration3.types b/tests/baselines/reference/es5ExportDefaultClassDeclaration3.types new file mode 100644 index 00000000000..1ed302ac45e --- /dev/null +++ b/tests/baselines/reference/es5ExportDefaultClassDeclaration3.types @@ -0,0 +1,33 @@ +=== tests/cases/compiler/es5ExportDefaultClassDeclaration3.ts === + +var before: C = new C(); +>before : C +>C : C +>new C() : C +>C : typeof C + +export default class C { +>C : C + + method(): C { +>method : () => C +>C : C + + return new C(); +>new C() : C +>C : typeof C + } +} + +var after: C = new C(); +>after : C +>C : C +>new C() : C +>C : typeof C + +var t: typeof C = C; +>t : typeof C +>C : typeof C +>C : typeof C + + diff --git a/tests/baselines/reference/es5ExportDefaultFunctionDeclaration3.js b/tests/baselines/reference/es5ExportDefaultFunctionDeclaration3.js new file mode 100644 index 00000000000..1fc57976439 --- /dev/null +++ b/tests/baselines/reference/es5ExportDefaultFunctionDeclaration3.js @@ -0,0 +1,21 @@ +//// [es5ExportDefaultFunctionDeclaration3.ts] + +var before: typeof func = func(); + +export default function func(): typeof func { + return func; +} + +var after: typeof func = func(); + +//// [es5ExportDefaultFunctionDeclaration3.js] +var before = func(); +function func() { + return func; +} +exports.default = func; +var after = func(); + + +//// [es5ExportDefaultFunctionDeclaration3.d.ts] +export default function func(): typeof func; diff --git a/tests/baselines/reference/es5ExportDefaultFunctionDeclaration3.types b/tests/baselines/reference/es5ExportDefaultFunctionDeclaration3.types new file mode 100644 index 00000000000..d3a8ff92b2f --- /dev/null +++ b/tests/baselines/reference/es5ExportDefaultFunctionDeclaration3.types @@ -0,0 +1,22 @@ +=== tests/cases/compiler/es5ExportDefaultFunctionDeclaration3.ts === + +var before: typeof func = func(); +>before : () => typeof func +>func : () => typeof func +>func() : () => typeof func +>func : () => typeof func + +export default function func(): typeof func { +>func : () => typeof func +>func : () => typeof func + + return func; +>func : () => typeof func +} + +var after: typeof func = func(); +>after : () => typeof func +>func : () => typeof func +>func() : () => typeof func +>func : () => typeof func + diff --git a/tests/cases/compiler/es5ExportDefaultClassDeclaration3.ts b/tests/cases/compiler/es5ExportDefaultClassDeclaration3.ts new file mode 100644 index 00000000000..b464e329b84 --- /dev/null +++ b/tests/cases/compiler/es5ExportDefaultClassDeclaration3.ts @@ -0,0 +1,16 @@ +// @target: es5 +// @module: commonjs +// @declaration: true + +var before: C = new C(); + +export default class C { + method(): C { + return new C(); + } +} + +var after: C = new C(); + +var t: typeof C = C; + diff --git a/tests/cases/compiler/es5ExportDefaultFunctionDeclaration3.ts b/tests/cases/compiler/es5ExportDefaultFunctionDeclaration3.ts new file mode 100644 index 00000000000..7db21de339e --- /dev/null +++ b/tests/cases/compiler/es5ExportDefaultFunctionDeclaration3.ts @@ -0,0 +1,11 @@ +// @target: es5 +// @module: commonjs +// @declaration: true + +var before: typeof func = func(); + +export default function func(): typeof func { + return func; +} + +var after: typeof func = func(); \ No newline at end of file