From b21a7399e563011b9cf861d30694a3f033c953cf Mon Sep 17 00:00:00 2001 From: Ron Buckton Date: Sat, 24 Sep 2016 15:35:54 -0700 Subject: [PATCH] Fix downlevel async hoisting --- src/compiler/transformers/generators.ts | 9 +++++++-- tests/baselines/reference/asyncArrowFunction7_es5.js | 4 ++-- 2 files changed, 9 insertions(+), 4 deletions(-) diff --git a/src/compiler/transformers/generators.ts b/src/compiler/transformers/generators.ts index d1e2b6033a684..f05a012378ac6 100644 --- a/src/compiler/transformers/generators.ts +++ b/src/compiler/transformers/generators.ts @@ -573,11 +573,11 @@ namespace ts { operationLocations = undefined; state = createTempVariable(/*recordTempVariable*/ undefined); - const statementOffset = addPrologueDirectives(statements, body.statements, /*ensureUseStrict*/ false, visitor); - // Build the generator startLexicalEnvironment(); + const statementOffset = addPrologueDirectives(statements, body.statements, /*ensureUseStrict*/ false, visitor); + transformAndEmitStatements(body.statements, statementOffset); const buildResult = build(); @@ -615,6 +615,11 @@ namespace ts { return undefined; } else { + // Do not hoist custom prologues. + if (node.emitFlags & NodeEmitFlags.CustomPrologue) { + return node; + } + for (const variable of node.declarationList.declarations) { hoistVariableDeclaration(variable.name); } diff --git a/tests/baselines/reference/asyncArrowFunction7_es5.js b/tests/baselines/reference/asyncArrowFunction7_es5.js index 19e589fa54292..f2edb2b653728 100644 --- a/tests/baselines/reference/asyncArrowFunction7_es5.js +++ b/tests/baselines/reference/asyncArrowFunction7_es5.js @@ -9,7 +9,7 @@ var bar = async (): Promise => { //// [asyncArrowFunction7_es5.js] var _this = this; var bar = function () { return __awaiter(_this, void 0, void 0, function () { - _this = this; + var _this = this; var foo; return __generator(this, function (_a) { foo = function (a) { @@ -22,4 +22,4 @@ var bar = function () { return __awaiter(_this, void 0, void 0, function () { }; return [2 /*return*/]; }); -}); var _this; }; +}); };