From fcad16f2fb8624546770e1330bf5dd72a78bbf14 Mon Sep 17 00:00:00 2001 From: liuxingbaoyu <30521560+liuxingbaoyu@users.noreply.github.com> Date: Fri, 8 Sep 2023 14:43:02 +0800 Subject: [PATCH 1/3] improve --- .../src/for-await.ts | 27 ++------ .../fixtures/for-await/async-arrow/output.js | 17 ++--- .../async-function-no-transform/output.js | 17 ++--- .../for-await/async-function/output.js | 17 ++--- .../for-await/async-generator/output.js | 17 ++--- .../create-async-from-sync-iterator/output.js | 17 ++--- .../for-await/destructuring/output.js | 17 ++--- .../for-await/lhs-member-expression/output.js | 17 ++--- .../re-declare-var-in-init-body/output.js | 17 ++--- .../test/fixtures/for-await/throw/exec.js | 25 +++++++ .../test/fixtures/for-await/throw/input.js | 25 +++++++ .../fixtures/for-await/throw/options.json | 5 ++ .../test/fixtures/for-await/throw/output.js | 38 +++++++++++ .../test/fixtures/for-await/throw2/exec.js | 25 +++++++ .../test/fixtures/for-await/throw2/input.js | 25 +++++++ .../fixtures/for-await/throw2/options.json | 5 ++ .../test/fixtures/for-await/throw2/output.js | 37 +++++++++++ .../test/fixtures/regression/13801/output.js | 65 ++++++++----------- .../test/fixtures/regression/5880/output.js | 17 ++--- .../plugins-integration/issue-11610/output.js | 17 ++--- 20 files changed, 257 insertions(+), 190 deletions(-) create mode 100644 packages/babel-plugin-transform-async-generator-functions/test/fixtures/for-await/throw/exec.js create mode 100644 packages/babel-plugin-transform-async-generator-functions/test/fixtures/for-await/throw/input.js create mode 100644 packages/babel-plugin-transform-async-generator-functions/test/fixtures/for-await/throw/options.json create mode 100644 packages/babel-plugin-transform-async-generator-functions/test/fixtures/for-await/throw/output.js create mode 100644 packages/babel-plugin-transform-async-generator-functions/test/fixtures/for-await/throw2/exec.js create mode 100644 packages/babel-plugin-transform-async-generator-functions/test/fixtures/for-await/throw2/input.js create mode 100644 packages/babel-plugin-transform-async-generator-functions/test/fixtures/for-await/throw2/options.json create mode 100644 packages/babel-plugin-transform-async-generator-functions/test/fixtures/for-await/throw2/output.js diff --git a/packages/babel-plugin-transform-async-generator-functions/src/for-await.ts b/packages/babel-plugin-transform-async-generator-functions/src/for-await.ts index fce810c5e9bc..05777a4fe736 100644 --- a/packages/babel-plugin-transform-async-generator-functions/src/for-await.ts +++ b/packages/babel-plugin-transform-async-generator-functions/src/for-await.ts @@ -3,29 +3,19 @@ import type { NodePath } from "@babel/traverse"; const buildForAwait = template(` async function wrapper() { - var ITERATOR_ABRUPT_COMPLETION = false; - var ITERATOR_HAD_ERROR_KEY = false; - var ITERATOR_ERROR_KEY; + var STEP_KEY = {}; try { for ( - var ITERATOR_KEY = GET_ITERATOR(OBJECT), STEP_KEY; - ITERATOR_ABRUPT_COMPLETION = !(STEP_KEY = await ITERATOR_KEY.next()).done; - ITERATOR_ABRUPT_COMPLETION = false + var ITERATOR_KEY = GET_ITERATOR(OBJECT); + !(STEP_KEY = await ITERATOR_KEY.next()).done; ) { } - } catch (err) { - ITERATOR_HAD_ERROR_KEY = true; - ITERATOR_ERROR_KEY = err; } finally { try { - if (ITERATOR_ABRUPT_COMPLETION && ITERATOR_KEY.return != null) { + if (!STEP_KEY.done && ITERATOR_KEY.return != null) { await ITERATOR_KEY.return(); } - } finally { - if (ITERATOR_HAD_ERROR_KEY) { - throw ITERATOR_ERROR_KEY; - } - } + } catch (e) {} } } `); @@ -53,11 +43,6 @@ export default function ( ]); } let template = buildForAwait({ - ITERATOR_HAD_ERROR_KEY: scope.generateUidIdentifier("didIteratorError"), - ITERATOR_ABRUPT_COMPLETION: scope.generateUidIdentifier( - "iteratorAbruptCompletion", - ), - ITERATOR_ERROR_KEY: scope.generateUidIdentifier("iteratorError"), ITERATOR_KEY: scope.generateUidIdentifier("iterator"), GET_ITERATOR: getAsyncIterator, OBJECT: node.right, @@ -69,7 +54,7 @@ export default function ( template = template.body.body as t.Statement[]; const isLabeledParent = t.isLabeledStatement(parent); - const tryBody = (template[3] as t.TryStatement).block.body; + const tryBody = (template[1] as t.TryStatement).block.body; const loop = tryBody[0] as t.ForStatement; if (isLabeledParent) { diff --git a/packages/babel-plugin-transform-async-generator-functions/test/fixtures/for-await/async-arrow/output.js b/packages/babel-plugin-transform-async-generator-functions/test/fixtures/for-await/async-arrow/output.js index 24f49ced2b8e..258ed6f84360 100644 --- a/packages/babel-plugin-transform-async-generator-functions/test/fixtures/for-await/async-arrow/output.js +++ b/packages/babel-plugin-transform-async-generator-functions/test/fixtures/for-await/async-arrow/output.js @@ -1,26 +1,17 @@ /*#__PURE__*/babelHelpers.asyncToGenerator(function* () { - var _iteratorAbruptCompletion = false; - var _didIteratorError = false; - var _iteratorError; + var _step = {}; try { - for (var _iterator = babelHelpers.asyncIterator(y), _step; _iteratorAbruptCompletion = !(_step = yield _iterator.next()).done; _iteratorAbruptCompletion = false) { + for (var _iterator = babelHelpers.asyncIterator(y); !(_step = yield _iterator.next()).done;) { let x = _step.value; { f(x); } } - } catch (err) { - _didIteratorError = true; - _iteratorError = err; } finally { try { - if (_iteratorAbruptCompletion && _iterator.return != null) { + if (!_step.done && _iterator.return != null) { yield _iterator.return(); } - } finally { - if (_didIteratorError) { - throw _iteratorError; - } - } + } catch (e) {} } }); diff --git a/packages/babel-plugin-transform-async-generator-functions/test/fixtures/for-await/async-function-no-transform/output.js b/packages/babel-plugin-transform-async-generator-functions/test/fixtures/for-await/async-function-no-transform/output.js index e997ab2a48b2..f18fd3bca70d 100644 --- a/packages/babel-plugin-transform-async-generator-functions/test/fixtures/for-await/async-function-no-transform/output.js +++ b/packages/babel-plugin-transform-async-generator-functions/test/fixtures/for-await/async-function-no-transform/output.js @@ -1,23 +1,14 @@ async function foo() { - var _iteratorAbruptCompletion = false; - var _didIteratorError = false; - var _iteratorError; + var _step = {}; try { - for (var _iterator = babelHelpers.asyncIterator(y), _step; _iteratorAbruptCompletion = !(_step = await _iterator.next()).done; _iteratorAbruptCompletion = false) { + for (var _iterator = babelHelpers.asyncIterator(y); !(_step = await _iterator.next()).done;) { const x = _step.value; } - } catch (err) { - _didIteratorError = true; - _iteratorError = err; } finally { try { - if (_iteratorAbruptCompletion && _iterator.return != null) { + if (!_step.done && _iterator.return != null) { await _iterator.return(); } - } finally { - if (_didIteratorError) { - throw _iteratorError; - } - } + } catch (e) {} } } diff --git a/packages/babel-plugin-transform-async-generator-functions/test/fixtures/for-await/async-function/output.js b/packages/babel-plugin-transform-async-generator-functions/test/fixtures/for-await/async-function/output.js index cbbca5182980..eabeec3f9313 100644 --- a/packages/babel-plugin-transform-async-generator-functions/test/fixtures/for-await/async-function/output.js +++ b/packages/babel-plugin-transform-async-generator-functions/test/fixtures/for-await/async-function/output.js @@ -1,29 +1,20 @@ var _f; function f() { return (_f = _f || babelHelpers.asyncToGenerator(function* () { - var _iteratorAbruptCompletion = false; - var _didIteratorError = false; - var _iteratorError; + var _step = {}; try { - for (var _iterator = babelHelpers.asyncIterator(y), _step; _iteratorAbruptCompletion = !(_step = yield _iterator.next()).done; _iteratorAbruptCompletion = false) { + for (var _iterator = babelHelpers.asyncIterator(y); !(_step = yield _iterator.next()).done;) { let x = _step.value; { g(x); } } - } catch (err) { - _didIteratorError = true; - _iteratorError = err; } finally { try { - if (_iteratorAbruptCompletion && _iterator.return != null) { + if (!_step.done && _iterator.return != null) { yield _iterator.return(); } - } finally { - if (_didIteratorError) { - throw _iteratorError; - } - } + } catch (e) {} } })).apply(this, arguments); } diff --git a/packages/babel-plugin-transform-async-generator-functions/test/fixtures/for-await/async-generator/output.js b/packages/babel-plugin-transform-async-generator-functions/test/fixtures/for-await/async-generator/output.js index 5f69e14b0316..8a5b0073e8f0 100644 --- a/packages/babel-plugin-transform-async-generator-functions/test/fixtures/for-await/async-generator/output.js +++ b/packages/babel-plugin-transform-async-generator-functions/test/fixtures/for-await/async-generator/output.js @@ -1,29 +1,20 @@ var _g; function g() { return (_g = _g || babelHelpers.wrapAsyncGenerator(function* () { - var _iteratorAbruptCompletion = false; - var _didIteratorError = false; - var _iteratorError; + var _step = {}; try { - for (var _iterator = babelHelpers.asyncIterator(y), _step; _iteratorAbruptCompletion = !(_step = yield babelHelpers.awaitAsyncGenerator(_iterator.next())).done; _iteratorAbruptCompletion = false) { + for (var _iterator = babelHelpers.asyncIterator(y); !(_step = yield babelHelpers.awaitAsyncGenerator(_iterator.next())).done;) { let x = _step.value; { f(x); } } - } catch (err) { - _didIteratorError = true; - _iteratorError = err; } finally { try { - if (_iteratorAbruptCompletion && _iterator.return != null) { + if (!_step.done && _iterator.return != null) { yield babelHelpers.awaitAsyncGenerator(_iterator.return()); } - } finally { - if (_didIteratorError) { - throw _iteratorError; - } - } + } catch (e) {} } })).apply(this, arguments); } diff --git a/packages/babel-plugin-transform-async-generator-functions/test/fixtures/for-await/create-async-from-sync-iterator/output.js b/packages/babel-plugin-transform-async-generator-functions/test/fixtures/for-await/create-async-from-sync-iterator/output.js index 5108e6e54295..f31433e8134d 100644 --- a/packages/babel-plugin-transform-async-generator-functions/test/fixtures/for-await/create-async-from-sync-iterator/output.js +++ b/packages/babel-plugin-transform-async-generator-functions/test/fixtures/for-await/create-async-from-sync-iterator/output.js @@ -1,11 +1,9 @@ var _fn; function fn() { return (_fn = _fn || babelHelpers.wrapAsyncGenerator(function* () { - var _iteratorAbruptCompletion = false; - var _didIteratorError = false; - var _iteratorError; + var _step = {}; try { - for (var _iterator = babelHelpers.asyncIterator([Promise.resolve("ok")]), _step; _iteratorAbruptCompletion = !(_step = yield babelHelpers.awaitAsyncGenerator(_iterator.next())).done; _iteratorAbruptCompletion = false) { + for (var _iterator = babelHelpers.asyncIterator([Promise.resolve("ok")]); !(_step = yield babelHelpers.awaitAsyncGenerator(_iterator.next())).done;) { const result = _step.value; { return { @@ -13,19 +11,12 @@ function fn() { }; } } - } catch (err) { - _didIteratorError = true; - _iteratorError = err; } finally { try { - if (_iteratorAbruptCompletion && _iterator.return != null) { + if (!_step.done && _iterator.return != null) { yield babelHelpers.awaitAsyncGenerator(_iterator.return()); } - } finally { - if (_didIteratorError) { - throw _iteratorError; - } - } + } catch (e) {} } })).apply(this, arguments); } diff --git a/packages/babel-plugin-transform-async-generator-functions/test/fixtures/for-await/destructuring/output.js b/packages/babel-plugin-transform-async-generator-functions/test/fixtures/for-await/destructuring/output.js index 2007c18dc6cc..eaa635794636 100644 --- a/packages/babel-plugin-transform-async-generator-functions/test/fixtures/for-await/destructuring/output.js +++ b/packages/babel-plugin-transform-async-generator-functions/test/fixtures/for-await/destructuring/output.js @@ -1,11 +1,9 @@ var _f; function f() { return (_f = _f || babelHelpers.asyncToGenerator(function* () { - var _iteratorAbruptCompletion = false; - var _didIteratorError = false; - var _iteratorError; + var _step = {}; try { - for (var _iterator = babelHelpers.asyncIterator(a), _step; _iteratorAbruptCompletion = !(_step = yield _iterator.next()).done; _iteratorAbruptCompletion = false) { + for (var _iterator = babelHelpers.asyncIterator(a); !(_step = yield _iterator.next()).done;) { let { x, y: [z] @@ -14,19 +12,12 @@ function f() { g(x, z); } } - } catch (err) { - _didIteratorError = true; - _iteratorError = err; } finally { try { - if (_iteratorAbruptCompletion && _iterator.return != null) { + if (!_step.done && _iterator.return != null) { yield _iterator.return(); } - } finally { - if (_didIteratorError) { - throw _iteratorError; - } - } + } catch (e) {} } })).apply(this, arguments); } diff --git a/packages/babel-plugin-transform-async-generator-functions/test/fixtures/for-await/lhs-member-expression/output.js b/packages/babel-plugin-transform-async-generator-functions/test/fixtures/for-await/lhs-member-expression/output.js index a3c282471216..12bf4261c755 100644 --- a/packages/babel-plugin-transform-async-generator-functions/test/fixtures/for-await/lhs-member-expression/output.js +++ b/packages/babel-plugin-transform-async-generator-functions/test/fixtures/for-await/lhs-member-expression/output.js @@ -1,23 +1,14 @@ babelHelpers.asyncToGenerator(function* () { - var _iteratorAbruptCompletion = false; - var _didIteratorError = false; - var _iteratorError; + var _step = {}; try { - for (var _iterator = babelHelpers.asyncIterator(y), _step; _iteratorAbruptCompletion = !(_step = yield _iterator.next()).done; _iteratorAbruptCompletion = false) { + for (var _iterator = babelHelpers.asyncIterator(y); !(_step = yield _iterator.next()).done;) { obj.x = _step.value; } - } catch (err) { - _didIteratorError = true; - _iteratorError = err; } finally { try { - if (_iteratorAbruptCompletion && _iterator.return != null) { + if (!_step.done && _iterator.return != null) { yield _iterator.return(); } - } finally { - if (_didIteratorError) { - throw _iteratorError; - } - } + } catch (e) {} } })(); diff --git a/packages/babel-plugin-transform-async-generator-functions/test/fixtures/for-await/re-declare-var-in-init-body/output.js b/packages/babel-plugin-transform-async-generator-functions/test/fixtures/for-await/re-declare-var-in-init-body/output.js index f5368c0de258..4b4c357579d3 100644 --- a/packages/babel-plugin-transform-async-generator-functions/test/fixtures/for-await/re-declare-var-in-init-body/output.js +++ b/packages/babel-plugin-transform-async-generator-functions/test/fixtures/for-await/re-declare-var-in-init-body/output.js @@ -1,26 +1,17 @@ /*#__PURE__*/babelHelpers.asyncToGenerator(function* () { - var _iteratorAbruptCompletion = false; - var _didIteratorError = false; - var _iteratorError; + var _step = {}; try { - for (var _iterator = babelHelpers.asyncIterator([]), _step; _iteratorAbruptCompletion = !(_step = yield _iterator.next()).done; _iteratorAbruptCompletion = false) { + for (var _iterator = babelHelpers.asyncIterator([]); !(_step = yield _iterator.next()).done;) { let x = _step.value; { let x; } } - } catch (err) { - _didIteratorError = true; - _iteratorError = err; } finally { try { - if (_iteratorAbruptCompletion && _iterator.return != null) { + if (!_step.done && _iterator.return != null) { yield _iterator.return(); } - } finally { - if (_didIteratorError) { - throw _iteratorError; - } - } + } catch (e) {} } }); diff --git a/packages/babel-plugin-transform-async-generator-functions/test/fixtures/for-await/throw/exec.js b/packages/babel-plugin-transform-async-generator-functions/test/fixtures/for-await/throw/exec.js new file mode 100644 index 000000000000..366c77784264 --- /dev/null +++ b/packages/babel-plugin-transform-async-generator-functions/test/fixtures/for-await/throw/exec.js @@ -0,0 +1,25 @@ +let returnCalled = false; + +let iterable = { + [Symbol.asyncIterator || "@@asyncIterator"]() { + return { + next: () => ({ done: false, value: 1 }), + return: () => { + returnCalled = true; + throw "return" + } + }; + }, +}; + +return async function () { + let value; + try { + for await (value of iterable) { + throw "error" + } + } catch (err) { + expect(err).toBe("error"); + } + expect(returnCalled).toBe(true); +}(); diff --git a/packages/babel-plugin-transform-async-generator-functions/test/fixtures/for-await/throw/input.js b/packages/babel-plugin-transform-async-generator-functions/test/fixtures/for-await/throw/input.js new file mode 100644 index 000000000000..366c77784264 --- /dev/null +++ b/packages/babel-plugin-transform-async-generator-functions/test/fixtures/for-await/throw/input.js @@ -0,0 +1,25 @@ +let returnCalled = false; + +let iterable = { + [Symbol.asyncIterator || "@@asyncIterator"]() { + return { + next: () => ({ done: false, value: 1 }), + return: () => { + returnCalled = true; + throw "return" + } + }; + }, +}; + +return async function () { + let value; + try { + for await (value of iterable) { + throw "error" + } + } catch (err) { + expect(err).toBe("error"); + } + expect(returnCalled).toBe(true); +}(); diff --git a/packages/babel-plugin-transform-async-generator-functions/test/fixtures/for-await/throw/options.json b/packages/babel-plugin-transform-async-generator-functions/test/fixtures/for-await/throw/options.json new file mode 100644 index 000000000000..eeebc1a57738 --- /dev/null +++ b/packages/babel-plugin-transform-async-generator-functions/test/fixtures/for-await/throw/options.json @@ -0,0 +1,5 @@ +{ + "parserOpts": { + "allowReturnOutsideFunction": true + } +} diff --git a/packages/babel-plugin-transform-async-generator-functions/test/fixtures/for-await/throw/output.js b/packages/babel-plugin-transform-async-generator-functions/test/fixtures/for-await/throw/output.js new file mode 100644 index 000000000000..e737769f57d8 --- /dev/null +++ b/packages/babel-plugin-transform-async-generator-functions/test/fixtures/for-await/throw/output.js @@ -0,0 +1,38 @@ +let returnCalled = false; +let iterable = { + [Symbol.asyncIterator || "@@asyncIterator"]() { + return { + next: () => ({ + done: false, + value: 1 + }), + return: () => { + returnCalled = true; + throw "return"; + } + }; + } +}; +return babelHelpers.asyncToGenerator(function* () { + let value; + try { + var _step = {}; + try { + for (var _iterator = babelHelpers.asyncIterator(iterable); !(_step = yield _iterator.next()).done;) { + value = _step.value; + { + throw "error"; + } + } + } finally { + try { + if (!_step.done && _iterator.return != null) { + yield _iterator.return(); + } + } catch (e) {} + } + } catch (err) { + expect(err).toBe("error"); + } + expect(returnCalled).toBe(true); +})(); diff --git a/packages/babel-plugin-transform-async-generator-functions/test/fixtures/for-await/throw2/exec.js b/packages/babel-plugin-transform-async-generator-functions/test/fixtures/for-await/throw2/exec.js new file mode 100644 index 000000000000..f7fb1f3ddbc7 --- /dev/null +++ b/packages/babel-plugin-transform-async-generator-functions/test/fixtures/for-await/throw2/exec.js @@ -0,0 +1,25 @@ +let returnCalled = false; + +let iterable = { + [Symbol.asyncIterator || "@@asyncIterator"]() { + return { + next: () => { + throw "next" + }, + return: () => { + returnCalled = true; + throw "return" + } + }; + }, +}; + +return async function () { + let value; + try { + for await (value of iterable); + } catch (err) { + expect(err).toBe("next"); + } + expect(returnCalled).toBe(true); +}(); diff --git a/packages/babel-plugin-transform-async-generator-functions/test/fixtures/for-await/throw2/input.js b/packages/babel-plugin-transform-async-generator-functions/test/fixtures/for-await/throw2/input.js new file mode 100644 index 000000000000..f7fb1f3ddbc7 --- /dev/null +++ b/packages/babel-plugin-transform-async-generator-functions/test/fixtures/for-await/throw2/input.js @@ -0,0 +1,25 @@ +let returnCalled = false; + +let iterable = { + [Symbol.asyncIterator || "@@asyncIterator"]() { + return { + next: () => { + throw "next" + }, + return: () => { + returnCalled = true; + throw "return" + } + }; + }, +}; + +return async function () { + let value; + try { + for await (value of iterable); + } catch (err) { + expect(err).toBe("next"); + } + expect(returnCalled).toBe(true); +}(); diff --git a/packages/babel-plugin-transform-async-generator-functions/test/fixtures/for-await/throw2/options.json b/packages/babel-plugin-transform-async-generator-functions/test/fixtures/for-await/throw2/options.json new file mode 100644 index 000000000000..eeebc1a57738 --- /dev/null +++ b/packages/babel-plugin-transform-async-generator-functions/test/fixtures/for-await/throw2/options.json @@ -0,0 +1,5 @@ +{ + "parserOpts": { + "allowReturnOutsideFunction": true + } +} diff --git a/packages/babel-plugin-transform-async-generator-functions/test/fixtures/for-await/throw2/output.js b/packages/babel-plugin-transform-async-generator-functions/test/fixtures/for-await/throw2/output.js new file mode 100644 index 000000000000..663d2482a4c2 --- /dev/null +++ b/packages/babel-plugin-transform-async-generator-functions/test/fixtures/for-await/throw2/output.js @@ -0,0 +1,37 @@ +let returnCalled = false; +let iterable = { + [Symbol.asyncIterator || "@@asyncIterator"]() { + return { + next: () => { + throw "next"; + }, + return: () => { + returnCalled = true; + throw "return"; + } + }; + } +}; +return babelHelpers.asyncToGenerator(function* () { + let value; + try { + var _step = {}; + try { + for (var _iterator = babelHelpers.asyncIterator(iterable); !(_step = yield _iterator.next()).done;) { + value = _step.value; + { + ; + } + } + } finally { + try { + if (!_step.done && _iterator.return != null) { + yield _iterator.return(); + } + } catch (e) {} + } + } catch (err) { + expect(err).toBe("next"); + } + expect(returnCalled).toBe(true); +})(); diff --git a/packages/babel-plugin-transform-async-generator-functions/test/fixtures/regression/13801/output.js b/packages/babel-plugin-transform-async-generator-functions/test/fixtures/regression/13801/output.js index a275abdc806c..395025484f1c 100644 --- a/packages/babel-plugin-transform-async-generator-functions/test/fixtures/regression/13801/output.js +++ b/packages/babel-plugin-transform-async-generator-functions/test/fixtures/regression/13801/output.js @@ -7,63 +7,50 @@ function main() { while (1) switch (_context2.prev = _context2.next) { case 0: () => { - var _iteratorAbruptCompletion, _didIteratorError, _iteratorError, _iterator, _step, string; + var _step, _iterator, string; return _regeneratorRuntime().async(function _callee$(_context) { while (1) switch (_context.prev = _context.next) { case 0: // IIFE: required for babel to crash - _iteratorAbruptCompletion = false; - _didIteratorError = false; - _context.prev = 2; + _step = {}; + _context.prev = 1; _iterator = _asyncIterator(async_iterable); - case 4: - _context.next = 6; + case 3: + _context.next = 5; return _regeneratorRuntime().awrap(_iterator.next()); - case 6: - if (!(_iteratorAbruptCompletion = !(_step = _context.sent).done)) { - _context.next = 12; + case 5: + if ((_step = _context.sent).done) { + _context.next = 10; break; } string = _step.value; // for await: required for babel to crash console.log(string); - case 9: - _iteratorAbruptCompletion = false; - _context.next = 4; + case 8: + _context.next = 3; break; - case 12: - _context.next = 18; - break; - case 14: - _context.prev = 14; - _context.t0 = _context["catch"](2); - _didIteratorError = true; - _iteratorError = _context.t0; - case 18: - _context.prev = 18; - _context.prev = 19; - if (!(_iteratorAbruptCompletion && _iterator.return != null)) { - _context.next = 23; + case 10: + _context.prev = 10; + _context.prev = 11; + if (!(!_step.done && _iterator.return != null)) { + _context.next = 15; break; } - _context.next = 23; + _context.next = 15; return _regeneratorRuntime().awrap(_iterator.return()); - case 23: - _context.prev = 23; - if (!_didIteratorError) { - _context.next = 26; - break; - } - throw _iteratorError; - case 26: - return _context.finish(23); - case 27: - return _context.finish(18); - case 28: + case 15: + _context.next = 19; + break; + case 17: + _context.prev = 17; + _context.t0 = _context["catch"](11); + case 19: + return _context.finish(10); + case 20: case "end": return _context.stop(); } - }, null, null, [[2, 14, 18, 28], [19,, 23, 27]], Promise); + }, null, null, [[1,, 10, 20], [11, 17]], Promise); }; one = 1; // array destructuring: required for babel to crash case 2: diff --git a/packages/babel-plugin-transform-async-generator-functions/test/fixtures/regression/5880/output.js b/packages/babel-plugin-transform-async-generator-functions/test/fixtures/regression/5880/output.js index fad58fbc5ea1..ff429918a072 100644 --- a/packages/babel-plugin-transform-async-generator-functions/test/fixtures/regression/5880/output.js +++ b/packages/babel-plugin-transform-async-generator-functions/test/fixtures/regression/5880/output.js @@ -1,24 +1,15 @@ (async () => { - var _iteratorAbruptCompletion = false; - var _didIteratorError = false; - var _iteratorError; + var _step = {}; try { - for (var _iterator = babelHelpers.asyncIterator(iterable), _step; _iteratorAbruptCompletion = !(_step = await _iterator.next()).done; _iteratorAbruptCompletion = false) { + for (var _iterator = babelHelpers.asyncIterator(iterable); !(_step = await _iterator.next()).done;) { const _step$value = babelHelpers.slicedToArray(_step.value, 1), value = _step$value[0]; } - } catch (err) { - _didIteratorError = true; - _iteratorError = err; } finally { try { - if (_iteratorAbruptCompletion && _iterator.return != null) { + if (!_step.done && _iterator.return != null) { await _iterator.return(); } - } finally { - if (_didIteratorError) { - throw _iteratorError; - } - } + } catch (e) {} } })(); diff --git a/packages/babel-preset-env/test/fixtures/plugins-integration/issue-11610/output.js b/packages/babel-preset-env/test/fixtures/plugins-integration/issue-11610/output.js index fa168b0e1b32..4f3ee6555d97 100644 --- a/packages/babel-preset-env/test/fixtures/plugins-integration/issue-11610/output.js +++ b/packages/babel-preset-env/test/fixtures/plugins-integration/issue-11610/output.js @@ -1,24 +1,15 @@ async function v() { let source = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 2; - var _iteratorAbruptCompletion = false; - var _didIteratorError = false; - var _iteratorError; + var _step = {}; try { - for (var _iterator = babelHelpers.asyncIterator([1]), _step; _iteratorAbruptCompletion = !(_step = await _iterator.next()).done; _iteratorAbruptCompletion = false) { + for (var _iterator = babelHelpers.asyncIterator([1]); !(_step = await _iterator.next()).done;) { source = _step.value; } - } catch (err) { - _didIteratorError = true; - _iteratorError = err; } finally { try { - if (_iteratorAbruptCompletion && _iterator.return != null) { + if (!_step.done && _iterator.return != null) { await _iterator.return(); } - } finally { - if (_didIteratorError) { - throw _iteratorError; - } - } + } catch (e) {} } } From 4b22260495c6012879288a445d1344cb163c5ced Mon Sep 17 00:00:00 2001 From: liuxingbaoyu <30521560+liuxingbaoyu@users.noreply.github.com> Date: Sat, 9 Sep 2023 15:31:00 +0800 Subject: [PATCH 2/3] review --- .../src/for-await.ts | 33 +++++------ .../fixtures/for-await/async-arrow/output.js | 15 +++-- .../async-function-no-transform/output.js | 15 +++-- .../for-await/async-function/output.js | 15 +++-- .../for-await/async-generator/output.js | 15 +++-- .../create-async-from-sync-iterator/output.js | 15 +++-- .../for-await/destructuring/output.js | 15 +++-- .../for-await/lhs-member-expression/output.js | 15 +++-- .../re-declare-var-in-init-body/output.js | 15 +++-- .../test/fixtures/for-await/throw/exec.js | 15 ++--- .../test/fixtures/for-await/throw/input.js | 15 ++--- .../test/fixtures/for-await/throw/output.js | 30 ++++++---- .../test/fixtures/for-await/throw2/exec.js | 19 +++--- .../test/fixtures/for-await/throw2/input.js | 19 +++--- .../test/fixtures/for-await/throw2/output.js | 30 ++++++---- .../test/fixtures/for-await/throw3/exec.js | 29 +++++++++ .../test/fixtures/for-await/throw3/input.js | 29 +++++++++ .../fixtures/for-await/throw3/options.json | 5 ++ .../test/fixtures/for-await/throw3/output.js | 51 ++++++++++++++++ .../test/fixtures/for-await/throw4/exec.js | 18 ++++++ .../test/fixtures/for-await/throw4/input.js | 18 ++++++ .../fixtures/for-await/throw4/options.json | 5 ++ .../test/fixtures/for-await/throw4/output.js | 37 ++++++++++++ .../test/fixtures/regression/13801/output.js | 59 +++++++++++-------- .../test/fixtures/regression/5880/output.js | 15 +++-- .../plugins-integration/issue-11610/output.js | 15 +++-- 26 files changed, 427 insertions(+), 135 deletions(-) create mode 100644 packages/babel-plugin-transform-async-generator-functions/test/fixtures/for-await/throw3/exec.js create mode 100644 packages/babel-plugin-transform-async-generator-functions/test/fixtures/for-await/throw3/input.js create mode 100644 packages/babel-plugin-transform-async-generator-functions/test/fixtures/for-await/throw3/options.json create mode 100644 packages/babel-plugin-transform-async-generator-functions/test/fixtures/for-await/throw3/output.js create mode 100644 packages/babel-plugin-transform-async-generator-functions/test/fixtures/for-await/throw4/exec.js create mode 100644 packages/babel-plugin-transform-async-generator-functions/test/fixtures/for-await/throw4/input.js create mode 100644 packages/babel-plugin-transform-async-generator-functions/test/fixtures/for-await/throw4/options.json create mode 100644 packages/babel-plugin-transform-async-generator-functions/test/fixtures/for-await/throw4/output.js diff --git a/packages/babel-plugin-transform-async-generator-functions/src/for-await.ts b/packages/babel-plugin-transform-async-generator-functions/src/for-await.ts index 05777a4fe736..5a6352079629 100644 --- a/packages/babel-plugin-transform-async-generator-functions/src/for-await.ts +++ b/packages/babel-plugin-transform-async-generator-functions/src/for-await.ts @@ -1,21 +1,21 @@ import { types as t, template } from "@babel/core"; import type { NodePath } from "@babel/traverse"; -const buildForAwait = template(` - async function wrapper() { - var STEP_KEY = {}; +const buildForAwait = template.statements(` + var ITERATOR_KEY = GET_ITERATOR(OBJECT), STEP_KEY = {}, NOT_DONE_KEY; + try { + for (;NOT_DONE_KEY = !(STEP_KEY = await ITERATOR_KEY.next()).done;NOT_DONE_KEY = false) { + } + } catch(e) { + STEP_KEY = null; + throw e; + } finally { try { - for ( - var ITERATOR_KEY = GET_ITERATOR(OBJECT); - !(STEP_KEY = await ITERATOR_KEY.next()).done; - ) { + if (NOT_DONE_KEY && ITERATOR_KEY.return) { + await ITERATOR_KEY.return(); } - } finally { - try { - if (!STEP_KEY.done && ITERATOR_KEY.return != null) { - await ITERATOR_KEY.return(); - } - } catch (e) {} + } catch (e) { + if (STEP_KEY) throw e; } } `); @@ -42,17 +42,14 @@ export default function ( t.variableDeclarator(left.declarations[0].id, stepValue), ]); } - let template = buildForAwait({ + const template = buildForAwait({ ITERATOR_KEY: scope.generateUidIdentifier("iterator"), + NOT_DONE_KEY: scope.generateUidIdentifier("notDone"), GET_ITERATOR: getAsyncIterator, OBJECT: node.right, STEP_KEY: t.cloneNode(stepKey), }); - // remove async function wrapper - // @ts-expect-error todo(flow->ts) improve type annotation for buildForAwait - template = template.body.body as t.Statement[]; - const isLabeledParent = t.isLabeledStatement(parent); const tryBody = (template[1] as t.TryStatement).block.body; const loop = tryBody[0] as t.ForStatement; diff --git a/packages/babel-plugin-transform-async-generator-functions/test/fixtures/for-await/async-arrow/output.js b/packages/babel-plugin-transform-async-generator-functions/test/fixtures/for-await/async-arrow/output.js index 258ed6f84360..9624ea53303e 100644 --- a/packages/babel-plugin-transform-async-generator-functions/test/fixtures/for-await/async-arrow/output.js +++ b/packages/babel-plugin-transform-async-generator-functions/test/fixtures/for-await/async-arrow/output.js @@ -1,17 +1,24 @@ /*#__PURE__*/babelHelpers.asyncToGenerator(function* () { - var _step = {}; + var _iterator = babelHelpers.asyncIterator(y), + _step = {}, + _notDone; try { - for (var _iterator = babelHelpers.asyncIterator(y); !(_step = yield _iterator.next()).done;) { + for (; _notDone = !(_step = yield _iterator.next()).done; _notDone = false) { let x = _step.value; { f(x); } } + } catch (e) { + _step = null; + throw e; } finally { try { - if (!_step.done && _iterator.return != null) { + if (_notDone && _iterator.return) { yield _iterator.return(); } - } catch (e) {} + } catch (e) { + if (_step) throw e; + } } }); diff --git a/packages/babel-plugin-transform-async-generator-functions/test/fixtures/for-await/async-function-no-transform/output.js b/packages/babel-plugin-transform-async-generator-functions/test/fixtures/for-await/async-function-no-transform/output.js index f18fd3bca70d..c250dfa2e940 100644 --- a/packages/babel-plugin-transform-async-generator-functions/test/fixtures/for-await/async-function-no-transform/output.js +++ b/packages/babel-plugin-transform-async-generator-functions/test/fixtures/for-await/async-function-no-transform/output.js @@ -1,14 +1,21 @@ async function foo() { - var _step = {}; + var _iterator = babelHelpers.asyncIterator(y), + _step = {}, + _notDone; try { - for (var _iterator = babelHelpers.asyncIterator(y); !(_step = await _iterator.next()).done;) { + for (; _notDone = !(_step = await _iterator.next()).done; _notDone = false) { const x = _step.value; } + } catch (e) { + _step = null; + throw e; } finally { try { - if (!_step.done && _iterator.return != null) { + if (_notDone && _iterator.return) { await _iterator.return(); } - } catch (e) {} + } catch (e) { + if (_step) throw e; + } } } diff --git a/packages/babel-plugin-transform-async-generator-functions/test/fixtures/for-await/async-function/output.js b/packages/babel-plugin-transform-async-generator-functions/test/fixtures/for-await/async-function/output.js index eabeec3f9313..8f9e8464890f 100644 --- a/packages/babel-plugin-transform-async-generator-functions/test/fixtures/for-await/async-function/output.js +++ b/packages/babel-plugin-transform-async-generator-functions/test/fixtures/for-await/async-function/output.js @@ -1,20 +1,27 @@ var _f; function f() { return (_f = _f || babelHelpers.asyncToGenerator(function* () { - var _step = {}; + var _iterator = babelHelpers.asyncIterator(y), + _step = {}, + _notDone; try { - for (var _iterator = babelHelpers.asyncIterator(y); !(_step = yield _iterator.next()).done;) { + for (; _notDone = !(_step = yield _iterator.next()).done; _notDone = false) { let x = _step.value; { g(x); } } + } catch (e) { + _step = null; + throw e; } finally { try { - if (!_step.done && _iterator.return != null) { + if (_notDone && _iterator.return) { yield _iterator.return(); } - } catch (e) {} + } catch (e) { + if (_step) throw e; + } } })).apply(this, arguments); } diff --git a/packages/babel-plugin-transform-async-generator-functions/test/fixtures/for-await/async-generator/output.js b/packages/babel-plugin-transform-async-generator-functions/test/fixtures/for-await/async-generator/output.js index 8a5b0073e8f0..57d9513e75b6 100644 --- a/packages/babel-plugin-transform-async-generator-functions/test/fixtures/for-await/async-generator/output.js +++ b/packages/babel-plugin-transform-async-generator-functions/test/fixtures/for-await/async-generator/output.js @@ -1,20 +1,27 @@ var _g; function g() { return (_g = _g || babelHelpers.wrapAsyncGenerator(function* () { - var _step = {}; + var _iterator = babelHelpers.asyncIterator(y), + _step = {}, + _notDone; try { - for (var _iterator = babelHelpers.asyncIterator(y); !(_step = yield babelHelpers.awaitAsyncGenerator(_iterator.next())).done;) { + for (; _notDone = !(_step = yield babelHelpers.awaitAsyncGenerator(_iterator.next())).done; _notDone = false) { let x = _step.value; { f(x); } } + } catch (e) { + _step = null; + throw e; } finally { try { - if (!_step.done && _iterator.return != null) { + if (_notDone && _iterator.return) { yield babelHelpers.awaitAsyncGenerator(_iterator.return()); } - } catch (e) {} + } catch (e) { + if (_step) throw e; + } } })).apply(this, arguments); } diff --git a/packages/babel-plugin-transform-async-generator-functions/test/fixtures/for-await/create-async-from-sync-iterator/output.js b/packages/babel-plugin-transform-async-generator-functions/test/fixtures/for-await/create-async-from-sync-iterator/output.js index f31433e8134d..e601810f15a4 100644 --- a/packages/babel-plugin-transform-async-generator-functions/test/fixtures/for-await/create-async-from-sync-iterator/output.js +++ b/packages/babel-plugin-transform-async-generator-functions/test/fixtures/for-await/create-async-from-sync-iterator/output.js @@ -1,9 +1,11 @@ var _fn; function fn() { return (_fn = _fn || babelHelpers.wrapAsyncGenerator(function* () { - var _step = {}; + var _iterator = babelHelpers.asyncIterator([Promise.resolve("ok")]), + _step = {}, + _notDone; try { - for (var _iterator = babelHelpers.asyncIterator([Promise.resolve("ok")]); !(_step = yield babelHelpers.awaitAsyncGenerator(_iterator.next())).done;) { + for (; _notDone = !(_step = yield babelHelpers.awaitAsyncGenerator(_iterator.next())).done; _notDone = false) { const result = _step.value; { return { @@ -11,12 +13,17 @@ function fn() { }; } } + } catch (e) { + _step = null; + throw e; } finally { try { - if (!_step.done && _iterator.return != null) { + if (_notDone && _iterator.return) { yield babelHelpers.awaitAsyncGenerator(_iterator.return()); } - } catch (e) {} + } catch (e) { + if (_step) throw e; + } } })).apply(this, arguments); } diff --git a/packages/babel-plugin-transform-async-generator-functions/test/fixtures/for-await/destructuring/output.js b/packages/babel-plugin-transform-async-generator-functions/test/fixtures/for-await/destructuring/output.js index eaa635794636..daa9fcda2d45 100644 --- a/packages/babel-plugin-transform-async-generator-functions/test/fixtures/for-await/destructuring/output.js +++ b/packages/babel-plugin-transform-async-generator-functions/test/fixtures/for-await/destructuring/output.js @@ -1,9 +1,11 @@ var _f; function f() { return (_f = _f || babelHelpers.asyncToGenerator(function* () { - var _step = {}; + var _iterator = babelHelpers.asyncIterator(a), + _step = {}, + _notDone; try { - for (var _iterator = babelHelpers.asyncIterator(a); !(_step = yield _iterator.next()).done;) { + for (; _notDone = !(_step = yield _iterator.next()).done; _notDone = false) { let { x, y: [z] @@ -12,12 +14,17 @@ function f() { g(x, z); } } + } catch (e) { + _step = null; + throw e; } finally { try { - if (!_step.done && _iterator.return != null) { + if (_notDone && _iterator.return) { yield _iterator.return(); } - } catch (e) {} + } catch (e) { + if (_step) throw e; + } } })).apply(this, arguments); } diff --git a/packages/babel-plugin-transform-async-generator-functions/test/fixtures/for-await/lhs-member-expression/output.js b/packages/babel-plugin-transform-async-generator-functions/test/fixtures/for-await/lhs-member-expression/output.js index 12bf4261c755..49599705c7d7 100644 --- a/packages/babel-plugin-transform-async-generator-functions/test/fixtures/for-await/lhs-member-expression/output.js +++ b/packages/babel-plugin-transform-async-generator-functions/test/fixtures/for-await/lhs-member-expression/output.js @@ -1,14 +1,21 @@ babelHelpers.asyncToGenerator(function* () { - var _step = {}; + var _iterator = babelHelpers.asyncIterator(y), + _step = {}, + _notDone; try { - for (var _iterator = babelHelpers.asyncIterator(y); !(_step = yield _iterator.next()).done;) { + for (; _notDone = !(_step = yield _iterator.next()).done; _notDone = false) { obj.x = _step.value; } + } catch (e) { + _step = null; + throw e; } finally { try { - if (!_step.done && _iterator.return != null) { + if (_notDone && _iterator.return) { yield _iterator.return(); } - } catch (e) {} + } catch (e) { + if (_step) throw e; + } } })(); diff --git a/packages/babel-plugin-transform-async-generator-functions/test/fixtures/for-await/re-declare-var-in-init-body/output.js b/packages/babel-plugin-transform-async-generator-functions/test/fixtures/for-await/re-declare-var-in-init-body/output.js index 4b4c357579d3..6ece954ca6fb 100644 --- a/packages/babel-plugin-transform-async-generator-functions/test/fixtures/for-await/re-declare-var-in-init-body/output.js +++ b/packages/babel-plugin-transform-async-generator-functions/test/fixtures/for-await/re-declare-var-in-init-body/output.js @@ -1,17 +1,24 @@ /*#__PURE__*/babelHelpers.asyncToGenerator(function* () { - var _step = {}; + var _iterator = babelHelpers.asyncIterator([]), + _step = {}, + _notDone; try { - for (var _iterator = babelHelpers.asyncIterator([]); !(_step = yield _iterator.next()).done;) { + for (; _notDone = !(_step = yield _iterator.next()).done; _notDone = false) { let x = _step.value; { let x; } } + } catch (e) { + _step = null; + throw e; } finally { try { - if (!_step.done && _iterator.return != null) { + if (_notDone && _iterator.return) { yield _iterator.return(); } - } catch (e) {} + } catch (e) { + if (_step) throw e; + } } }); diff --git a/packages/babel-plugin-transform-async-generator-functions/test/fixtures/for-await/throw/exec.js b/packages/babel-plugin-transform-async-generator-functions/test/fixtures/for-await/throw/exec.js index 366c77784264..4e1853cce2af 100644 --- a/packages/babel-plugin-transform-async-generator-functions/test/fixtures/for-await/throw/exec.js +++ b/packages/babel-plugin-transform-async-generator-functions/test/fixtures/for-await/throw/exec.js @@ -1,11 +1,11 @@ -let returnCalled = false; +let throwCalled = false; let iterable = { [Symbol.asyncIterator || "@@asyncIterator"]() { return { next: () => ({ done: false, value: 1 }), return: () => { - returnCalled = true; + throwCalled = true; throw "return" } }; @@ -13,13 +13,14 @@ let iterable = { }; return async function () { - let value; + let err; try { - for await (value of iterable) { + for await (const value of iterable) { throw "error" } - } catch (err) { - expect(err).toBe("error"); + } catch (e) { + err = e; } - expect(returnCalled).toBe(true); + expect(err).toBe("error"); + expect(throwCalled).toBe(true); }(); diff --git a/packages/babel-plugin-transform-async-generator-functions/test/fixtures/for-await/throw/input.js b/packages/babel-plugin-transform-async-generator-functions/test/fixtures/for-await/throw/input.js index 366c77784264..4e1853cce2af 100644 --- a/packages/babel-plugin-transform-async-generator-functions/test/fixtures/for-await/throw/input.js +++ b/packages/babel-plugin-transform-async-generator-functions/test/fixtures/for-await/throw/input.js @@ -1,11 +1,11 @@ -let returnCalled = false; +let throwCalled = false; let iterable = { [Symbol.asyncIterator || "@@asyncIterator"]() { return { next: () => ({ done: false, value: 1 }), return: () => { - returnCalled = true; + throwCalled = true; throw "return" } }; @@ -13,13 +13,14 @@ let iterable = { }; return async function () { - let value; + let err; try { - for await (value of iterable) { + for await (const value of iterable) { throw "error" } - } catch (err) { - expect(err).toBe("error"); + } catch (e) { + err = e; } - expect(returnCalled).toBe(true); + expect(err).toBe("error"); + expect(throwCalled).toBe(true); }(); diff --git a/packages/babel-plugin-transform-async-generator-functions/test/fixtures/for-await/throw/output.js b/packages/babel-plugin-transform-async-generator-functions/test/fixtures/for-await/throw/output.js index e737769f57d8..4d672b1b8e6c 100644 --- a/packages/babel-plugin-transform-async-generator-functions/test/fixtures/for-await/throw/output.js +++ b/packages/babel-plugin-transform-async-generator-functions/test/fixtures/for-await/throw/output.js @@ -1,4 +1,4 @@ -let returnCalled = false; +let throwCalled = false; let iterable = { [Symbol.asyncIterator || "@@asyncIterator"]() { return { @@ -7,32 +7,40 @@ let iterable = { value: 1 }), return: () => { - returnCalled = true; + throwCalled = true; throw "return"; } }; } }; return babelHelpers.asyncToGenerator(function* () { - let value; + let err; try { - var _step = {}; + var _iterator = babelHelpers.asyncIterator(iterable), + _step = {}, + _notDone; try { - for (var _iterator = babelHelpers.asyncIterator(iterable); !(_step = yield _iterator.next()).done;) { - value = _step.value; + for (; _notDone = !(_step = yield _iterator.next()).done; _notDone = false) { + const value = _step.value; { throw "error"; } } + } catch (e) { + _step = null; + throw e; } finally { try { - if (!_step.done && _iterator.return != null) { + if (_notDone && _iterator.return) { yield _iterator.return(); } - } catch (e) {} + } catch (e) { + if (_step) throw e; + } } - } catch (err) { - expect(err).toBe("error"); + } catch (e) { + err = e; } - expect(returnCalled).toBe(true); + expect(err).toBe("error"); + expect(throwCalled).toBe(true); })(); diff --git a/packages/babel-plugin-transform-async-generator-functions/test/fixtures/for-await/throw2/exec.js b/packages/babel-plugin-transform-async-generator-functions/test/fixtures/for-await/throw2/exec.js index f7fb1f3ddbc7..85c4a650dd02 100644 --- a/packages/babel-plugin-transform-async-generator-functions/test/fixtures/for-await/throw2/exec.js +++ b/packages/babel-plugin-transform-async-generator-functions/test/fixtures/for-await/throw2/exec.js @@ -1,4 +1,4 @@ -let returnCalled = false; +let throwCalled = false; let iterable = { [Symbol.asyncIterator || "@@asyncIterator"]() { @@ -7,19 +7,20 @@ let iterable = { throw "next" }, return: () => { - returnCalled = true; - throw "return" - } + throwCalled = true; + throw "return" + } }; }, }; return async function () { - let value; + let err; try { - for await (value of iterable); - } catch (err) { - expect(err).toBe("next"); + for await (const value of iterable); + } catch (e) { + err = e; } - expect(returnCalled).toBe(true); + expect(err).toBe("next"); + expect(throwCalled).toBe(false); }(); diff --git a/packages/babel-plugin-transform-async-generator-functions/test/fixtures/for-await/throw2/input.js b/packages/babel-plugin-transform-async-generator-functions/test/fixtures/for-await/throw2/input.js index f7fb1f3ddbc7..85c4a650dd02 100644 --- a/packages/babel-plugin-transform-async-generator-functions/test/fixtures/for-await/throw2/input.js +++ b/packages/babel-plugin-transform-async-generator-functions/test/fixtures/for-await/throw2/input.js @@ -1,4 +1,4 @@ -let returnCalled = false; +let throwCalled = false; let iterable = { [Symbol.asyncIterator || "@@asyncIterator"]() { @@ -7,19 +7,20 @@ let iterable = { throw "next" }, return: () => { - returnCalled = true; - throw "return" - } + throwCalled = true; + throw "return" + } }; }, }; return async function () { - let value; + let err; try { - for await (value of iterable); - } catch (err) { - expect(err).toBe("next"); + for await (const value of iterable); + } catch (e) { + err = e; } - expect(returnCalled).toBe(true); + expect(err).toBe("next"); + expect(throwCalled).toBe(false); }(); diff --git a/packages/babel-plugin-transform-async-generator-functions/test/fixtures/for-await/throw2/output.js b/packages/babel-plugin-transform-async-generator-functions/test/fixtures/for-await/throw2/output.js index 663d2482a4c2..1a158bd7ab6e 100644 --- a/packages/babel-plugin-transform-async-generator-functions/test/fixtures/for-await/throw2/output.js +++ b/packages/babel-plugin-transform-async-generator-functions/test/fixtures/for-await/throw2/output.js @@ -1,4 +1,4 @@ -let returnCalled = false; +let throwCalled = false; let iterable = { [Symbol.asyncIterator || "@@asyncIterator"]() { return { @@ -6,32 +6,40 @@ let iterable = { throw "next"; }, return: () => { - returnCalled = true; + throwCalled = true; throw "return"; } }; } }; return babelHelpers.asyncToGenerator(function* () { - let value; + let err; try { - var _step = {}; + var _iterator = babelHelpers.asyncIterator(iterable), + _step = {}, + _notDone; try { - for (var _iterator = babelHelpers.asyncIterator(iterable); !(_step = yield _iterator.next()).done;) { - value = _step.value; + for (; _notDone = !(_step = yield _iterator.next()).done; _notDone = false) { + const value = _step.value; { ; } } + } catch (e) { + _step = null; + throw e; } finally { try { - if (!_step.done && _iterator.return != null) { + if (_notDone && _iterator.return) { yield _iterator.return(); } - } catch (e) {} + } catch (e) { + if (_step) throw e; + } } - } catch (err) { - expect(err).toBe("next"); + } catch (e) { + err = e; } - expect(returnCalled).toBe(true); + expect(err).toBe("next"); + expect(throwCalled).toBe(false); })(); diff --git a/packages/babel-plugin-transform-async-generator-functions/test/fixtures/for-await/throw3/exec.js b/packages/babel-plugin-transform-async-generator-functions/test/fixtures/for-await/throw3/exec.js new file mode 100644 index 000000000000..536e1a04fd7f --- /dev/null +++ b/packages/babel-plugin-transform-async-generator-functions/test/fixtures/for-await/throw3/exec.js @@ -0,0 +1,29 @@ +let throwCalled = false; +let i; +let iterable = { + [Symbol.asyncIterator || "@@asyncIterator"]() { + return { + next: () => { + i++; + if(i) return { done: false, value: 1 }; + + throw "next" + }, + return: () => { + throwCalled = true; + throw "return" + } + }; + }, +}; + +return async function () { + let err; + try { + for await (const value of iterable); + } catch (e) { + err = e; + } + expect(err).toBe("next"); + expect(throwCalled).toBe(false); +}(); diff --git a/packages/babel-plugin-transform-async-generator-functions/test/fixtures/for-await/throw3/input.js b/packages/babel-plugin-transform-async-generator-functions/test/fixtures/for-await/throw3/input.js new file mode 100644 index 000000000000..536e1a04fd7f --- /dev/null +++ b/packages/babel-plugin-transform-async-generator-functions/test/fixtures/for-await/throw3/input.js @@ -0,0 +1,29 @@ +let throwCalled = false; +let i; +let iterable = { + [Symbol.asyncIterator || "@@asyncIterator"]() { + return { + next: () => { + i++; + if(i) return { done: false, value: 1 }; + + throw "next" + }, + return: () => { + throwCalled = true; + throw "return" + } + }; + }, +}; + +return async function () { + let err; + try { + for await (const value of iterable); + } catch (e) { + err = e; + } + expect(err).toBe("next"); + expect(throwCalled).toBe(false); +}(); diff --git a/packages/babel-plugin-transform-async-generator-functions/test/fixtures/for-await/throw3/options.json b/packages/babel-plugin-transform-async-generator-functions/test/fixtures/for-await/throw3/options.json new file mode 100644 index 000000000000..eeebc1a57738 --- /dev/null +++ b/packages/babel-plugin-transform-async-generator-functions/test/fixtures/for-await/throw3/options.json @@ -0,0 +1,5 @@ +{ + "parserOpts": { + "allowReturnOutsideFunction": true + } +} diff --git a/packages/babel-plugin-transform-async-generator-functions/test/fixtures/for-await/throw3/output.js b/packages/babel-plugin-transform-async-generator-functions/test/fixtures/for-await/throw3/output.js new file mode 100644 index 000000000000..1c335711fb73 --- /dev/null +++ b/packages/babel-plugin-transform-async-generator-functions/test/fixtures/for-await/throw3/output.js @@ -0,0 +1,51 @@ +let throwCalled = false; +let i; +let iterable = { + [Symbol.asyncIterator || "@@asyncIterator"]() { + return { + next: () => { + i++; + if (i) return { + done: false, + value: 1 + }; + throw "next"; + }, + return: () => { + throwCalled = true; + throw "return"; + } + }; + } +}; +return babelHelpers.asyncToGenerator(function* () { + let err; + try { + var _iterator = babelHelpers.asyncIterator(iterable), + _step = {}, + _notDone; + try { + for (; _notDone = !(_step = yield _iterator.next()).done; _notDone = false) { + const value = _step.value; + { + ; + } + } + } catch (e) { + _step = null; + throw e; + } finally { + try { + if (_notDone && _iterator.return) { + yield _iterator.return(); + } + } catch (e) { + if (_step) throw e; + } + } + } catch (e) { + err = e; + } + expect(err).toBe("next"); + expect(throwCalled).toBe(false); +})(); diff --git a/packages/babel-plugin-transform-async-generator-functions/test/fixtures/for-await/throw4/exec.js b/packages/babel-plugin-transform-async-generator-functions/test/fixtures/for-await/throw4/exec.js new file mode 100644 index 000000000000..c7d94c3ec81d --- /dev/null +++ b/packages/babel-plugin-transform-async-generator-functions/test/fixtures/for-await/throw4/exec.js @@ -0,0 +1,18 @@ +function* gen() { + try { + yield 1; + } finally { + throw 2; + } +} + +return async function () { + let err; + try { + for await (const _ of gen()) break; + } catch (e) { + err = e; + } + + expect(err).toBe(2); +}() diff --git a/packages/babel-plugin-transform-async-generator-functions/test/fixtures/for-await/throw4/input.js b/packages/babel-plugin-transform-async-generator-functions/test/fixtures/for-await/throw4/input.js new file mode 100644 index 000000000000..c7d94c3ec81d --- /dev/null +++ b/packages/babel-plugin-transform-async-generator-functions/test/fixtures/for-await/throw4/input.js @@ -0,0 +1,18 @@ +function* gen() { + try { + yield 1; + } finally { + throw 2; + } +} + +return async function () { + let err; + try { + for await (const _ of gen()) break; + } catch (e) { + err = e; + } + + expect(err).toBe(2); +}() diff --git a/packages/babel-plugin-transform-async-generator-functions/test/fixtures/for-await/throw4/options.json b/packages/babel-plugin-transform-async-generator-functions/test/fixtures/for-await/throw4/options.json new file mode 100644 index 000000000000..eeebc1a57738 --- /dev/null +++ b/packages/babel-plugin-transform-async-generator-functions/test/fixtures/for-await/throw4/options.json @@ -0,0 +1,5 @@ +{ + "parserOpts": { + "allowReturnOutsideFunction": true + } +} diff --git a/packages/babel-plugin-transform-async-generator-functions/test/fixtures/for-await/throw4/output.js b/packages/babel-plugin-transform-async-generator-functions/test/fixtures/for-await/throw4/output.js new file mode 100644 index 000000000000..044fcd6e97e0 --- /dev/null +++ b/packages/babel-plugin-transform-async-generator-functions/test/fixtures/for-await/throw4/output.js @@ -0,0 +1,37 @@ +function* gen() { + try { + yield 1; + } finally { + throw 2; + } +} +return babelHelpers.asyncToGenerator(function* () { + let err; + try { + var _iterator = babelHelpers.asyncIterator(gen()), + _step = {}, + _notDone; + try { + for (; _notDone = !(_step = yield _iterator.next()).done; _notDone = false) { + const _ = _step.value; + { + break; + } + } + } catch (e) { + _step = null; + throw e; + } finally { + try { + if (_notDone && _iterator.return) { + yield _iterator.return(); + } + } catch (e) { + if (_step) throw e; + } + } + } catch (e) { + err = e; + } + expect(err).toBe(2); +})(); diff --git a/packages/babel-plugin-transform-async-generator-functions/test/fixtures/regression/13801/output.js b/packages/babel-plugin-transform-async-generator-functions/test/fixtures/regression/13801/output.js index 395025484f1c..f476583e0065 100644 --- a/packages/babel-plugin-transform-async-generator-functions/test/fixtures/regression/13801/output.js +++ b/packages/babel-plugin-transform-async-generator-functions/test/fixtures/regression/13801/output.js @@ -7,50 +7,63 @@ function main() { while (1) switch (_context2.prev = _context2.next) { case 0: () => { - var _step, _iterator, string; + var _iterator, _step, _notDone, string; return _regeneratorRuntime().async(function _callee$(_context) { while (1) switch (_context.prev = _context.next) { case 0: // IIFE: required for babel to crash - _step = {}; + _iterator = _asyncIterator(async_iterable), _step = {}; _context.prev = 1; - _iterator = _asyncIterator(async_iterable); - case 3: - _context.next = 5; + case 2: + _context.next = 4; return _regeneratorRuntime().awrap(_iterator.next()); - case 5: - if ((_step = _context.sent).done) { + case 4: + if (!(_notDone = !(_step = _context.sent).done)) { _context.next = 10; break; } string = _step.value; // for await: required for babel to crash console.log(string); - case 8: - _context.next = 3; + case 7: + _notDone = false; + _context.next = 2; break; case 10: - _context.prev = 10; - _context.prev = 11; - if (!(!_step.done && _iterator.return != null)) { - _context.next = 15; + _context.next = 16; + break; + case 12: + _context.prev = 12; + _context.t0 = _context["catch"](1); + _step = null; + throw _context.t0; + case 16: + _context.prev = 16; + _context.prev = 17; + if (!(_notDone && _iterator.return)) { + _context.next = 21; break; } - _context.next = 15; + _context.next = 21; return _regeneratorRuntime().awrap(_iterator.return()); - case 15: - _context.next = 19; + case 21: + _context.next = 27; break; - case 17: - _context.prev = 17; - _context.t0 = _context["catch"](11); - case 19: - return _context.finish(10); - case 20: + case 23: + _context.prev = 23; + _context.t1 = _context["catch"](17); + if (!_step) { + _context.next = 27; + break; + } + throw _context.t1; + case 27: + return _context.finish(16); + case 28: case "end": return _context.stop(); } - }, null, null, [[1,, 10, 20], [11, 17]], Promise); + }, null, null, [[1, 12, 16, 28], [17, 23]], Promise); }; one = 1; // array destructuring: required for babel to crash case 2: diff --git a/packages/babel-plugin-transform-async-generator-functions/test/fixtures/regression/5880/output.js b/packages/babel-plugin-transform-async-generator-functions/test/fixtures/regression/5880/output.js index ff429918a072..a6079d41b710 100644 --- a/packages/babel-plugin-transform-async-generator-functions/test/fixtures/regression/5880/output.js +++ b/packages/babel-plugin-transform-async-generator-functions/test/fixtures/regression/5880/output.js @@ -1,15 +1,22 @@ (async () => { - var _step = {}; + var _iterator = babelHelpers.asyncIterator(iterable), + _step = {}, + _notDone; try { - for (var _iterator = babelHelpers.asyncIterator(iterable); !(_step = await _iterator.next()).done;) { + for (; _notDone = !(_step = await _iterator.next()).done; _notDone = false) { const _step$value = babelHelpers.slicedToArray(_step.value, 1), value = _step$value[0]; } + } catch (e) { + _step = null; + throw e; } finally { try { - if (!_step.done && _iterator.return != null) { + if (_notDone && _iterator.return) { await _iterator.return(); } - } catch (e) {} + } catch (e) { + if (_step) throw e; + } } })(); diff --git a/packages/babel-preset-env/test/fixtures/plugins-integration/issue-11610/output.js b/packages/babel-preset-env/test/fixtures/plugins-integration/issue-11610/output.js index 4f3ee6555d97..6af86c97b667 100644 --- a/packages/babel-preset-env/test/fixtures/plugins-integration/issue-11610/output.js +++ b/packages/babel-preset-env/test/fixtures/plugins-integration/issue-11610/output.js @@ -1,15 +1,22 @@ async function v() { let source = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 2; - var _step = {}; + var _iterator = babelHelpers.asyncIterator([1]), + _step = {}, + _notDone; try { - for (var _iterator = babelHelpers.asyncIterator([1]); !(_step = await _iterator.next()).done;) { + for (; _notDone = !(_step = await _iterator.next()).done; _notDone = false) { source = _step.value; } + } catch (e) { + _step = null; + throw e; } finally { try { - if (!_step.done && _iterator.return != null) { + if (_notDone && _iterator.return) { await _iterator.return(); } - } catch (e) {} + } catch (e) { + if (_step) throw e; + } } } From b8b95c26e5a7c7843d764b7e2817ba45f91c7e1f Mon Sep 17 00:00:00 2001 From: liuxingbaoyu <30521560+liuxingbaoyu@users.noreply.github.com> Date: Sun, 10 Sep 2023 11:07:00 +0800 Subject: [PATCH 3/3] clean --- .../src/for-await.ts | 2 +- .../test/fixtures/for-await/async-arrow/output.js | 2 +- .../fixtures/for-await/async-function-no-transform/output.js | 2 +- .../test/fixtures/for-await/async-function/output.js | 2 +- .../test/fixtures/for-await/async-generator/output.js | 2 +- .../for-await/create-async-from-sync-iterator/output.js | 2 +- .../test/fixtures/for-await/destructuring/output.js | 2 +- .../test/fixtures/for-await/lhs-member-expression/output.js | 2 +- .../fixtures/for-await/re-declare-var-in-init-body/output.js | 2 +- .../test/fixtures/for-await/throw/output.js | 2 +- .../test/fixtures/for-await/throw2/output.js | 2 +- .../test/fixtures/for-await/throw3/output.js | 2 +- .../test/fixtures/for-await/throw4/output.js | 2 +- .../test/fixtures/regression/13801/output.js | 2 +- .../test/fixtures/regression/5880/output.js | 2 +- .../test/fixtures/plugins-integration/issue-11610/output.js | 2 +- 16 files changed, 16 insertions(+), 16 deletions(-) diff --git a/packages/babel-plugin-transform-async-generator-functions/src/for-await.ts b/packages/babel-plugin-transform-async-generator-functions/src/for-await.ts index 5a6352079629..f3825e4069bb 100644 --- a/packages/babel-plugin-transform-async-generator-functions/src/for-await.ts +++ b/packages/babel-plugin-transform-async-generator-functions/src/for-await.ts @@ -2,7 +2,7 @@ import { types as t, template } from "@babel/core"; import type { NodePath } from "@babel/traverse"; const buildForAwait = template.statements(` - var ITERATOR_KEY = GET_ITERATOR(OBJECT), STEP_KEY = {}, NOT_DONE_KEY; + var ITERATOR_KEY = GET_ITERATOR(OBJECT), STEP_KEY, NOT_DONE_KEY; try { for (;NOT_DONE_KEY = !(STEP_KEY = await ITERATOR_KEY.next()).done;NOT_DONE_KEY = false) { } diff --git a/packages/babel-plugin-transform-async-generator-functions/test/fixtures/for-await/async-arrow/output.js b/packages/babel-plugin-transform-async-generator-functions/test/fixtures/for-await/async-arrow/output.js index 9624ea53303e..9cb559f6c882 100644 --- a/packages/babel-plugin-transform-async-generator-functions/test/fixtures/for-await/async-arrow/output.js +++ b/packages/babel-plugin-transform-async-generator-functions/test/fixtures/for-await/async-arrow/output.js @@ -1,6 +1,6 @@ /*#__PURE__*/babelHelpers.asyncToGenerator(function* () { var _iterator = babelHelpers.asyncIterator(y), - _step = {}, + _step, _notDone; try { for (; _notDone = !(_step = yield _iterator.next()).done; _notDone = false) { diff --git a/packages/babel-plugin-transform-async-generator-functions/test/fixtures/for-await/async-function-no-transform/output.js b/packages/babel-plugin-transform-async-generator-functions/test/fixtures/for-await/async-function-no-transform/output.js index c250dfa2e940..8be804d9b732 100644 --- a/packages/babel-plugin-transform-async-generator-functions/test/fixtures/for-await/async-function-no-transform/output.js +++ b/packages/babel-plugin-transform-async-generator-functions/test/fixtures/for-await/async-function-no-transform/output.js @@ -1,6 +1,6 @@ async function foo() { var _iterator = babelHelpers.asyncIterator(y), - _step = {}, + _step, _notDone; try { for (; _notDone = !(_step = await _iterator.next()).done; _notDone = false) { diff --git a/packages/babel-plugin-transform-async-generator-functions/test/fixtures/for-await/async-function/output.js b/packages/babel-plugin-transform-async-generator-functions/test/fixtures/for-await/async-function/output.js index 8f9e8464890f..01d06dec145e 100644 --- a/packages/babel-plugin-transform-async-generator-functions/test/fixtures/for-await/async-function/output.js +++ b/packages/babel-plugin-transform-async-generator-functions/test/fixtures/for-await/async-function/output.js @@ -2,7 +2,7 @@ var _f; function f() { return (_f = _f || babelHelpers.asyncToGenerator(function* () { var _iterator = babelHelpers.asyncIterator(y), - _step = {}, + _step, _notDone; try { for (; _notDone = !(_step = yield _iterator.next()).done; _notDone = false) { diff --git a/packages/babel-plugin-transform-async-generator-functions/test/fixtures/for-await/async-generator/output.js b/packages/babel-plugin-transform-async-generator-functions/test/fixtures/for-await/async-generator/output.js index 57d9513e75b6..e5720b14ab88 100644 --- a/packages/babel-plugin-transform-async-generator-functions/test/fixtures/for-await/async-generator/output.js +++ b/packages/babel-plugin-transform-async-generator-functions/test/fixtures/for-await/async-generator/output.js @@ -2,7 +2,7 @@ var _g; function g() { return (_g = _g || babelHelpers.wrapAsyncGenerator(function* () { var _iterator = babelHelpers.asyncIterator(y), - _step = {}, + _step, _notDone; try { for (; _notDone = !(_step = yield babelHelpers.awaitAsyncGenerator(_iterator.next())).done; _notDone = false) { diff --git a/packages/babel-plugin-transform-async-generator-functions/test/fixtures/for-await/create-async-from-sync-iterator/output.js b/packages/babel-plugin-transform-async-generator-functions/test/fixtures/for-await/create-async-from-sync-iterator/output.js index e601810f15a4..10eef3148001 100644 --- a/packages/babel-plugin-transform-async-generator-functions/test/fixtures/for-await/create-async-from-sync-iterator/output.js +++ b/packages/babel-plugin-transform-async-generator-functions/test/fixtures/for-await/create-async-from-sync-iterator/output.js @@ -2,7 +2,7 @@ var _fn; function fn() { return (_fn = _fn || babelHelpers.wrapAsyncGenerator(function* () { var _iterator = babelHelpers.asyncIterator([Promise.resolve("ok")]), - _step = {}, + _step, _notDone; try { for (; _notDone = !(_step = yield babelHelpers.awaitAsyncGenerator(_iterator.next())).done; _notDone = false) { diff --git a/packages/babel-plugin-transform-async-generator-functions/test/fixtures/for-await/destructuring/output.js b/packages/babel-plugin-transform-async-generator-functions/test/fixtures/for-await/destructuring/output.js index daa9fcda2d45..265850da771a 100644 --- a/packages/babel-plugin-transform-async-generator-functions/test/fixtures/for-await/destructuring/output.js +++ b/packages/babel-plugin-transform-async-generator-functions/test/fixtures/for-await/destructuring/output.js @@ -2,7 +2,7 @@ var _f; function f() { return (_f = _f || babelHelpers.asyncToGenerator(function* () { var _iterator = babelHelpers.asyncIterator(a), - _step = {}, + _step, _notDone; try { for (; _notDone = !(_step = yield _iterator.next()).done; _notDone = false) { diff --git a/packages/babel-plugin-transform-async-generator-functions/test/fixtures/for-await/lhs-member-expression/output.js b/packages/babel-plugin-transform-async-generator-functions/test/fixtures/for-await/lhs-member-expression/output.js index 49599705c7d7..4afae9be3e54 100644 --- a/packages/babel-plugin-transform-async-generator-functions/test/fixtures/for-await/lhs-member-expression/output.js +++ b/packages/babel-plugin-transform-async-generator-functions/test/fixtures/for-await/lhs-member-expression/output.js @@ -1,6 +1,6 @@ babelHelpers.asyncToGenerator(function* () { var _iterator = babelHelpers.asyncIterator(y), - _step = {}, + _step, _notDone; try { for (; _notDone = !(_step = yield _iterator.next()).done; _notDone = false) { diff --git a/packages/babel-plugin-transform-async-generator-functions/test/fixtures/for-await/re-declare-var-in-init-body/output.js b/packages/babel-plugin-transform-async-generator-functions/test/fixtures/for-await/re-declare-var-in-init-body/output.js index 6ece954ca6fb..535e9dc2a936 100644 --- a/packages/babel-plugin-transform-async-generator-functions/test/fixtures/for-await/re-declare-var-in-init-body/output.js +++ b/packages/babel-plugin-transform-async-generator-functions/test/fixtures/for-await/re-declare-var-in-init-body/output.js @@ -1,6 +1,6 @@ /*#__PURE__*/babelHelpers.asyncToGenerator(function* () { var _iterator = babelHelpers.asyncIterator([]), - _step = {}, + _step, _notDone; try { for (; _notDone = !(_step = yield _iterator.next()).done; _notDone = false) { diff --git a/packages/babel-plugin-transform-async-generator-functions/test/fixtures/for-await/throw/output.js b/packages/babel-plugin-transform-async-generator-functions/test/fixtures/for-await/throw/output.js index 4d672b1b8e6c..4dcf11e10a74 100644 --- a/packages/babel-plugin-transform-async-generator-functions/test/fixtures/for-await/throw/output.js +++ b/packages/babel-plugin-transform-async-generator-functions/test/fixtures/for-await/throw/output.js @@ -17,7 +17,7 @@ return babelHelpers.asyncToGenerator(function* () { let err; try { var _iterator = babelHelpers.asyncIterator(iterable), - _step = {}, + _step, _notDone; try { for (; _notDone = !(_step = yield _iterator.next()).done; _notDone = false) { diff --git a/packages/babel-plugin-transform-async-generator-functions/test/fixtures/for-await/throw2/output.js b/packages/babel-plugin-transform-async-generator-functions/test/fixtures/for-await/throw2/output.js index 1a158bd7ab6e..0310af3ba663 100644 --- a/packages/babel-plugin-transform-async-generator-functions/test/fixtures/for-await/throw2/output.js +++ b/packages/babel-plugin-transform-async-generator-functions/test/fixtures/for-await/throw2/output.js @@ -16,7 +16,7 @@ return babelHelpers.asyncToGenerator(function* () { let err; try { var _iterator = babelHelpers.asyncIterator(iterable), - _step = {}, + _step, _notDone; try { for (; _notDone = !(_step = yield _iterator.next()).done; _notDone = false) { diff --git a/packages/babel-plugin-transform-async-generator-functions/test/fixtures/for-await/throw3/output.js b/packages/babel-plugin-transform-async-generator-functions/test/fixtures/for-await/throw3/output.js index 1c335711fb73..cfc92c193935 100644 --- a/packages/babel-plugin-transform-async-generator-functions/test/fixtures/for-await/throw3/output.js +++ b/packages/babel-plugin-transform-async-generator-functions/test/fixtures/for-await/throw3/output.js @@ -22,7 +22,7 @@ return babelHelpers.asyncToGenerator(function* () { let err; try { var _iterator = babelHelpers.asyncIterator(iterable), - _step = {}, + _step, _notDone; try { for (; _notDone = !(_step = yield _iterator.next()).done; _notDone = false) { diff --git a/packages/babel-plugin-transform-async-generator-functions/test/fixtures/for-await/throw4/output.js b/packages/babel-plugin-transform-async-generator-functions/test/fixtures/for-await/throw4/output.js index 044fcd6e97e0..0e5675511fdb 100644 --- a/packages/babel-plugin-transform-async-generator-functions/test/fixtures/for-await/throw4/output.js +++ b/packages/babel-plugin-transform-async-generator-functions/test/fixtures/for-await/throw4/output.js @@ -9,7 +9,7 @@ return babelHelpers.asyncToGenerator(function* () { let err; try { var _iterator = babelHelpers.asyncIterator(gen()), - _step = {}, + _step, _notDone; try { for (; _notDone = !(_step = yield _iterator.next()).done; _notDone = false) { diff --git a/packages/babel-plugin-transform-async-generator-functions/test/fixtures/regression/13801/output.js b/packages/babel-plugin-transform-async-generator-functions/test/fixtures/regression/13801/output.js index f476583e0065..172bfe2d578a 100644 --- a/packages/babel-plugin-transform-async-generator-functions/test/fixtures/regression/13801/output.js +++ b/packages/babel-plugin-transform-async-generator-functions/test/fixtures/regression/13801/output.js @@ -12,7 +12,7 @@ function main() { while (1) switch (_context.prev = _context.next) { case 0: // IIFE: required for babel to crash - _iterator = _asyncIterator(async_iterable), _step = {}; + _iterator = _asyncIterator(async_iterable); _context.prev = 1; case 2: _context.next = 4; diff --git a/packages/babel-plugin-transform-async-generator-functions/test/fixtures/regression/5880/output.js b/packages/babel-plugin-transform-async-generator-functions/test/fixtures/regression/5880/output.js index a6079d41b710..43f5698e386d 100644 --- a/packages/babel-plugin-transform-async-generator-functions/test/fixtures/regression/5880/output.js +++ b/packages/babel-plugin-transform-async-generator-functions/test/fixtures/regression/5880/output.js @@ -1,6 +1,6 @@ (async () => { var _iterator = babelHelpers.asyncIterator(iterable), - _step = {}, + _step, _notDone; try { for (; _notDone = !(_step = await _iterator.next()).done; _notDone = false) { diff --git a/packages/babel-preset-env/test/fixtures/plugins-integration/issue-11610/output.js b/packages/babel-preset-env/test/fixtures/plugins-integration/issue-11610/output.js index 6af86c97b667..f06286833134 100644 --- a/packages/babel-preset-env/test/fixtures/plugins-integration/issue-11610/output.js +++ b/packages/babel-preset-env/test/fixtures/plugins-integration/issue-11610/output.js @@ -1,7 +1,7 @@ async function v() { let source = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 2; var _iterator = babelHelpers.asyncIterator([1]), - _step = {}, + _step, _notDone; try { for (; _notDone = !(_step = await _iterator.next()).done; _notDone = false) {