diff --git a/packages/babel-plugin-transform-block-scoping/test/fixtures/general/assignment-patterns/output.js b/packages/babel-plugin-transform-block-scoping/test/fixtures/general/assignment-patterns/output.js index bb78265a03de..a536dc765744 100644 --- a/packages/babel-plugin-transform-block-scoping/test/fixtures/general/assignment-patterns/output.js +++ b/packages/babel-plugin-transform-block-scoping/test/fixtures/general/assignment-patterns/output.js @@ -1,7 +1,7 @@ var foo = "foo"; function foobar() { for (var item of [1, 2, 3]) { - var _foo = "bar"; - [bar, _foo] = [1, 2]; + var foo = "bar"; + [bar, foo] = [1, 2]; } } diff --git a/packages/babel-plugin-transform-block-scoping/test/fixtures/general/closure-in-generator-or-async/exec.js b/packages/babel-plugin-transform-block-scoping/test/fixtures/general/closure-in-generator-or-async/exec.js new file mode 100644 index 000000000000..ea10cf3b383e --- /dev/null +++ b/packages/babel-plugin-transform-block-scoping/test/fixtures/general/closure-in-generator-or-async/exec.js @@ -0,0 +1,36 @@ +function* a() { + do { + let x = yield "iteration"; + var fn = () => x; + } while (false); + return fn; +} + +async function b() { + do { + let x = await "iteration"; + var fn = () => x; + } while (false); + return fn; +} + +async function* c() { + do { + let x = yield "iteration"; + var fn = () => x; + } while (false); + return fn; +} + +return (async () => { + let it = a(); + expect(it.next().value).toBe("iteration"); + expect(it.next("foo").value()).toBe("foo"); + + expect((await b())()).toBe("iteration"); + + it = c(); + expect((await it.next()).value).toBe("iteration"); + expect((await it.next("foo")).value()).toBe("foo"); +})(); + diff --git a/packages/babel-plugin-transform-block-scoping/test/fixtures/general/closure-in-generator-or-async/input.js b/packages/babel-plugin-transform-block-scoping/test/fixtures/general/closure-in-generator-or-async/input.js new file mode 100644 index 000000000000..bdee9b6b638d --- /dev/null +++ b/packages/babel-plugin-transform-block-scoping/test/fixtures/general/closure-in-generator-or-async/input.js @@ -0,0 +1,23 @@ +function* a() { + do { + let x = yield "iteration"; + var fn = () => x; + } while (false); + return fn; +} + +async function b() { + do { + let x = await "iteration"; + var fn = () => x; + } while (false); + return fn; +} + +async function* c() { + do { + let x = yield "iteration"; + var fn = () => x; + } while (false); + return fn; +} diff --git a/packages/babel-plugin-transform-block-scoping/test/fixtures/general/closure-in-generator-or-async/options.json b/packages/babel-plugin-transform-block-scoping/test/fixtures/general/closure-in-generator-or-async/options.json new file mode 100644 index 000000000000..eeebc1a57738 --- /dev/null +++ b/packages/babel-plugin-transform-block-scoping/test/fixtures/general/closure-in-generator-or-async/options.json @@ -0,0 +1,5 @@ +{ + "parserOpts": { + "allowReturnOutsideFunction": true + } +} diff --git a/packages/babel-plugin-transform-block-scoping/test/fixtures/general/closure-in-generator-or-async/output.js b/packages/babel-plugin-transform-block-scoping/test/fixtures/general/closure-in-generator-or-async/output.js new file mode 100644 index 000000000000..38820e647c6f --- /dev/null +++ b/packages/babel-plugin-transform-block-scoping/test/fixtures/general/closure-in-generator-or-async/output.js @@ -0,0 +1,39 @@ +function* a() { + var _loop = function* () { + var x = yield "iteration"; + fn = function () { + return x; + }; + }; + do { + var fn; + yield* _loop(); + } while (false); + return fn; +} +async function b() { + var _loop2 = async function () { + var x = await "iteration"; + fn = function () { + return x; + }; + }; + do { + var fn; + await _loop2(); + } while (false); + return fn; +} +async function* c() { + var _loop3 = async function* () { + var x = yield "iteration"; + fn = function () { + return x; + }; + }; + do { + var fn; + yield* _loop3(); + } while (false); + return fn; +} diff --git a/packages/babel-plugin-transform-block-scoping/test/fixtures/general/for-break-continue-closure/output.js b/packages/babel-plugin-transform-block-scoping/test/fixtures/general/for-break-continue-closure/output.js index 063b9a8a1a5d..4c201717d9f3 100644 --- a/packages/babel-plugin-transform-block-scoping/test/fixtures/general/for-break-continue-closure/output.js +++ b/packages/babel-plugin-transform-block-scoping/test/fixtures/general/for-break-continue-closure/output.js @@ -1,21 +1,21 @@ -for (var a of [1]) { +var _loop = function () { switch (true) { case true: { - var _ret = function () { - var b = 1; - (function () { - return b; - }); - if (true) return "break"; - return "continue"; - }(); - if (_ret === "break") break; - if (_ret === "continue") continue; + var b = 1; + (function () { + return b; + }); + if (true) break; + return "continue"; } case false: { throw new Error("unreachable"); } } +}; +for (var a of [1]) { + var _ret = _loop(); + if (_ret === "continue") continue; } diff --git a/packages/babel-plugin-transform-block-scoping/test/fixtures/general/for-const-closure/output.js b/packages/babel-plugin-transform-block-scoping/test/fixtures/general/for-const-closure/output.js index 1ed6687913d8..e4f9cabb7fa1 100644 --- a/packages/babel-plugin-transform-block-scoping/test/fixtures/general/for-const-closure/output.js +++ b/packages/babel-plugin-transform-block-scoping/test/fixtures/general/for-const-closure/output.js @@ -1,9 +1,9 @@ -var _loop = function (i) { +var _loop = function () { var l = i; setTimeout(function () { console.log(l); }, 1); }; for (var i = 0; i < 5; i++) { - _loop(i); + _loop(); } diff --git a/packages/babel-plugin-transform-block-scoping/test/fixtures/general/hoisting/output.js b/packages/babel-plugin-transform-block-scoping/test/fixtures/general/hoisting/output.js index faace9331c8f..389258c3f917 100644 --- a/packages/babel-plugin-transform-block-scoping/test/fixtures/general/hoisting/output.js +++ b/packages/babel-plugin-transform-block-scoping/test/fixtures/general/hoisting/output.js @@ -14,8 +14,7 @@ var _iterator = babelHelpers.createForOfIteratorHelper(nums), try { for (_iterator.s(); !(_step = _iterator.n()).done;) { var i = _step.value; - var x; - var f; + var x, f; _loop(i); } } catch (err) { diff --git a/packages/babel-plugin-transform-block-scoping/test/fixtures/general/issue-10046-generator/output.js b/packages/babel-plugin-transform-block-scoping/test/fixtures/general/issue-10046-generator/output.js index 890482ff355d..e28b19cdd0d0 100644 --- a/packages/babel-plugin-transform-block-scoping/test/fixtures/general/issue-10046-generator/output.js +++ b/packages/babel-plugin-transform-block-scoping/test/fixtures/general/issue-10046-generator/output.js @@ -1,14 +1,12 @@ if (true) { var _run = /*#__PURE__*/babelHelpers.regeneratorRuntime().mark(function _callee() { return babelHelpers.regeneratorRuntime().wrap(function _callee$(_context) { - while (1) { - switch (_context.prev = _context.next) { - case 0: - return _context.abrupt("return", true); - case 1: - case "end": - return _context.stop(); - } + while (1) switch (_context.prev = _context.next) { + case 0: + return _context.abrupt("return", true); + case 1: + case "end": + return _context.stop(); } }, _callee); }); diff --git a/packages/babel-plugin-transform-block-scoping/test/fixtures/general/issue-10339/exec.js b/packages/babel-plugin-transform-block-scoping/test/fixtures/general/issue-10339/exec.js index 3468fe3d5f77..a5d4e1b69153 100644 --- a/packages/babel-plugin-transform-block-scoping/test/fixtures/general/issue-10339/exec.js +++ b/packages/babel-plugin-transform-block-scoping/test/fixtures/general/issue-10339/exec.js @@ -34,5 +34,5 @@ return transformAsync(code, { // The body should be wrapped into closure expect(forOfPath.get("body").scope.bindings).toEqual({}); - expect(Object.keys(functionPath.scope.bindings)).toEqual(["foo", "bar", "qux", "quux"]); + expect(Object.keys(functionPath.scope.bindings)).toEqual(["foo", "qux", "quux"]); }); diff --git a/packages/babel-plugin-transform-block-scoping/test/fixtures/general/issue-10339/output.js b/packages/babel-plugin-transform-block-scoping/test/fixtures/general/issue-10339/output.js index cf098a1279ed..2b5c3ad548c4 100644 --- a/packages/babel-plugin-transform-block-scoping/test/fixtures/general/issue-10339/output.js +++ b/packages/babel-plugin-transform-block-scoping/test/fixtures/general/issue-10339/output.js @@ -1,5 +1,5 @@ var _excluded = ["foo"]; -var _loop = function (foo, bar) { +var _loop = function (foo) { () => foo; var [qux] = bar; try {} catch (e) { @@ -11,5 +11,5 @@ for (var _ref of {}) { foo } = _ref, bar = babelHelpers.objectWithoutPropertiesLoose(_ref, _excluded); - _loop(foo, bar); + _loop(foo); } diff --git a/packages/babel-plugin-transform-block-scoping/test/fixtures/general/issue-1051/output.js b/packages/babel-plugin-transform-block-scoping/test/fixtures/general/issue-1051/output.js index fb91eb6a1f5b..88b179fe5a75 100644 --- a/packages/babel-plugin-transform-block-scoping/test/fixtures/general/issue-1051/output.js +++ b/packages/babel-plugin-transform-block-scoping/test/fixtures/general/issue-1051/output.js @@ -1,17 +1,18 @@ foo.func1 = function () { if (cond1) { - for (;;) { + var _loop = function () { if (cond2) { - var _ret = function () { - function func2() {} - function func3() {} - func4(function () { - func2(); - }); - return "break"; - }(); - if (_ret === "break") break; + var func2 = function () {}; + var func3 = function () {}; + func4(function () { + func2(); + }); + return "break"; } + }; + for (;;) { + var _ret = _loop(); + if (_ret === "break") break; } } }; diff --git a/packages/babel-plugin-transform-block-scoping/test/fixtures/general/issue-4363/output.js b/packages/babel-plugin-transform-block-scoping/test/fixtures/general/issue-4363/output.js index 27b56c755aff..154257d21821 100644 --- a/packages/babel-plugin-transform-block-scoping/test/fixtures/general/issue-4363/output.js +++ b/packages/babel-plugin-transform-block-scoping/test/fixtures/general/issue-4363/output.js @@ -1,7 +1,7 @@ function WithoutCurlyBraces() { var _this = this; if (true) { - var _loop = function (k) { + var _loop = function () { function foo() { return this; } @@ -11,14 +11,14 @@ function WithoutCurlyBraces() { console.log(_this, k); // => undefined }; for (var k in kv) { - _loop(k); + _loop(); } } } function WithCurlyBraces() { var _this2 = this; if (true) { - var _loop2 = function (k) { + var _loop2 = function () { function foo() { return this; } @@ -28,7 +28,7 @@ function WithCurlyBraces() { console.log(_this2, k); // => 777 }; for (var k in kv) { - _loop2(k); + _loop2(); } } } diff --git a/packages/babel-plugin-transform-block-scoping/test/fixtures/general/issue-8128-for-of-after/output.js b/packages/babel-plugin-transform-block-scoping/test/fixtures/general/issue-8128-for-of-after/output.js index 7bac9d960dae..68232a272bd7 100644 --- a/packages/babel-plugin-transform-block-scoping/test/fixtures/general/issue-8128-for-of-after/output.js +++ b/packages/babel-plugin-transform-block-scoping/test/fixtures/general/issue-8128-for-of-after/output.js @@ -1,9 +1,8 @@ -var _loop = function (_result) { - _result = otherValue; +var _loop = function (result) { + result = otherValue; fn(() => { - _result; + result; }); - result = _result; }; var _iterator = babelHelpers.createForOfIteratorHelper(results), _step; diff --git a/packages/babel-plugin-transform-block-scoping/test/fixtures/general/issue-8128-for-of-loose-after/output.js b/packages/babel-plugin-transform-block-scoping/test/fixtures/general/issue-8128-for-of-loose-after/output.js index 9d70f34ace47..2ee87f99c1c4 100644 --- a/packages/babel-plugin-transform-block-scoping/test/fixtures/general/issue-8128-for-of-loose-after/output.js +++ b/packages/babel-plugin-transform-block-scoping/test/fixtures/general/issue-8128-for-of-loose-after/output.js @@ -1,9 +1,8 @@ -var _loop = function (_result) { - _result = otherValue; +var _loop = function (result) { + result = otherValue; fn(() => { - _result; + result; }); - result = _result; }; for (var _iterator = babelHelpers.createForOfIteratorHelperLoose(results), _step; !(_step = _iterator()).done;) { var result = _step.value; diff --git a/packages/babel-plugin-transform-block-scoping/test/fixtures/general/issue-973/output.js b/packages/babel-plugin-transform-block-scoping/test/fixtures/general/issue-973/output.js index ac1f86f82d26..dc5b6312db7f 100644 --- a/packages/babel-plugin-transform-block-scoping/test/fixtures/general/issue-973/output.js +++ b/packages/babel-plugin-transform-block-scoping/test/fixtures/general/issue-973/output.js @@ -1,8 +1,8 @@ var arr = []; for (var i = 0; i < 10; i++) { - var _loop = function (_i) { + var _loop = function (i) { arr.push(function () { - return _i; + return i; }); }; for (var _i = 0; _i < 10; _i++) { diff --git a/packages/babel-plugin-transform-block-scoping/test/fixtures/general/loops-and-no-loops/output.js b/packages/babel-plugin-transform-block-scoping/test/fixtures/general/loops-and-no-loops/output.js index 93ecbcf3debb..095ab039ed36 100644 --- a/packages/babel-plugin-transform-block-scoping/test/fixtures/general/loops-and-no-loops/output.js +++ b/packages/babel-plugin-transform-block-scoping/test/fixtures/general/loops-and-no-loops/output.js @@ -11,15 +11,16 @@ function foo() { function bar() { var x = 5; console.log(x); - for (var i = 0; i < 7; i++) { + var _loop = function () { { - (function () { - var x = i; - setTimeout(function () { - return x; - }, 0); - })(); + var x = i; + setTimeout(function () { + return x; + }, 0); } + }; + for (var i = 0; i < 7; i++) { + _loop(); } } function baz() { diff --git a/packages/babel-plugin-transform-block-scoping/test/fixtures/general/superswitch/output.js b/packages/babel-plugin-transform-block-scoping/test/fixtures/general/superswitch/output.js index a77c5e60fba0..6cd4d3beb30f 100644 --- a/packages/babel-plugin-transform-block-scoping/test/fixtures/general/superswitch/output.js +++ b/packages/babel-plugin-transform-block-scoping/test/fixtures/general/superswitch/output.js @@ -1,24 +1,24 @@ function foo() { - while (true) { + var _loop = function () { switch (2) { case 0: { - var _ret = function () { - if (true) { - return { - v: void 0 - }; - } - var stuff = new Map(); - var data = 0; - stuff.forEach(function () { - var d = data; - }); - return "break"; - }(); - if (_ret === "break") break; - if (typeof _ret === "object") return _ret.v; + if (true) { + return { + v: void 0 + }; + } + var stuff = new Map(); + var data = 0; + stuff.forEach(function () { + var d = data; + }); + break; } } + }; + while (true) { + var _ret = _loop(); + if (typeof _ret === "object") return _ret.v; } } diff --git a/packages/babel-plugin-transform-block-scoping/test/fixtures/general/switch-callbacks/output.js b/packages/babel-plugin-transform-block-scoping/test/fixtures/general/switch-callbacks/output.js index 8fb934fddc0d..fc0ec97c6104 100644 --- a/packages/babel-plugin-transform-block-scoping/test/fixtures/general/switch-callbacks/output.js +++ b/packages/babel-plugin-transform-block-scoping/test/fixtures/general/switch-callbacks/output.js @@ -1,16 +1,17 @@ function fn() { + var _loop = function () { + switch (true) { + default: + var foo = 4; + if (true) { + var bar = function () { + return foo; + }; + console.log(bar()); + } + } + }; while (true) { - (function () { - switch (true) { - default: - var foo = 4; - if (true) { - var bar = function () { - return foo; - }; - console.log(bar()); - } - } - })(); + _loop(); } } diff --git a/packages/babel-plugin-transform-block-scoping/test/fixtures/general/wrap-closure-shadow-variables/output.js b/packages/babel-plugin-transform-block-scoping/test/fixtures/general/wrap-closure-shadow-variables/output.js index 479f6fb6bed0..54c2002a1bc3 100644 --- a/packages/babel-plugin-transform-block-scoping/test/fixtures/general/wrap-closure-shadow-variables/output.js +++ b/packages/babel-plugin-transform-block-scoping/test/fixtures/general/wrap-closure-shadow-variables/output.js @@ -1,7 +1,7 @@ var a = 1; -var _loop = function (_a) { +var _loop = function (a) { items.forEach(function (item) { - return _a; + return a; }); }; for (var _a = 1; _a < 100; _a++) { diff --git a/packages/babel-plugin-transform-block-scoping/test/fixtures/tdz/const-readonly/output.js b/packages/babel-plugin-transform-block-scoping/test/fixtures/tdz/const-readonly/output.js index b5ab6b9ce9b8..8e2d0677006e 100644 --- a/packages/babel-plugin-transform-block-scoping/test/fixtures/tdz/const-readonly/output.js +++ b/packages/babel-plugin-transform-block-scoping/test/fixtures/tdz/const-readonly/output.js @@ -3,5 +3,5 @@ maybeCallLater(function () { babelHelpers.temporalRef(x, "x"); 2, babelHelpers.readOnlyError("x"); }); -x = 0; +var x = 0; 1, babelHelpers.readOnlyError("x"); diff --git a/packages/babel-plugin-transform-block-scoping/test/fixtures/tdz/exported-fn/output.mjs b/packages/babel-plugin-transform-block-scoping/test/fixtures/tdz/exported-fn/output.mjs index 91973e43b39c..ab96117494f7 100644 --- a/packages/babel-plugin-transform-block-scoping/test/fixtures/tdz/exported-fn/output.mjs +++ b/packages/babel-plugin-transform-block-scoping/test/fixtures/tdz/exported-fn/output.mjs @@ -4,7 +4,7 @@ import { foo } from "somewhere"; // foo might call "bar" foo(); babelHelpers.tdz("a"); -a = void 0; +var a = void 0; a; export function bar() { return babelHelpers.temporalRef(a, "a"); diff --git a/packages/babel-plugin-transform-block-scoping/test/fixtures/tdz/function-call-maybe-real-after/output.js b/packages/babel-plugin-transform-block-scoping/test/fixtures/tdz/function-call-maybe-real-after/output.js index 6a3b66e61ef3..b1aab47c351f 100644 --- a/packages/babel-plugin-transform-block-scoping/test/fixtures/tdz/function-call-maybe-real-after/output.js +++ b/packages/babel-plugin-transform-block-scoping/test/fixtures/tdz/function-call-maybe-real-after/output.js @@ -3,5 +3,5 @@ function f() { babelHelpers.temporalRef(x, "x"); } Math.random() === 2 && f(); -x = void 0; +var x = void 0; f(); diff --git a/packages/babel-plugin-transform-block-scoping/test/fixtures/tdz/function-call-maybe-value-assign/output.js b/packages/babel-plugin-transform-block-scoping/test/fixtures/tdz/function-call-maybe-value-assign/output.js index 11ac40452ab5..18d7caef760f 100644 --- a/packages/babel-plugin-transform-block-scoping/test/fixtures/tdz/function-call-maybe-value-assign/output.js +++ b/packages/babel-plugin-transform-block-scoping/test/fixtures/tdz/function-call-maybe-value-assign/output.js @@ -3,5 +3,5 @@ function f() { babelHelpers.temporalRef(x, "x"); } Math.random() === 2 && f(); -x = 3; +var x = 3; expect(x).toBe(3); diff --git a/packages/babel-plugin-transform-block-scoping/test/fixtures/tdz/function-call-maybe/output.js b/packages/babel-plugin-transform-block-scoping/test/fixtures/tdz/function-call-maybe/output.js index 91f0962b3797..086875906670 100644 --- a/packages/babel-plugin-transform-block-scoping/test/fixtures/tdz/function-call-maybe/output.js +++ b/packages/babel-plugin-transform-block-scoping/test/fixtures/tdz/function-call-maybe/output.js @@ -3,5 +3,4 @@ function f() { babelHelpers.temporalRef(x, "x"); } Math.random() && f(); -x = void 0; -void 0; +var x = void 0; diff --git a/packages/babel-plugin-transform-block-scoping/test/fixtures/tdz/function-call-nested-function/output.js b/packages/babel-plugin-transform-block-scoping/test/fixtures/tdz/function-call-nested-function/output.js index 60691c5a669a..a06382502536 100644 --- a/packages/babel-plugin-transform-block-scoping/test/fixtures/tdz/function-call-nested-function/output.js +++ b/packages/babel-plugin-transform-block-scoping/test/fixtures/tdz/function-call-nested-function/output.js @@ -5,5 +5,4 @@ function f() { }; } f(); -x = void 0; -void 0; +var x = void 0; diff --git a/packages/babel-plugin-transform-block-scoping/test/fixtures/tdz/function-call-recursive-reference/output.js b/packages/babel-plugin-transform-block-scoping/test/fixtures/tdz/function-call-recursive-reference/output.js index 9b46db08d8de..e7b9c478f45f 100644 --- a/packages/babel-plugin-transform-block-scoping/test/fixtures/tdz/function-call-recursive-reference/output.js +++ b/packages/babel-plugin-transform-block-scoping/test/fixtures/tdz/function-call-recursive-reference/output.js @@ -6,5 +6,5 @@ function f(i) { }; } var g = f(1); -x = void 0; +var x = void 0; g(); diff --git a/packages/babel-plugin-transform-block-scoping/test/fixtures/tdz/function-ref/output.js b/packages/babel-plugin-transform-block-scoping/test/fixtures/tdz/function-ref/output.js index 53af740eaa8a..8ee73c67a45e 100644 --- a/packages/babel-plugin-transform-block-scoping/test/fixtures/tdz/function-ref/output.js +++ b/packages/babel-plugin-transform-block-scoping/test/fixtures/tdz/function-ref/output.js @@ -3,5 +3,4 @@ function f() { babelHelpers.temporalRef(x, "x"); } maybeCall(f); -x = void 0; -void 0; +var x = void 0; diff --git a/packages/babel-plugin-transform-block-scoping/test/fixtures/tdz/update-expression/output.js b/packages/babel-plugin-transform-block-scoping/test/fixtures/tdz/update-expression/output.js index 8e99961fe95c..e9b7407330c0 100644 --- a/packages/babel-plugin-transform-block-scoping/test/fixtures/tdz/update-expression/output.js +++ b/packages/babel-plugin-transform-block-scoping/test/fixtures/tdz/update-expression/output.js @@ -11,5 +11,4 @@ babelHelpers.tdz("x"); babelHelpers.tdz("x"); babelHelpers.tdz("x").p++; ++babelHelpers.tdz("x").p; -x = void 0; -void 0; +var x = void 0;