From 5cfb3a2fe344a5350734305193e6cc99516285ca Mon Sep 17 00:00:00 2001 From: Ron Buckton Date: Fri, 28 Oct 2022 18:36:40 -0400 Subject: [PATCH] Only call return() for an abrupt completion in user code (#51297) --- src/compiler/transformers/es2018.ts | 50 +++- .../unittests/evaluation/forAwaitOf.ts | 27 ++ .../emitter.forAwait(target=es2015).js | 109 +++++-- .../emitter.forAwait(target=es2017).js | 109 +++++-- .../reference/emitter.forAwait(target=es5).js | 275 +++++++++++------- .../forAwaitPerIterationBindingDownlevel.js | 81 +++--- .../operationsAvailableOnPromisedType.js | 41 +-- ...velAwait.1(module=es2022,target=es2015).js | 17 +- ...velAwait.1(module=es2022,target=es2017).js | 17 +- ...velAwait.1(module=esnext,target=es2015).js | 17 +- ...velAwait.1(module=esnext,target=es2017).js | 17 +- ...velAwait.1(module=system,target=es2015).js | 17 +- ...velAwait.1(module=system,target=es2017).js | 17 +- 13 files changed, 528 insertions(+), 266 deletions(-) diff --git a/src/compiler/transformers/es2018.ts b/src/compiler/transformers/es2018.ts index 394df42cbf332..abb2e5965cc5b 100644 --- a/src/compiler/transformers/es2018.ts +++ b/src/compiler/transformers/es2018.ts @@ -643,12 +643,26 @@ namespace ts { return node; } - function convertForOfStatementHead(node: ForOfStatement, boundValue: Expression) { - const binding = createForOfBindingStatement(factory, node.initializer, boundValue); + function convertForOfStatementHead(node: ForOfStatement, boundValue: Expression, nonUserCode: Identifier) { + const value = factory.createTempVariable(hoistVariableDeclaration); + const iteratorValueExpression = factory.createAssignment(value, boundValue); + const iteratorValueStatement = factory.createExpressionStatement(iteratorValueExpression); + setSourceMapRange(iteratorValueStatement, node.expression); + + const exitNonUserCodeExpression = factory.createAssignment(nonUserCode, factory.createFalse()); + const exitNonUserCodeStatement = factory.createExpressionStatement(exitNonUserCodeExpression); + setSourceMapRange(exitNonUserCodeStatement, node.expression); + + const enterNonUserCodeExpression = factory.createAssignment(nonUserCode, factory.createTrue()); + const enterNonUserCodeStatement = factory.createExpressionStatement(enterNonUserCodeExpression); + setSourceMapRange(exitNonUserCodeStatement, node.expression); + + const statements: Statement[] = []; + const binding = createForOfBindingStatement(factory, node.initializer, value); + statements.push(visitNode(binding, visitor, isStatement)); let bodyLocation: TextRange | undefined; let statementsLocation: TextRange | undefined; - const statements: Statement[] = [visitNode(binding, visitor, isStatement)]; const statement = visitIterationBody(node.statement, visitor, context); if (isBlock(statement)) { addRange(statements, statement.statements); @@ -659,7 +673,7 @@ namespace ts { statements.push(statement); } - return setEmitFlags( + const body = setEmitFlags( setTextRange( factory.createBlock( setTextRange(factory.createNodeArray(statements), statementsLocation), @@ -669,6 +683,18 @@ namespace ts { ), EmitFlags.NoSourceMap | EmitFlags.NoTokenSourceMaps ); + + return factory.createBlock([ + iteratorValueStatement, + exitNonUserCodeStatement, + factory.createTryStatement( + body, + /*catchClause*/ undefined, + factory.createBlock([ + enterNonUserCodeStatement + ]) + ) + ]); } function createDownlevelAwait(expression: Expression) { @@ -681,6 +707,8 @@ namespace ts { const expression = visitNode(node.expression, visitor, isExpression); const iterator = isIdentifier(expression) ? factory.getGeneratedNameForNode(expression) : factory.createTempVariable(/*recordTempVariable*/ undefined); const result = isIdentifier(expression) ? factory.getGeneratedNameForNode(iterator) : factory.createTempVariable(/*recordTempVariable*/ undefined); + const nonUserCode = factory.createTempVariable(/*recordTempVariable*/ undefined); + const done = factory.createTempVariable(hoistVariableDeclaration); const errorRecord = factory.createUniqueName("e"); const catchVariable = factory.getGeneratedNameForNode(errorRecord); const returnMethod = factory.createTempVariable(/*recordTempVariable*/ undefined); @@ -704,6 +732,7 @@ namespace ts { /*initializer*/ setEmitFlags( setTextRange( factory.createVariableDeclarationList([ + factory.createVariableDeclaration(nonUserCode, /*exclamationToken*/ undefined, /*type*/ undefined, factory.createTrue()), setTextRange(factory.createVariableDeclaration(iterator, /*exclamationToken*/ undefined, /*type*/ undefined, initializer), node.expression), factory.createVariableDeclaration(result) ]), @@ -711,12 +740,13 @@ namespace ts { ), EmitFlags.NoHoisting ), - /*condition*/ factory.createComma( + /*condition*/ factory.inlineExpressions([ factory.createAssignment(result, createDownlevelAwait(callNext)), - factory.createLogicalNot(getDone) - ), + factory.createAssignment(done, getDone), + factory.createLogicalNot(done) + ]), /*incrementor*/ undefined, - /*statement*/ convertForOfStatementHead(node, getValue) + /*statement*/ convertForOfStatementHead(node, getValue, nonUserCode) ), /*location*/ node ), @@ -754,8 +784,8 @@ namespace ts { factory.createIfStatement( factory.createLogicalAnd( factory.createLogicalAnd( - result, - factory.createLogicalNot(getDone) + factory.createLogicalNot(nonUserCode), + factory.createLogicalNot(done), ), factory.createAssignment( returnMethod, diff --git a/src/testRunner/unittests/evaluation/forAwaitOf.ts b/src/testRunner/unittests/evaluation/forAwaitOf.ts index c7be018cbc9e6..c541d155bfca1 100644 --- a/src/testRunner/unittests/evaluation/forAwaitOf.ts +++ b/src/testRunner/unittests/evaluation/forAwaitOf.ts @@ -102,4 +102,31 @@ describe("unittests:: evaluation:: forAwaitOfEvaluation", () => { assert.instanceOf(result.output[1], Promise); assert.instanceOf(result.output[2], Promise); }); + + it("don't call return when non-user code throws (es2015)", async () => { + const result = evaluator.evaluateTypeScript(` + let returnCalled = false; + async function f() { + let i = 0; + const iterator = { + [Symbol.asyncIterator](): AsyncIterableIterator { return this; }, + async next() { + i++; + if (i < 2) return { value: undefined, done: false }; + throw new Error(); + }, + async return() { + returnCalled = true; + } + }; + for await (const item of iterator) { + } + } + export async function main() { + try { await f(); } catch { } + return returnCalled; + } + `, { target: ts.ScriptTarget.ES2015 }); + assert.isFalse(await result.main()); + }); }); diff --git a/tests/baselines/reference/emitter.forAwait(target=es2015).js b/tests/baselines/reference/emitter.forAwait(target=es2015).js index a651bbbb92cc8..7281878c798eb 100644 --- a/tests/baselines/reference/emitter.forAwait(target=es2015).js +++ b/tests/baselines/reference/emitter.forAwait(target=es2015).js @@ -68,18 +68,25 @@ var __asyncValues = (this && this.__asyncValues) || function (o) { function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); } }; function f1() { - var e_1, _a; + var _a, e_1, _b, _c; return __awaiter(this, void 0, void 0, function* () { let y; try { - for (var y_1 = __asyncValues(y), y_1_1; y_1_1 = yield y_1.next(), !y_1_1.done;) { - const x = y_1_1.value; + for (var _d = true, y_1 = __asyncValues(y), y_1_1; y_1_1 = yield y_1.next(), _a = y_1_1.done, !_a;) { + _c = y_1_1.value; + _d = false; + try { + const x = _c; + } + finally { + _d = true; + } } } catch (e_1_1) { e_1 = { error: e_1_1 }; } finally { try { - if (y_1_1 && !y_1_1.done && (_a = y_1.return)) yield _a.call(y_1); + if (!_d && !_a && (_b = y_1.return)) yield _b.call(y_1); } finally { if (e_1) throw e_1.error; } } @@ -103,18 +110,25 @@ var __asyncValues = (this && this.__asyncValues) || function (o) { function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); } }; function f2() { - var e_1, _a; + var _a, e_1, _b, _c; return __awaiter(this, void 0, void 0, function* () { let x, y; try { - for (var y_1 = __asyncValues(y), y_1_1; y_1_1 = yield y_1.next(), !y_1_1.done;) { - x = y_1_1.value; + for (var _d = true, y_1 = __asyncValues(y), y_1_1; y_1_1 = yield y_1.next(), _a = y_1_1.done, !_a;) { + _c = y_1_1.value; + _d = false; + try { + x = _c; + } + finally { + _d = true; + } } } catch (e_1_1) { e_1 = { error: e_1_1 }; } finally { try { - if (y_1_1 && !y_1_1.done && (_a = y_1.return)) yield _a.call(y_1); + if (!_d && !_a && (_b = y_1.return)) yield _b.call(y_1); } finally { if (e_1) throw e_1.error; } } @@ -142,17 +156,24 @@ var __asyncGenerator = (this && this.__asyncGenerator) || function (thisArg, _ar }; function f3() { return __asyncGenerator(this, arguments, function* f3_1() { - var e_1, _a; + var _a, e_1, _b, _c; let y; try { - for (var y_1 = __asyncValues(y), y_1_1; y_1_1 = yield __await(y_1.next()), !y_1_1.done;) { - const x = y_1_1.value; + for (var _d = true, y_1 = __asyncValues(y), y_1_1; y_1_1 = yield __await(y_1.next()), _a = y_1_1.done, !_a;) { + _c = y_1_1.value; + _d = false; + try { + const x = _c; + } + finally { + _d = true; + } } } catch (e_1_1) { e_1 = { error: e_1_1 }; } finally { try { - if (y_1_1 && !y_1_1.done && (_a = y_1.return)) yield __await(_a.call(y_1)); + if (!_d && !_a && (_b = y_1.return)) yield __await(_b.call(y_1)); } finally { if (e_1) throw e_1.error; } } @@ -180,17 +201,24 @@ var __asyncGenerator = (this && this.__asyncGenerator) || function (thisArg, _ar }; function f4() { return __asyncGenerator(this, arguments, function* f4_1() { - var e_1, _a; + var _a, e_1, _b, _c; let x, y; try { - for (var y_1 = __asyncValues(y), y_1_1; y_1_1 = yield __await(y_1.next()), !y_1_1.done;) { - x = y_1_1.value; + for (var _d = true, y_1 = __asyncValues(y), y_1_1; y_1_1 = yield __await(y_1.next()), _a = y_1_1.done, !_a;) { + _c = y_1_1.value; + _d = false; + try { + x = _c; + } + finally { + _d = true; + } } } catch (e_1_1) { e_1 = { error: e_1_1 }; } finally { try { - if (y_1_1 && !y_1_1.done && (_a = y_1.return)) yield __await(_a.call(y_1)); + if (!_d && !_a && (_b = y_1.return)) yield __await(_b.call(y_1)); } finally { if (e_1) throw e_1.error; } } @@ -215,19 +243,26 @@ var __asyncValues = (this && this.__asyncValues) || function (o) { }; // https://github.com/Microsoft/TypeScript/issues/21363 function f5() { - var e_1, _a; + var _a, e_1, _b, _c; return __awaiter(this, void 0, void 0, function* () { let y; try { - outer: for (var y_1 = __asyncValues(y), y_1_1; y_1_1 = yield y_1.next(), !y_1_1.done;) { - const x = y_1_1.value; - continue outer; + outer: for (var _d = true, y_1 = __asyncValues(y), y_1_1; y_1_1 = yield y_1.next(), _a = y_1_1.done, !_a;) { + _c = y_1_1.value; + _d = false; + try { + const x = _c; + continue outer; + } + finally { + _d = true; + } } } catch (e_1_1) { e_1 = { error: e_1_1 }; } finally { try { - if (y_1_1 && !y_1_1.done && (_a = y_1.return)) yield _a.call(y_1); + if (!_d && !_a && (_b = y_1.return)) yield _b.call(y_1); } finally { if (e_1) throw e_1.error; } } @@ -256,18 +291,25 @@ var __asyncGenerator = (this && this.__asyncGenerator) || function (thisArg, _ar // https://github.com/Microsoft/TypeScript/issues/21363 function f6() { return __asyncGenerator(this, arguments, function* f6_1() { - var e_1, _a; + var _a, e_1, _b, _c; let y; try { - outer: for (var y_1 = __asyncValues(y), y_1_1; y_1_1 = yield __await(y_1.next()), !y_1_1.done;) { - const x = y_1_1.value; - continue outer; + outer: for (var _d = true, y_1 = __asyncValues(y), y_1_1; y_1_1 = yield __await(y_1.next()), _a = y_1_1.done, !_a;) { + _c = y_1_1.value; + _d = false; + try { + const x = _c; + continue outer; + } + finally { + _d = true; + } } } catch (e_1_1) { e_1 = { error: e_1_1 }; } finally { try { - if (y_1_1 && !y_1_1.done && (_a = y_1.return)) yield __await(_a.call(y_1)); + if (!_d && !_a && (_b = y_1.return)) yield __await(_b.call(y_1)); } finally { if (e_1) throw e_1.error; } } @@ -296,18 +338,25 @@ var __asyncGenerator = (this && this.__asyncGenerator) || function (thisArg, _ar // https://github.com/microsoft/TypeScript/issues/36166 function f7() { return __asyncGenerator(this, arguments, function* f7_1() { - var e_1, _a; + var _a, e_1, _b, _c; let y; for (;;) { try { - for (var y_1 = (e_1 = void 0, __asyncValues(y)), y_1_1; y_1_1 = yield __await(y_1.next()), !y_1_1.done;) { - const x = y_1_1.value; + for (var _d = true, y_1 = (e_1 = void 0, __asyncValues(y)), y_1_1; y_1_1 = yield __await(y_1.next()), _a = y_1_1.done, !_a;) { + _c = y_1_1.value; + _d = false; + try { + const x = _c; + } + finally { + _d = true; + } } } catch (e_1_1) { e_1 = { error: e_1_1 }; } finally { try { - if (y_1_1 && !y_1_1.done && (_a = y_1.return)) yield __await(_a.call(y_1)); + if (!_d && !_a && (_b = y_1.return)) yield __await(_b.call(y_1)); } finally { if (e_1) throw e_1.error; } } diff --git a/tests/baselines/reference/emitter.forAwait(target=es2017).js b/tests/baselines/reference/emitter.forAwait(target=es2017).js index e7ab46bccc5a9..d1abbe9a92429 100644 --- a/tests/baselines/reference/emitter.forAwait(target=es2017).js +++ b/tests/baselines/reference/emitter.forAwait(target=es2017).js @@ -59,17 +59,24 @@ var __asyncValues = (this && this.__asyncValues) || function (o) { function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); } }; async function f1() { - var e_1, _a; + var _a, e_1, _b, _c; let y; try { - for (var y_1 = __asyncValues(y), y_1_1; y_1_1 = await y_1.next(), !y_1_1.done;) { - const x = y_1_1.value; + for (var _d = true, y_1 = __asyncValues(y), y_1_1; y_1_1 = await y_1.next(), _a = y_1_1.done, !_a;) { + _c = y_1_1.value; + _d = false; + try { + const x = _c; + } + finally { + _d = true; + } } } catch (e_1_1) { e_1 = { error: e_1_1 }; } finally { try { - if (y_1_1 && !y_1_1.done && (_a = y_1.return)) await _a.call(y_1); + if (!_d && !_a && (_b = y_1.return)) await _b.call(y_1); } finally { if (e_1) throw e_1.error; } } @@ -83,17 +90,24 @@ var __asyncValues = (this && this.__asyncValues) || function (o) { function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); } }; async function f2() { - var e_1, _a; + var _a, e_1, _b, _c; let x, y; try { - for (var y_1 = __asyncValues(y), y_1_1; y_1_1 = await y_1.next(), !y_1_1.done;) { - x = y_1_1.value; + for (var _d = true, y_1 = __asyncValues(y), y_1_1; y_1_1 = await y_1.next(), _a = y_1_1.done, !_a;) { + _c = y_1_1.value; + _d = false; + try { + x = _c; + } + finally { + _d = true; + } } } catch (e_1_1) { e_1 = { error: e_1_1 }; } finally { try { - if (y_1_1 && !y_1_1.done && (_a = y_1.return)) await _a.call(y_1); + if (!_d && !_a && (_b = y_1.return)) await _b.call(y_1); } finally { if (e_1) throw e_1.error; } } @@ -120,17 +134,24 @@ var __asyncGenerator = (this && this.__asyncGenerator) || function (thisArg, _ar }; function f3() { return __asyncGenerator(this, arguments, function* f3_1() { - var e_1, _a; + var _a, e_1, _b, _c; let y; try { - for (var y_1 = __asyncValues(y), y_1_1; y_1_1 = yield __await(y_1.next()), !y_1_1.done;) { - const x = y_1_1.value; + for (var _d = true, y_1 = __asyncValues(y), y_1_1; y_1_1 = yield __await(y_1.next()), _a = y_1_1.done, !_a;) { + _c = y_1_1.value; + _d = false; + try { + const x = _c; + } + finally { + _d = true; + } } } catch (e_1_1) { e_1 = { error: e_1_1 }; } finally { try { - if (y_1_1 && !y_1_1.done && (_a = y_1.return)) yield __await(_a.call(y_1)); + if (!_d && !_a && (_b = y_1.return)) yield __await(_b.call(y_1)); } finally { if (e_1) throw e_1.error; } } @@ -158,17 +179,24 @@ var __asyncGenerator = (this && this.__asyncGenerator) || function (thisArg, _ar }; function f4() { return __asyncGenerator(this, arguments, function* f4_1() { - var e_1, _a; + var _a, e_1, _b, _c; let x, y; try { - for (var y_1 = __asyncValues(y), y_1_1; y_1_1 = yield __await(y_1.next()), !y_1_1.done;) { - x = y_1_1.value; + for (var _d = true, y_1 = __asyncValues(y), y_1_1; y_1_1 = yield __await(y_1.next()), _a = y_1_1.done, !_a;) { + _c = y_1_1.value; + _d = false; + try { + x = _c; + } + finally { + _d = true; + } } } catch (e_1_1) { e_1 = { error: e_1_1 }; } finally { try { - if (y_1_1 && !y_1_1.done && (_a = y_1.return)) yield __await(_a.call(y_1)); + if (!_d && !_a && (_b = y_1.return)) yield __await(_b.call(y_1)); } finally { if (e_1) throw e_1.error; } } @@ -184,18 +212,25 @@ var __asyncValues = (this && this.__asyncValues) || function (o) { }; // https://github.com/Microsoft/TypeScript/issues/21363 async function f5() { - var e_1, _a; + var _a, e_1, _b, _c; let y; try { - outer: for (var y_1 = __asyncValues(y), y_1_1; y_1_1 = await y_1.next(), !y_1_1.done;) { - const x = y_1_1.value; - continue outer; + outer: for (var _d = true, y_1 = __asyncValues(y), y_1_1; y_1_1 = await y_1.next(), _a = y_1_1.done, !_a;) { + _c = y_1_1.value; + _d = false; + try { + const x = _c; + continue outer; + } + finally { + _d = true; + } } } catch (e_1_1) { e_1 = { error: e_1_1 }; } finally { try { - if (y_1_1 && !y_1_1.done && (_a = y_1.return)) await _a.call(y_1); + if (!_d && !_a && (_b = y_1.return)) await _b.call(y_1); } finally { if (e_1) throw e_1.error; } } @@ -223,18 +258,25 @@ var __asyncGenerator = (this && this.__asyncGenerator) || function (thisArg, _ar // https://github.com/Microsoft/TypeScript/issues/21363 function f6() { return __asyncGenerator(this, arguments, function* f6_1() { - var e_1, _a; + var _a, e_1, _b, _c; let y; try { - outer: for (var y_1 = __asyncValues(y), y_1_1; y_1_1 = yield __await(y_1.next()), !y_1_1.done;) { - const x = y_1_1.value; - continue outer; + outer: for (var _d = true, y_1 = __asyncValues(y), y_1_1; y_1_1 = yield __await(y_1.next()), _a = y_1_1.done, !_a;) { + _c = y_1_1.value; + _d = false; + try { + const x = _c; + continue outer; + } + finally { + _d = true; + } } } catch (e_1_1) { e_1 = { error: e_1_1 }; } finally { try { - if (y_1_1 && !y_1_1.done && (_a = y_1.return)) yield __await(_a.call(y_1)); + if (!_d && !_a && (_b = y_1.return)) yield __await(_b.call(y_1)); } finally { if (e_1) throw e_1.error; } } @@ -263,18 +305,25 @@ var __asyncGenerator = (this && this.__asyncGenerator) || function (thisArg, _ar // https://github.com/microsoft/TypeScript/issues/36166 function f7() { return __asyncGenerator(this, arguments, function* f7_1() { - var e_1, _a; + var _a, e_1, _b, _c; let y; for (;;) { try { - for (var y_1 = (e_1 = void 0, __asyncValues(y)), y_1_1; y_1_1 = yield __await(y_1.next()), !y_1_1.done;) { - const x = y_1_1.value; + for (var _d = true, y_1 = (e_1 = void 0, __asyncValues(y)), y_1_1; y_1_1 = yield __await(y_1.next()), _a = y_1_1.done, !_a;) { + _c = y_1_1.value; + _d = false; + try { + const x = _c; + } + finally { + _d = true; + } } } catch (e_1_1) { e_1 = { error: e_1_1 }; } finally { try { - if (y_1_1 && !y_1_1.done && (_a = y_1.return)) yield __await(_a.call(y_1)); + if (!_d && !_a && (_b = y_1.return)) yield __await(_b.call(y_1)); } finally { if (e_1) throw e_1.error; } } diff --git a/tests/baselines/reference/emitter.forAwait(target=es5).js b/tests/baselines/reference/emitter.forAwait(target=es5).js index 671c81d2deafb..d8bf8898381a5 100644 --- a/tests/baselines/reference/emitter.forAwait(target=es5).js +++ b/tests/baselines/reference/emitter.forAwait(target=es5).js @@ -95,33 +95,40 @@ var __asyncValues = (this && this.__asyncValues) || function (o) { function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); } }; function f1() { - var e_1, _a; + var _a, e_1, _b, _c; return __awaiter(this, void 0, void 0, function () { - var y, y_1, y_1_1, x, e_1_1; - return __generator(this, function (_b) { - switch (_b.label) { + var y, _d, y_1, y_1_1, x, e_1_1; + return __generator(this, function (_e) { + switch (_e.label) { case 0: - _b.trys.push([0, 5, 6, 11]); - y_1 = __asyncValues(y); - _b.label = 1; + _e.trys.push([0, 5, 6, 11]); + _d = true, y_1 = __asyncValues(y); + _e.label = 1; case 1: return [4 /*yield*/, y_1.next()]; case 2: - if (!(y_1_1 = _b.sent(), !y_1_1.done)) return [3 /*break*/, 4]; - x = y_1_1.value; - _b.label = 3; + if (!(y_1_1 = _e.sent(), _a = y_1_1.done, !_a)) return [3 /*break*/, 4]; + _c = y_1_1.value; + _d = false; + try { + x = _c; + } + finally { + _d = true; + } + _e.label = 3; case 3: return [3 /*break*/, 1]; case 4: return [3 /*break*/, 11]; case 5: - e_1_1 = _b.sent(); + e_1_1 = _e.sent(); e_1 = { error: e_1_1 }; return [3 /*break*/, 11]; case 6: - _b.trys.push([6, , 9, 10]); - if (!(y_1_1 && !y_1_1.done && (_a = y_1.return))) return [3 /*break*/, 8]; - return [4 /*yield*/, _a.call(y_1)]; + _e.trys.push([6, , 9, 10]); + if (!(!_d && !_a && (_b = y_1.return))) return [3 /*break*/, 8]; + return [4 /*yield*/, _b.call(y_1)]; case 7: - _b.sent(); - _b.label = 8; + _e.sent(); + _e.label = 8; case 8: return [3 /*break*/, 10]; case 9: if (e_1) throw e_1.error; @@ -177,33 +184,40 @@ var __asyncValues = (this && this.__asyncValues) || function (o) { function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); } }; function f2() { - var e_1, _a; + var _a, e_1, _b, _c; return __awaiter(this, void 0, void 0, function () { - var x, y, y_1, y_1_1, e_1_1; - return __generator(this, function (_b) { - switch (_b.label) { + var x, y, _d, y_1, y_1_1, e_1_1; + return __generator(this, function (_e) { + switch (_e.label) { case 0: - _b.trys.push([0, 5, 6, 11]); - y_1 = __asyncValues(y); - _b.label = 1; + _e.trys.push([0, 5, 6, 11]); + _d = true, y_1 = __asyncValues(y); + _e.label = 1; case 1: return [4 /*yield*/, y_1.next()]; case 2: - if (!(y_1_1 = _b.sent(), !y_1_1.done)) return [3 /*break*/, 4]; - x = y_1_1.value; - _b.label = 3; + if (!(y_1_1 = _e.sent(), _a = y_1_1.done, !_a)) return [3 /*break*/, 4]; + _c = y_1_1.value; + _d = false; + try { + x = _c; + } + finally { + _d = true; + } + _e.label = 3; case 3: return [3 /*break*/, 1]; case 4: return [3 /*break*/, 11]; case 5: - e_1_1 = _b.sent(); + e_1_1 = _e.sent(); e_1 = { error: e_1_1 }; return [3 /*break*/, 11]; case 6: - _b.trys.push([6, , 9, 10]); - if (!(y_1_1 && !y_1_1.done && (_a = y_1.return))) return [3 /*break*/, 8]; - return [4 /*yield*/, _a.call(y_1)]; + _e.trys.push([6, , 9, 10]); + if (!(!_d && !_a && (_b = y_1.return))) return [3 /*break*/, 8]; + return [4 /*yield*/, _b.call(y_1)]; case 7: - _b.sent(); - _b.label = 8; + _e.sent(); + _e.label = 8; case 8: return [3 /*break*/, 10]; case 9: if (e_1) throw e_1.error; @@ -263,32 +277,39 @@ var __asyncGenerator = (this && this.__asyncGenerator) || function (thisArg, _ar }; function f3() { return __asyncGenerator(this, arguments, function f3_1() { - var y, y_1, y_1_1, x, e_1_1; - var e_1, _a; - return __generator(this, function (_b) { - switch (_b.label) { + var y, _a, y_1, y_1_1, x, e_1_1; + var _b, e_1, _c, _d; + return __generator(this, function (_e) { + switch (_e.label) { case 0: - _b.trys.push([0, 5, 6, 11]); - y_1 = __asyncValues(y); - _b.label = 1; + _e.trys.push([0, 5, 6, 11]); + _a = true, y_1 = __asyncValues(y); + _e.label = 1; case 1: return [4 /*yield*/, __await(y_1.next())]; case 2: - if (!(y_1_1 = _b.sent(), !y_1_1.done)) return [3 /*break*/, 4]; - x = y_1_1.value; - _b.label = 3; + if (!(y_1_1 = _e.sent(), _b = y_1_1.done, !_b)) return [3 /*break*/, 4]; + _d = y_1_1.value; + _a = false; + try { + x = _d; + } + finally { + _a = true; + } + _e.label = 3; case 3: return [3 /*break*/, 1]; case 4: return [3 /*break*/, 11]; case 5: - e_1_1 = _b.sent(); + e_1_1 = _e.sent(); e_1 = { error: e_1_1 }; return [3 /*break*/, 11]; case 6: - _b.trys.push([6, , 9, 10]); - if (!(y_1_1 && !y_1_1.done && (_a = y_1.return))) return [3 /*break*/, 8]; - return [4 /*yield*/, __await(_a.call(y_1))]; + _e.trys.push([6, , 9, 10]); + if (!(!_a && !_b && (_c = y_1.return))) return [3 /*break*/, 8]; + return [4 /*yield*/, __await(_c.call(y_1))]; case 7: - _b.sent(); - _b.label = 8; + _e.sent(); + _e.label = 8; case 8: return [3 /*break*/, 10]; case 9: if (e_1) throw e_1.error; @@ -348,32 +369,39 @@ var __asyncGenerator = (this && this.__asyncGenerator) || function (thisArg, _ar }; function f4() { return __asyncGenerator(this, arguments, function f4_1() { - var x, y, y_1, y_1_1, e_1_1; - var e_1, _a; - return __generator(this, function (_b) { - switch (_b.label) { + var x, y, _a, y_1, y_1_1, e_1_1; + var _b, e_1, _c, _d; + return __generator(this, function (_e) { + switch (_e.label) { case 0: - _b.trys.push([0, 5, 6, 11]); - y_1 = __asyncValues(y); - _b.label = 1; + _e.trys.push([0, 5, 6, 11]); + _a = true, y_1 = __asyncValues(y); + _e.label = 1; case 1: return [4 /*yield*/, __await(y_1.next())]; case 2: - if (!(y_1_1 = _b.sent(), !y_1_1.done)) return [3 /*break*/, 4]; - x = y_1_1.value; - _b.label = 3; + if (!(y_1_1 = _e.sent(), _b = y_1_1.done, !_b)) return [3 /*break*/, 4]; + _d = y_1_1.value; + _a = false; + try { + x = _d; + } + finally { + _a = true; + } + _e.label = 3; case 3: return [3 /*break*/, 1]; case 4: return [3 /*break*/, 11]; case 5: - e_1_1 = _b.sent(); + e_1_1 = _e.sent(); e_1 = { error: e_1_1 }; return [3 /*break*/, 11]; case 6: - _b.trys.push([6, , 9, 10]); - if (!(y_1_1 && !y_1_1.done && (_a = y_1.return))) return [3 /*break*/, 8]; - return [4 /*yield*/, __await(_a.call(y_1))]; + _e.trys.push([6, , 9, 10]); + if (!(!_a && !_b && (_c = y_1.return))) return [3 /*break*/, 8]; + return [4 /*yield*/, __await(_c.call(y_1))]; case 7: - _b.sent(); - _b.label = 8; + _e.sent(); + _e.label = 8; case 8: return [3 /*break*/, 10]; case 9: if (e_1) throw e_1.error; @@ -430,33 +458,41 @@ var __asyncValues = (this && this.__asyncValues) || function (o) { }; // https://github.com/Microsoft/TypeScript/issues/21363 function f5() { - var e_1, _a; + var _a, e_1, _b, _c; return __awaiter(this, void 0, void 0, function () { - var y, y_1, y_1_1, x, e_1_1; - return __generator(this, function (_b) { - switch (_b.label) { + var y, _d, y_1, y_1_1, x, e_1_1; + return __generator(this, function (_e) { + switch (_e.label) { case 0: - _b.trys.push([0, 5, 6, 11]); - y_1 = __asyncValues(y); - _b.label = 1; + _e.trys.push([0, 5, 6, 11]); + _d = true, y_1 = __asyncValues(y); + _e.label = 1; case 1: return [4 /*yield*/, y_1.next()]; case 2: - if (!(y_1_1 = _b.sent(), !y_1_1.done)) return [3 /*break*/, 4]; - x = y_1_1.value; - return [3 /*break*/, 3]; + if (!(y_1_1 = _e.sent(), _a = y_1_1.done, !_a)) return [3 /*break*/, 4]; + _c = y_1_1.value; + _d = false; + try { + x = _c; + return [3 /*break*/, 3]; + } + finally { + _d = true; + } + _e.label = 3; case 3: return [3 /*break*/, 1]; case 4: return [3 /*break*/, 11]; case 5: - e_1_1 = _b.sent(); + e_1_1 = _e.sent(); e_1 = { error: e_1_1 }; return [3 /*break*/, 11]; case 6: - _b.trys.push([6, , 9, 10]); - if (!(y_1_1 && !y_1_1.done && (_a = y_1.return))) return [3 /*break*/, 8]; - return [4 /*yield*/, _a.call(y_1)]; + _e.trys.push([6, , 9, 10]); + if (!(!_d && !_a && (_b = y_1.return))) return [3 /*break*/, 8]; + return [4 /*yield*/, _b.call(y_1)]; case 7: - _b.sent(); - _b.label = 8; + _e.sent(); + _e.label = 8; case 8: return [3 /*break*/, 10]; case 9: if (e_1) throw e_1.error; @@ -517,32 +553,40 @@ var __asyncGenerator = (this && this.__asyncGenerator) || function (thisArg, _ar // https://github.com/Microsoft/TypeScript/issues/21363 function f6() { return __asyncGenerator(this, arguments, function f6_1() { - var y, y_1, y_1_1, x, e_1_1; - var e_1, _a; - return __generator(this, function (_b) { - switch (_b.label) { + var y, _a, y_1, y_1_1, x, e_1_1; + var _b, e_1, _c, _d; + return __generator(this, function (_e) { + switch (_e.label) { case 0: - _b.trys.push([0, 5, 6, 11]); - y_1 = __asyncValues(y); - _b.label = 1; + _e.trys.push([0, 5, 6, 11]); + _a = true, y_1 = __asyncValues(y); + _e.label = 1; case 1: return [4 /*yield*/, __await(y_1.next())]; case 2: - if (!(y_1_1 = _b.sent(), !y_1_1.done)) return [3 /*break*/, 4]; - x = y_1_1.value; - return [3 /*break*/, 3]; + if (!(y_1_1 = _e.sent(), _b = y_1_1.done, !_b)) return [3 /*break*/, 4]; + _d = y_1_1.value; + _a = false; + try { + x = _d; + return [3 /*break*/, 3]; + } + finally { + _a = true; + } + _e.label = 3; case 3: return [3 /*break*/, 1]; case 4: return [3 /*break*/, 11]; case 5: - e_1_1 = _b.sent(); + e_1_1 = _e.sent(); e_1 = { error: e_1_1 }; return [3 /*break*/, 11]; case 6: - _b.trys.push([6, , 9, 10]); - if (!(y_1_1 && !y_1_1.done && (_a = y_1.return))) return [3 /*break*/, 8]; - return [4 /*yield*/, __await(_a.call(y_1))]; + _e.trys.push([6, , 9, 10]); + if (!(!_a && !_b && (_c = y_1.return))) return [3 /*break*/, 8]; + return [4 /*yield*/, __await(_c.call(y_1))]; case 7: - _b.sent(); - _b.label = 8; + _e.sent(); + _e.label = 8; case 8: return [3 /*break*/, 10]; case 9: if (e_1) throw e_1.error; @@ -603,32 +647,39 @@ var __asyncGenerator = (this && this.__asyncGenerator) || function (thisArg, _ar // https://github.com/microsoft/TypeScript/issues/36166 function f7() { return __asyncGenerator(this, arguments, function f7_1() { - var y, y_1, y_1_1, x, e_1_1; - var e_1, _a; - return __generator(this, function (_b) { - switch (_b.label) { + var y, _a, y_1, y_1_1, x, e_1_1; + var _b, e_1, _c, _d; + return __generator(this, function (_e) { + switch (_e.label) { case 0: - _b.trys.push([0, 5, 6, 11]); - y_1 = (e_1 = void 0, __asyncValues(y)); - _b.label = 1; + _e.trys.push([0, 5, 6, 11]); + _a = true, y_1 = (e_1 = void 0, __asyncValues(y)); + _e.label = 1; case 1: return [4 /*yield*/, __await(y_1.next())]; case 2: - if (!(y_1_1 = _b.sent(), !y_1_1.done)) return [3 /*break*/, 4]; - x = y_1_1.value; - _b.label = 3; + if (!(y_1_1 = _e.sent(), _b = y_1_1.done, !_b)) return [3 /*break*/, 4]; + _d = y_1_1.value; + _a = false; + try { + x = _d; + } + finally { + _a = true; + } + _e.label = 3; case 3: return [3 /*break*/, 1]; case 4: return [3 /*break*/, 11]; case 5: - e_1_1 = _b.sent(); + e_1_1 = _e.sent(); e_1 = { error: e_1_1 }; return [3 /*break*/, 11]; case 6: - _b.trys.push([6, , 9, 10]); - if (!(y_1_1 && !y_1_1.done && (_a = y_1.return))) return [3 /*break*/, 8]; - return [4 /*yield*/, __await(_a.call(y_1))]; + _e.trys.push([6, , 9, 10]); + if (!(!_a && !_b && (_c = y_1.return))) return [3 /*break*/, 8]; + return [4 /*yield*/, __await(_c.call(y_1))]; case 7: - _b.sent(); - _b.label = 8; + _e.sent(); + _e.label = 8; case 8: return [3 /*break*/, 10]; case 9: if (e_1) throw e_1.error; diff --git a/tests/baselines/reference/forAwaitPerIterationBindingDownlevel.js b/tests/baselines/reference/forAwaitPerIterationBindingDownlevel.js index 0abf004000638..0c1fd96d2dd04 100644 --- a/tests/baselines/reference/forAwaitPerIterationBindingDownlevel.js +++ b/tests/baselines/reference/forAwaitPerIterationBindingDownlevel.js @@ -104,56 +104,63 @@ function gen() { } var log = console.log; (function () { return __awaiter(_this, void 0, void 0, function () { - var _loop_1, _a, _b, e_1_1; + var _loop_1, _a, _b, _c, e_1_1; var _this = this; - var e_1, _c; - return __generator(this, function (_d) { - switch (_d.label) { + var _d, e_1, _e, _f; + return __generator(this, function (_g) { + switch (_g.label) { case 0: - _d.trys.push([0, 5, 6, 11]); + _g.trys.push([0, 5, 6, 11]); _loop_1 = function () { - var outer = _b.value; - log("I'm loop ".concat(outer)); - (function () { return __awaiter(_this, void 0, void 0, function () { - var inner; - return __generator(this, function (_a) { - switch (_a.label) { - case 0: - inner = outer; - return [4 /*yield*/, sleep(2000)]; - case 1: - _a.sent(); - if (inner === outer) { - log("I'm loop ".concat(inner, " and I know I'm loop ").concat(outer)); - } - else { - log("I'm loop ".concat(inner, ", but I think I'm loop ").concat(outer)); - } - return [2 /*return*/]; - } - }); - }); })(); + _f = _c.value; + _a = false; + try { + var outer = _f; + log("I'm loop ".concat(outer)); + (function () { return __awaiter(_this, void 0, void 0, function () { + var inner; + return __generator(this, function (_a) { + switch (_a.label) { + case 0: + inner = outer; + return [4 /*yield*/, sleep(2000)]; + case 1: + _a.sent(); + if (inner === outer) { + log("I'm loop ".concat(inner, " and I know I'm loop ").concat(outer)); + } + else { + log("I'm loop ".concat(inner, ", but I think I'm loop ").concat(outer)); + } + return [2 /*return*/]; + } + }); + }); })(); + } + finally { + _a = true; + } }; - _a = __asyncValues(gen()); - _d.label = 1; - case 1: return [4 /*yield*/, _a.next()]; + _a = true, _b = __asyncValues(gen()); + _g.label = 1; + case 1: return [4 /*yield*/, _b.next()]; case 2: - if (!(_b = _d.sent(), !_b.done)) return [3 /*break*/, 4]; + if (!(_c = _g.sent(), _d = _c.done, !_d)) return [3 /*break*/, 4]; _loop_1(); - _d.label = 3; + _g.label = 3; case 3: return [3 /*break*/, 1]; case 4: return [3 /*break*/, 11]; case 5: - e_1_1 = _d.sent(); + e_1_1 = _g.sent(); e_1 = { error: e_1_1 }; return [3 /*break*/, 11]; case 6: - _d.trys.push([6, , 9, 10]); - if (!(_b && !_b.done && (_c = _a.return))) return [3 /*break*/, 8]; - return [4 /*yield*/, _c.call(_a)]; + _g.trys.push([6, , 9, 10]); + if (!(!_a && !_d && (_e = _b.return))) return [3 /*break*/, 8]; + return [4 /*yield*/, _e.call(_b)]; case 7: - _d.sent(); - _d.label = 8; + _g.sent(); + _g.label = 8; case 8: return [3 /*break*/, 10]; case 9: if (e_1) throw e_1.error; diff --git a/tests/baselines/reference/operationsAvailableOnPromisedType.js b/tests/baselines/reference/operationsAvailableOnPromisedType.js index 139a61c0c7d00..7043cd573d6d0 100644 --- a/tests/baselines/reference/operationsAvailableOnPromisedType.js +++ b/tests/baselines/reference/operationsAvailableOnPromisedType.js @@ -83,12 +83,12 @@ var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) { return to.concat(ar || Array.prototype.slice.call(from)); }; function fn(a, b, c, d, e, f, g) { - var c_1, c_1_1; - var e_1, _a; + var _a, c_1, c_1_1; + var _b, e_1, _c, _d; return __awaiter(this, void 0, void 0, function () { var _i, c_2, s, s, e_1_1; - return __generator(this, function (_b) { - switch (_b.label) { + return __generator(this, function (_e) { + switch (_e.label) { case 0: // All errors a | b; @@ -104,29 +104,36 @@ function fn(a, b, c, d, e, f, g) { fn(b, b, c, d, e, f, g); d.prop; } - _b.label = 1; + _e.label = 1; case 1: - _b.trys.push([1, 6, 7, 12]); - c_1 = __asyncValues(c); - _b.label = 2; + _e.trys.push([1, 6, 7, 12]); + _a = true, c_1 = __asyncValues(c); + _e.label = 2; case 2: return [4 /*yield*/, c_1.next()]; case 3: - if (!(c_1_1 = _b.sent(), !c_1_1.done)) return [3 /*break*/, 5]; - s = c_1_1.value; - _b.label = 4; + if (!(c_1_1 = _e.sent(), _b = c_1_1.done, !_b)) return [3 /*break*/, 5]; + _d = c_1_1.value; + _a = false; + try { + s = _d; + } + finally { + _a = true; + } + _e.label = 4; case 4: return [3 /*break*/, 2]; case 5: return [3 /*break*/, 12]; case 6: - e_1_1 = _b.sent(); + e_1_1 = _e.sent(); e_1 = { error: e_1_1 }; return [3 /*break*/, 12]; case 7: - _b.trys.push([7, , 10, 11]); - if (!(c_1_1 && !c_1_1.done && (_a = c_1["return"]))) return [3 /*break*/, 9]; - return [4 /*yield*/, _a.call(c_1)]; + _e.trys.push([7, , 10, 11]); + if (!(!_a && !_b && (_c = c_1["return"]))) return [3 /*break*/, 9]; + return [4 /*yield*/, _c.call(c_1)]; case 8: - _b.sent(); - _b.label = 9; + _e.sent(); + _e.label = 9; case 9: return [3 /*break*/, 11]; case 10: if (e_1) throw e_1.error; diff --git a/tests/baselines/reference/topLevelAwait.1(module=es2022,target=es2015).js b/tests/baselines/reference/topLevelAwait.1(module=es2022,target=es2015).js index fcba60c9bafac..98481f493ed89 100644 --- a/tests/baselines/reference/topLevelAwait.1(module=es2022,target=es2015).js +++ b/tests/baselines/reference/topLevelAwait.1(module=es2022,target=es2015).js @@ -81,22 +81,29 @@ for await (const item of arr) { //// [other.js] -var e_1, _a; +var _a, e_1, _b, _c; const _await = 1; // await allowed in aliased export export { _await as await }; // for-await-of const arr = [Promise.resolve()]; try { - for (var arr_1 = __asyncValues(arr), arr_1_1; arr_1_1 = await arr_1.next(), !arr_1_1.done;) { - const item = arr_1_1.value; - item; + for (var _d = true, arr_1 = __asyncValues(arr), arr_1_1; arr_1_1 = await arr_1.next(), _a = arr_1_1.done, !_a;) { + _c = arr_1_1.value; + _d = false; + try { + const item = _c; + item; + } + finally { + _d = true; + } } } catch (e_1_1) { e_1 = { error: e_1_1 }; } finally { try { - if (arr_1_1 && !arr_1_1.done && (_a = arr_1.return)) await _a.call(arr_1); + if (!_d && !_a && (_b = arr_1.return)) await _b.call(arr_1); } finally { if (e_1) throw e_1.error; } } diff --git a/tests/baselines/reference/topLevelAwait.1(module=es2022,target=es2017).js b/tests/baselines/reference/topLevelAwait.1(module=es2022,target=es2017).js index fcba60c9bafac..98481f493ed89 100644 --- a/tests/baselines/reference/topLevelAwait.1(module=es2022,target=es2017).js +++ b/tests/baselines/reference/topLevelAwait.1(module=es2022,target=es2017).js @@ -81,22 +81,29 @@ for await (const item of arr) { //// [other.js] -var e_1, _a; +var _a, e_1, _b, _c; const _await = 1; // await allowed in aliased export export { _await as await }; // for-await-of const arr = [Promise.resolve()]; try { - for (var arr_1 = __asyncValues(arr), arr_1_1; arr_1_1 = await arr_1.next(), !arr_1_1.done;) { - const item = arr_1_1.value; - item; + for (var _d = true, arr_1 = __asyncValues(arr), arr_1_1; arr_1_1 = await arr_1.next(), _a = arr_1_1.done, !_a;) { + _c = arr_1_1.value; + _d = false; + try { + const item = _c; + item; + } + finally { + _d = true; + } } } catch (e_1_1) { e_1 = { error: e_1_1 }; } finally { try { - if (arr_1_1 && !arr_1_1.done && (_a = arr_1.return)) await _a.call(arr_1); + if (!_d && !_a && (_b = arr_1.return)) await _b.call(arr_1); } finally { if (e_1) throw e_1.error; } } diff --git a/tests/baselines/reference/topLevelAwait.1(module=esnext,target=es2015).js b/tests/baselines/reference/topLevelAwait.1(module=esnext,target=es2015).js index fcba60c9bafac..98481f493ed89 100644 --- a/tests/baselines/reference/topLevelAwait.1(module=esnext,target=es2015).js +++ b/tests/baselines/reference/topLevelAwait.1(module=esnext,target=es2015).js @@ -81,22 +81,29 @@ for await (const item of arr) { //// [other.js] -var e_1, _a; +var _a, e_1, _b, _c; const _await = 1; // await allowed in aliased export export { _await as await }; // for-await-of const arr = [Promise.resolve()]; try { - for (var arr_1 = __asyncValues(arr), arr_1_1; arr_1_1 = await arr_1.next(), !arr_1_1.done;) { - const item = arr_1_1.value; - item; + for (var _d = true, arr_1 = __asyncValues(arr), arr_1_1; arr_1_1 = await arr_1.next(), _a = arr_1_1.done, !_a;) { + _c = arr_1_1.value; + _d = false; + try { + const item = _c; + item; + } + finally { + _d = true; + } } } catch (e_1_1) { e_1 = { error: e_1_1 }; } finally { try { - if (arr_1_1 && !arr_1_1.done && (_a = arr_1.return)) await _a.call(arr_1); + if (!_d && !_a && (_b = arr_1.return)) await _b.call(arr_1); } finally { if (e_1) throw e_1.error; } } diff --git a/tests/baselines/reference/topLevelAwait.1(module=esnext,target=es2017).js b/tests/baselines/reference/topLevelAwait.1(module=esnext,target=es2017).js index fcba60c9bafac..98481f493ed89 100644 --- a/tests/baselines/reference/topLevelAwait.1(module=esnext,target=es2017).js +++ b/tests/baselines/reference/topLevelAwait.1(module=esnext,target=es2017).js @@ -81,22 +81,29 @@ for await (const item of arr) { //// [other.js] -var e_1, _a; +var _a, e_1, _b, _c; const _await = 1; // await allowed in aliased export export { _await as await }; // for-await-of const arr = [Promise.resolve()]; try { - for (var arr_1 = __asyncValues(arr), arr_1_1; arr_1_1 = await arr_1.next(), !arr_1_1.done;) { - const item = arr_1_1.value; - item; + for (var _d = true, arr_1 = __asyncValues(arr), arr_1_1; arr_1_1 = await arr_1.next(), _a = arr_1_1.done, !_a;) { + _c = arr_1_1.value; + _d = false; + try { + const item = _c; + item; + } + finally { + _d = true; + } } } catch (e_1_1) { e_1 = { error: e_1_1 }; } finally { try { - if (arr_1_1 && !arr_1_1.done && (_a = arr_1.return)) await _a.call(arr_1); + if (!_d && !_a && (_b = arr_1.return)) await _b.call(arr_1); } finally { if (e_1) throw e_1.error; } } diff --git a/tests/baselines/reference/topLevelAwait.1(module=system,target=es2015).js b/tests/baselines/reference/topLevelAwait.1(module=system,target=es2015).js index 226e7a27d75c8..71d9ac2e23794 100644 --- a/tests/baselines/reference/topLevelAwait.1(module=system,target=es2015).js +++ b/tests/baselines/reference/topLevelAwait.1(module=system,target=es2015).js @@ -83,7 +83,7 @@ for await (const item of arr) { //// [other.js] System.register([], function (exports_1, context_1) { "use strict"; - var e_1, _a, _await, arr; + var _a, e_1, _b, _c, _await, arr; var __moduleName = context_1 && context_1.id; return { setters: [], @@ -93,15 +93,22 @@ System.register([], function (exports_1, context_1) { // for-await-of arr = [Promise.resolve()]; try { - for (var arr_1 = __asyncValues(arr), arr_1_1; arr_1_1 = await arr_1.next(), !arr_1_1.done;) { - const item = arr_1_1.value; - item; + for (var _a = true, arr_1 = __asyncValues(arr), arr_1_1; arr_1_1 = await arr_1.next(), _a = arr_1_1.done, !_a;) { + _c = arr_1_1.value; + _a = false; + try { + const item = _c; + item; + } + finally { + _a = true; + } } } catch (e_1_1) { e_1 = { error: e_1_1 }; } finally { try { - if (arr_1_1 && !arr_1_1.done && (_a = arr_1.return)) await _a.call(arr_1); + if (!_a && !_a && (_b = arr_1.return)) await _b.call(arr_1); } finally { if (e_1) throw e_1.error; } } diff --git a/tests/baselines/reference/topLevelAwait.1(module=system,target=es2017).js b/tests/baselines/reference/topLevelAwait.1(module=system,target=es2017).js index 226e7a27d75c8..71d9ac2e23794 100644 --- a/tests/baselines/reference/topLevelAwait.1(module=system,target=es2017).js +++ b/tests/baselines/reference/topLevelAwait.1(module=system,target=es2017).js @@ -83,7 +83,7 @@ for await (const item of arr) { //// [other.js] System.register([], function (exports_1, context_1) { "use strict"; - var e_1, _a, _await, arr; + var _a, e_1, _b, _c, _await, arr; var __moduleName = context_1 && context_1.id; return { setters: [], @@ -93,15 +93,22 @@ System.register([], function (exports_1, context_1) { // for-await-of arr = [Promise.resolve()]; try { - for (var arr_1 = __asyncValues(arr), arr_1_1; arr_1_1 = await arr_1.next(), !arr_1_1.done;) { - const item = arr_1_1.value; - item; + for (var _a = true, arr_1 = __asyncValues(arr), arr_1_1; arr_1_1 = await arr_1.next(), _a = arr_1_1.done, !_a;) { + _c = arr_1_1.value; + _a = false; + try { + const item = _c; + item; + } + finally { + _a = true; + } } } catch (e_1_1) { e_1 = { error: e_1_1 }; } finally { try { - if (arr_1_1 && !arr_1_1.done && (_a = arr_1.return)) await _a.call(arr_1); + if (!_a && !_a && (_b = arr_1.return)) await _b.call(arr_1); } finally { if (e_1) throw e_1.error; } }