From 3d802438f1deff4aa9980f0f46e75341cb9dd02d Mon Sep 17 00:00:00 2001 From: Mohamed Hegazy Date: Mon, 16 Mar 2015 21:18:31 -0700 Subject: [PATCH] Export classes defined wihtin internal modules correctelly --- src/compiler/emitter.ts | 18 +++++++++++++----- .../reference/es6ModuleClassDeclaration.js | 2 ++ .../reference/symbolDeclarationEmit12.js | 1 + 3 files changed, 16 insertions(+), 5 deletions(-) diff --git a/src/compiler/emitter.ts b/src/compiler/emitter.ts index f1305254455..29d05519f76 100644 --- a/src/compiler/emitter.ts +++ b/src/compiler/emitter.ts @@ -4929,6 +4929,18 @@ module ts { // a lexical declaration such as a LexicalDeclaration or a ClassDeclaration. writeLine(); emitMemberAssignments(node, NodeFlags.Static); + + // If this is an exported classes, but not on the top level (i.e. on an internal + // module), export it + if (!isES6ModuleMemberDeclaration(node) && (node.flags & NodeFlags.Export)) { + writeLine(); + emitStart(node); + emitModuleMemberName(node); + write(" = "); + emitDeclarationName(node); + emitEnd(node); + write(";"); + } } function emitClassDeclarationBelowES6(node: ClassDeclaration) { @@ -4972,11 +4984,7 @@ module ts { write(");"); emitEnd(node); - if (isES6ModuleMemberDeclaration(node)) { - // TODO update this to emit "export class " when ES67 class emit is available - emitES6NamedExportForDeclaration(node); - } - else if (node.flags & NodeFlags.Export && !(node.flags & NodeFlags.Default)) { + if (node.flags & NodeFlags.Export && !(node.flags & NodeFlags.Default)) { writeLine(); emitStart(node); emitModuleMemberName(node); diff --git a/tests/baselines/reference/es6ModuleClassDeclaration.js b/tests/baselines/reference/es6ModuleClassDeclaration.js index fb555196315..9676720fd0f 100644 --- a/tests/baselines/reference/es6ModuleClassDeclaration.js +++ b/tests/baselines/reference/es6ModuleClassDeclaration.js @@ -165,6 +165,7 @@ var m1; } c3.k = 20; c3.l = 30; + m1.c3 = c3; class c4 { constructor() { this.x = 10; @@ -205,6 +206,7 @@ var m2; } c3.k = 20; c3.l = 30; + m2.c3 = c3; class c4 { constructor() { this.x = 10; diff --git a/tests/baselines/reference/symbolDeclarationEmit12.js b/tests/baselines/reference/symbolDeclarationEmit12.js index 6165475a500..ab930b41580 100644 --- a/tests/baselines/reference/symbolDeclarationEmit12.js +++ b/tests/baselines/reference/symbolDeclarationEmit12.js @@ -27,4 +27,5 @@ var M; set [Symbol.isRegExp](x) { } } + M.C = C; })(M || (M = {}));