From a27b4d07ae2e9e26ec3d600376b102940e8dd2a6 Mon Sep 17 00:00:00 2001 From: Yui Date: Mon, 11 Apr 2016 15:36:49 -0700 Subject: [PATCH] [Transform]: fix emit __extends within system.registry (#7973) * Fix 7912: emit extends-helper inside System.registry * Fix 7912: emit extends-helper inside System.registry * Address PR: move setEmitNodeFlag into updateSourceFile * Address PR: fix comment --- src/compiler/transformers/module/system.ts | 8 ++++++-- tests/baselines/reference/systemModuleWithSuperClass.js | 4 ++-- 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/src/compiler/transformers/module/system.ts b/src/compiler/transformers/module/system.ts index c18425a8bda..be9390beba8 100644 --- a/src/compiler/transformers/module/system.ts +++ b/src/compiler/transformers/module/system.ts @@ -10,6 +10,7 @@ namespace ts { } const { + getNodeEmitFlags, startLexicalEnvironment, endLexicalEnvironment, hoistVariableDeclaration, @@ -120,6 +121,8 @@ namespace ts { ); // Write the call to `System.register` + // Clear the emit-helpers flag for later passes since we'll have already used it in the module body + // So the helper will be emit at the correct position instead of at the top of the source-file return updateSourceFile(node, [ createStatement( createCall( @@ -129,7 +132,7 @@ namespace ts { : [dependencies, body] ) ) - ]); + ], /*nodeEmitFlags*/ ~NodeEmitFlags.EmitEmitHelpers & getNodeEmitFlags(node)); } /** @@ -1374,9 +1377,10 @@ namespace ts { hoistBindingElement(node, /*isExported*/ false); } - function updateSourceFile(node: SourceFile, statements: Statement[]) { + function updateSourceFile(node: SourceFile, statements: Statement[], nodeEmitFlags: NodeEmitFlags) { const updated = getMutableClone(node); updated.statements = createNodeArray(statements, node.statements); + setNodeEmitFlags(updated, nodeEmitFlags); return updated; } } diff --git a/tests/baselines/reference/systemModuleWithSuperClass.js b/tests/baselines/reference/systemModuleWithSuperClass.js index a9bb4418608..31cd542d2e2 100644 --- a/tests/baselines/reference/systemModuleWithSuperClass.js +++ b/tests/baselines/reference/systemModuleWithSuperClass.js @@ -30,14 +30,14 @@ System.register([], function (exports_1, context_1) { }; }); //// [bar.js] -System.register(['./foo'], function(exports_1, context_1) { +System.register(["./foo"], function (exports_1, context_1) { "use strict"; - var __moduleName = context_1 && context_1.id; var __extends = (this && this.__extends) || function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; function __() { this.constructor = d; } d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); }; + var __moduleName = context_1 && context_1.id; var foo_1, Bar; return { setters: [