From 956d7a82f337f50b8778fbc1578abf8897ceccd6 Mon Sep 17 00:00:00 2001 From: Anders Hejlsberg Date: Sun, 22 Mar 2015 12:18:38 -0700 Subject: [PATCH] Fixing emit for import d, * as foo from "foo" case --- src/compiler/emitter.ts | 38 ++++++++++++++++++++++++++------------ 1 file changed, 26 insertions(+), 12 deletions(-) diff --git a/src/compiler/emitter.ts b/src/compiler/emitter.ts index 03d4cc74fac..299ac0a2b6c 100644 --- a/src/compiler/emitter.ts +++ b/src/compiler/emitter.ts @@ -5004,10 +5004,6 @@ module ts { } } - function isNakedImport(node: ImportDeclaration | ImportEqualsDeclaration) { - return node.kind === SyntaxKind.ImportDeclaration && !(node).importClause; - } - function emitExportImportAssignments(node: Node) { if (isAliasSymbolDeclaration(node) && resolver.isValueAliasDeclaration(node)) { emitExportMemberAssignments((node).name); @@ -5017,29 +5013,47 @@ module ts { function emitImportDeclaration(node: ImportDeclaration | ImportEqualsDeclaration) { if (contains(externalImports, node)) { - let exportedImport = node.kind === SyntaxKind.ImportEqualsDeclaration && (node.flags & NodeFlags.Export) !== 0; + let isExportedImport = node.kind === SyntaxKind.ImportEqualsDeclaration && (node.flags & NodeFlags.Export) !== 0; let namespaceDeclaration = getNamespaceDeclarationNode(node); if (compilerOptions.module !== ModuleKind.AMD) { emitLeadingComments(node); emitStart(node); - if (namespaceDeclaration) { - if (!exportedImport) write("var "); + let isDefaultImport = node.kind === SyntaxKind.ImportDeclaration && (node).importClause && !!(node).importClause.name; + if (namespaceDeclaration && !isDefaultImport) { + // import x = require("foo") + // import * as x from "foo" + if (!isExportedImport) write("var "); emitModuleMemberName(namespaceDeclaration); write(" = "); } - else if (!isNakedImport(node)) { - write("var "); - write(resolver.getGeneratedNameForNode(node)); - write(" = "); + else { + // import "foo" + // import x from "foo" + // import { x, y } from "foo" + // import d, * as x from "foo" + // import d, { x, y } from "foo" + let isNakedImport = SyntaxKind.ImportDeclaration && !(node).importClause; + if (!isNakedImport) { + write("var "); + write(resolver.getGeneratedNameForNode(node)); + write(" = "); + } } emitRequire(getExternalModuleName(node)); + if (namespaceDeclaration && isDefaultImport) { + // import d, * as x from "foo" + write(", "); + emitModuleMemberName(namespaceDeclaration); + write(" = "); + write(resolver.getGeneratedNameForNode(node)); + } write(";"); emitEnd(node); emitExportImportAssignments(node); emitTrailingComments(node); } else { - if (exportedImport) { + if (isExportedImport) { emitModuleMemberName(namespaceDeclaration); write(" = "); emit(namespaceDeclaration.name);