diff --git a/src/compiler/emitter.ts b/src/compiler/emitter.ts index 9a82e69c3fa..fe72f174124 100644 --- a/src/compiler/emitter.ts +++ b/src/compiler/emitter.ts @@ -3706,18 +3706,7 @@ module ts { } else { write("{ "); - let importSpecifiers = (node.importClause.namedBindings).elements; - let currentTextPos = writer.getTextPos(); - let needsComma = false; - for (var i = 0, n = importSpecifiers.length; i < n; i++) { - if (resolver.isReferencedAliasDeclaration(importSpecifiers[i])) { - if (needsComma) { - write(", "); - } - needsComma = true; - emit(importSpecifiers[i]); - } - } + emitExportOrImportSpecifierList((node.importClause.namedBindings).elements); write(" }"); } emitEnd(node.importClause.namedBindings); @@ -3758,15 +3747,6 @@ module ts { } } - function emitImportOrExportSpecifier(node: ImportSpecifier) { - Debug.assert(languageVersion >= ScriptTarget.ES6); - if (node.propertyName) { - emit(node.propertyName); - write(" as "); - } - emit(node.name); - } - function emitExternalImportDeclaration(node: ImportDeclaration | ImportEqualsDeclaration) { if (contains(externalImports, node)) { let exportedImport = node.kind === SyntaxKind.ImportEqualsDeclaration && (node.flags & NodeFlags.Export) !== 0; @@ -3902,24 +3882,50 @@ module ts { } write(");"); } + emitEnd(node); } } else { - write("export "); - if (node.exportClause) { - // export { x, y, ... } - write("{ "); - emitCommaList(node.exportClause.elements); - write(" }"); + if (!node.exportClause || resolver.isValueAliasDeclaration(node)) { + emitStart(node); + write("export "); + if (node.exportClause) { + // export { x, y, ... } + write("{ "); + emitExportOrImportSpecifierList(node.exportClause.elements); + write(" }"); + } + else { + write("*"); + } + if (node.moduleSpecifier) { + write(" from "); + emitNodeWithoutSourceMap(node.moduleSpecifier); + } + write(";"); + emitEnd(node); } - else { - write("*"); + } + } + + function emitExportOrImportSpecifierList(specifiers: ImportOrExportSpecifier[]) { + Debug.assert(languageVersion >= ScriptTarget.ES6); + + let needsComma = false; + for (let specifier of specifiers) { + if (resolver.isValueAliasDeclaration(specifier)) { + if (needsComma) { + write(", "); + } + emitStart(specifier); + if (specifier.propertyName) { + emitNodeWithoutSourceMap(specifier.propertyName); + write(" as "); + } + emitNodeWithoutSourceMap(specifier.name); + emitEnd(specifier); + needsComma = true; } - if (node.moduleSpecifier) { - write(" from "); - emit(node.moduleSpecifier); - } - write(";"); } } @@ -4386,9 +4392,6 @@ module ts { return emitModuleDeclaration(node); case SyntaxKind.ImportDeclaration: return emitImportDeclaration(node); - case SyntaxKind.ImportSpecifier: - case SyntaxKind.ExportSpecifier: - return emitImportOrExportSpecifier(node); case SyntaxKind.ImportEqualsDeclaration: return emitImportEqualsDeclaration(node); case SyntaxKind.ExportDeclaration: diff --git a/tests/baselines/reference/es6ExportClause.js b/tests/baselines/reference/es6ExportClause.js index 4fba47ea7d1..f0d9bbe8cff 100644 --- a/tests/baselines/reference/es6ExportClause.js +++ b/tests/baselines/reference/es6ExportClause.js @@ -26,8 +26,7 @@ var m; var x = 10; export { c }; export { c as c2 }; -export { i, m as instantiatedModule }; -export { uninstantiated }; +export { m as instantiatedModule }; export { x }; diff --git a/tests/baselines/reference/es6ExportClauseWithoutModuleSpecifier.js b/tests/baselines/reference/es6ExportClauseWithoutModuleSpecifier.js index 7952bdb0bcc..c8528895462 100644 --- a/tests/baselines/reference/es6ExportClauseWithoutModuleSpecifier.js +++ b/tests/baselines/reference/es6ExportClauseWithoutModuleSpecifier.js @@ -32,8 +32,7 @@ export var x = 10; //// [client.js] export { c } from "server"; export { c as c2 } from "server"; -export { i, m as instantiatedModule } from "server"; -export { uninstantiated } from "server"; +export { m as instantiatedModule } from "server"; export { x } from "server"; diff --git a/tests/baselines/reference/es6ImportNamedImportParsingError.js b/tests/baselines/reference/es6ImportNamedImportParsingError.js index 81f141b3dd8..1be56ef4a08 100644 --- a/tests/baselines/reference/es6ImportNamedImportParsingError.js +++ b/tests/baselines/reference/es6ImportNamedImportParsingError.js @@ -24,5 +24,5 @@ from; } from; "es6ImportNamedImportParsingError_0"; -import { a } from , from; +import { } from , from; "es6ImportNamedImportParsingError_0";