From 86d561d2bea592d329944d4f869e27501544f684 Mon Sep 17 00:00:00 2001 From: Mohamed Hegazy Date: Mon, 23 Mar 2015 11:17:40 -0700 Subject: [PATCH] Check for instantiation on export default in ES6 --- src/compiler/emitter.ts | 40 ++++++++++--------- .../reference/es6ExportAssignment.js | 1 - tests/baselines/reference/es6ExportEquals.js | 1 - .../reference/es6ImportEqualsDeclaration.js | 1 - .../es6ImportNamedImportInExportAssignment.js | 1 - .../exportDefaultForNonInstantiatedModule.js | 10 +++++ ...xportDefaultForNonInstantiatedModule.types | 13 ++++++ .../exportDefaultForNonInstantiatedModule.ts | 8 ++++ 8 files changed, 52 insertions(+), 23 deletions(-) create mode 100644 tests/baselines/reference/exportDefaultForNonInstantiatedModule.js create mode 100644 tests/baselines/reference/exportDefaultForNonInstantiatedModule.types create mode 100644 tests/cases/compiler/exportDefaultForNonInstantiatedModule.ts diff --git a/src/compiler/emitter.ts b/src/compiler/emitter.ts index 9ddd690b96f..9a82e69c3fa 100644 --- a/src/compiler/emitter.ts +++ b/src/compiler/emitter.ts @@ -3924,26 +3924,28 @@ module ts { } function emitExportAssignment(node: ExportAssignment) { - if (languageVersion >= ScriptTarget.ES6) { - writeLine(); - emitStart(node); - write("export default "); - var expression = node.expression; - emit(expression); - if (expression.kind !== SyntaxKind.FunctionDeclaration && - expression.kind !== SyntaxKind.ClassDeclaration) { - write(";"); + if (!node.isExportEquals && resolver.isValueAliasDeclaration(node)) { + if (languageVersion >= ScriptTarget.ES6) { + writeLine(); + emitStart(node); + write("export default "); + var expression = node.expression; + emit(expression); + if (expression.kind !== SyntaxKind.FunctionDeclaration && + expression.kind !== SyntaxKind.ClassDeclaration) { + write(";"); + } + emitEnd(node); + } + else { + writeLine(); + emitStart(node); + emitContainingModuleName(node); + write(".default = "); + emit(node.expression); + write(";"); + emitEnd(node); } - emitEnd(node); - } - else if (!node.isExportEquals && resolver.isValueAliasDeclaration(node)) { - writeLine(); - emitStart(node); - emitContainingModuleName(node); - write(".default = "); - emit(node.expression); - write(";"); - emitEnd(node); } } diff --git a/tests/baselines/reference/es6ExportAssignment.js b/tests/baselines/reference/es6ExportAssignment.js index 113e28108b1..4a4e0368bb7 100644 --- a/tests/baselines/reference/es6ExportAssignment.js +++ b/tests/baselines/reference/es6ExportAssignment.js @@ -5,4 +5,3 @@ export = a; //// [es6ExportAssignment.js] var a = 10; -export default a; diff --git a/tests/baselines/reference/es6ExportEquals.js b/tests/baselines/reference/es6ExportEquals.js index d51f8740da0..68c5788c89b 100644 --- a/tests/baselines/reference/es6ExportEquals.js +++ b/tests/baselines/reference/es6ExportEquals.js @@ -8,7 +8,6 @@ export = f; //// [es6ExportEquals.js] export function f() { } -export default f; //// [es6ExportEquals.d.ts] diff --git a/tests/baselines/reference/es6ImportEqualsDeclaration.js b/tests/baselines/reference/es6ImportEqualsDeclaration.js index b8e9777a894..5195bdc631b 100644 --- a/tests/baselines/reference/es6ImportEqualsDeclaration.js +++ b/tests/baselines/reference/es6ImportEqualsDeclaration.js @@ -10,5 +10,4 @@ import a = require("server"); //// [server.js] var a = 10; -export default a; //// [client.js] diff --git a/tests/baselines/reference/es6ImportNamedImportInExportAssignment.js b/tests/baselines/reference/es6ImportNamedImportInExportAssignment.js index ea9e65db34a..eab345e4e7f 100644 --- a/tests/baselines/reference/es6ImportNamedImportInExportAssignment.js +++ b/tests/baselines/reference/es6ImportNamedImportInExportAssignment.js @@ -12,7 +12,6 @@ export = a; export var a = 10; //// [es6ImportNamedImportInExportAssignment_1.js] import { a } from "es6ImportNamedImportInExportAssignment_0"; -export default a; //// [es6ImportNamedImportInExportAssignment_0.d.ts] diff --git a/tests/baselines/reference/exportDefaultForNonInstantiatedModule.js b/tests/baselines/reference/exportDefaultForNonInstantiatedModule.js new file mode 100644 index 00000000000..f2b98e6eb44 --- /dev/null +++ b/tests/baselines/reference/exportDefaultForNonInstantiatedModule.js @@ -0,0 +1,10 @@ +//// [exportDefaultForNonInstantiatedModule.ts] + +module m { + export interface foo { + } +} +// Should not be emitted +export default m; + +//// [exportDefaultForNonInstantiatedModule.js] diff --git a/tests/baselines/reference/exportDefaultForNonInstantiatedModule.types b/tests/baselines/reference/exportDefaultForNonInstantiatedModule.types new file mode 100644 index 00000000000..940bb44658e --- /dev/null +++ b/tests/baselines/reference/exportDefaultForNonInstantiatedModule.types @@ -0,0 +1,13 @@ +=== tests/cases/compiler/exportDefaultForNonInstantiatedModule.ts === + +module m { +>m : unknown + + export interface foo { +>foo : foo + } +} +// Should not be emitted +export default m; +>m : unknown + diff --git a/tests/cases/compiler/exportDefaultForNonInstantiatedModule.ts b/tests/cases/compiler/exportDefaultForNonInstantiatedModule.ts new file mode 100644 index 00000000000..a1d1cab94b6 --- /dev/null +++ b/tests/cases/compiler/exportDefaultForNonInstantiatedModule.ts @@ -0,0 +1,8 @@ +// @target: ES6 + +module m { + export interface foo { + } +} +// Should not be emitted +export default m; \ No newline at end of file