mirror of
https://github.com/swc-project/swc.git
synced 2024-10-04 20:28:43 +03:00
fix(es/transforms/compat): Apply block_scoping
before regenerator
(#2740)
This commit is contained in:
parent
898ed7015c
commit
bb646cc31c
5
crates/swc/tests/fixture/issue-2624/1/input/.swcrc
Normal file
5
crates/swc/tests/fixture/issue-2624/1/input/.swcrc
Normal file
@ -0,0 +1,5 @@
|
||||
{
|
||||
"jsc": {
|
||||
"target": "es5"
|
||||
}
|
||||
}
|
5
crates/swc/tests/fixture/issue-2624/1/input/index.js
Normal file
5
crates/swc/tests/fixture/issue-2624/1/input/index.js
Normal file
@ -0,0 +1,5 @@
|
||||
function* f() {
|
||||
for (const i of [1, 2, 3]) {
|
||||
setTimeout(() => console.log(i), 100);
|
||||
}
|
||||
}
|
63
crates/swc/tests/fixture/issue-2624/1/output/index.js
Normal file
63
crates/swc/tests/fixture/issue-2624/1/output/index.js
Normal file
@ -0,0 +1,63 @@
|
||||
import regeneratorRuntime from "regenerator-runtime";
|
||||
var _marked = regeneratorRuntime.mark(f);
|
||||
function f() {
|
||||
var _iteratorNormalCompletion, _didIteratorError, _iteratorError, _loop, _iterator, _step;
|
||||
return regeneratorRuntime.wrap(function f$(_ctx) {
|
||||
while(1)switch(_ctx.prev = _ctx.next){
|
||||
case 0:
|
||||
_iteratorNormalCompletion = true, _didIteratorError = false, _iteratorError = undefined;
|
||||
_ctx.prev = 1;
|
||||
_loop = function(_iterator, _step) {
|
||||
var i = _step.value;
|
||||
setTimeout(function() {
|
||||
return console.log(i);
|
||||
}, 100);
|
||||
};
|
||||
for(_iterator = [
|
||||
1,
|
||||
2,
|
||||
3
|
||||
][Symbol.iterator](); !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true)_loop(_iterator, _step);
|
||||
_ctx.next = 10;
|
||||
break;
|
||||
case 6:
|
||||
_ctx.prev = 6;
|
||||
_ctx.t0 = _ctx["catch"](1);
|
||||
_didIteratorError = true;
|
||||
_iteratorError = _ctx.t0;
|
||||
case 10:
|
||||
_ctx.prev = 10;
|
||||
_ctx.prev = 11;
|
||||
if (!_iteratorNormalCompletion && _iterator.return != null) {
|
||||
_iterator.return();
|
||||
}
|
||||
case 13:
|
||||
_ctx.prev = 13;
|
||||
if (!_didIteratorError) {
|
||||
_ctx.next = 16;
|
||||
break;
|
||||
}
|
||||
throw _iteratorError;
|
||||
case 16:
|
||||
return _ctx.finish(13);
|
||||
case 17:
|
||||
return _ctx.finish(10);
|
||||
case 18:
|
||||
case "end":
|
||||
return _ctx.stop();
|
||||
}
|
||||
}, _marked, null, [
|
||||
[
|
||||
1,
|
||||
6,
|
||||
10,
|
||||
18
|
||||
],
|
||||
[
|
||||
11,
|
||||
,
|
||||
13,
|
||||
17
|
||||
]
|
||||
]);
|
||||
}
|
5
crates/swc/tests/fixture/issue-2624/2/input/.swcrc
Normal file
5
crates/swc/tests/fixture/issue-2624/2/input/.swcrc
Normal file
@ -0,0 +1,5 @@
|
||||
{
|
||||
"jsc": {
|
||||
"target": "es5"
|
||||
}
|
||||
}
|
5
crates/swc/tests/fixture/issue-2624/2/input/index.js
Normal file
5
crates/swc/tests/fixture/issue-2624/2/input/index.js
Normal file
@ -0,0 +1,5 @@
|
||||
async function f() {
|
||||
for (const i of [1, 2, 3]) {
|
||||
setTimeout(() => console.log(i), 100);
|
||||
}
|
||||
}
|
97
crates/swc/tests/fixture/issue-2624/2/output/index.js
Normal file
97
crates/swc/tests/fixture/issue-2624/2/output/index.js
Normal file
@ -0,0 +1,97 @@
|
||||
import regeneratorRuntime from "regenerator-runtime";
|
||||
function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) {
|
||||
try {
|
||||
var info = gen[key](arg);
|
||||
var value = info.value;
|
||||
} catch (error) {
|
||||
reject(error);
|
||||
return;
|
||||
}
|
||||
if (info.done) {
|
||||
resolve(value);
|
||||
} else {
|
||||
Promise.resolve(value).then(_next, _throw);
|
||||
}
|
||||
}
|
||||
function _asyncToGenerator(fn) {
|
||||
return function() {
|
||||
var self = this, args = arguments;
|
||||
return new Promise(function(resolve, reject) {
|
||||
var gen = fn.apply(self, args);
|
||||
function _next(value) {
|
||||
asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value);
|
||||
}
|
||||
function _throw(err) {
|
||||
asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err);
|
||||
}
|
||||
_next(undefined);
|
||||
});
|
||||
};
|
||||
}
|
||||
function f() {
|
||||
return _f.apply(this, arguments);
|
||||
}
|
||||
function _f() {
|
||||
_f = _asyncToGenerator(regeneratorRuntime.mark(function _callee() {
|
||||
var _iteratorNormalCompletion, _didIteratorError, _iteratorError, _loop, _iterator, _step;
|
||||
return regeneratorRuntime.wrap(function _callee$(_ctx) {
|
||||
while(1)switch(_ctx.prev = _ctx.next){
|
||||
case 0:
|
||||
_iteratorNormalCompletion = true, _didIteratorError = false, _iteratorError = undefined;
|
||||
_ctx.prev = 1;
|
||||
_loop = function(_iterator, _step) {
|
||||
var i = _step.value;
|
||||
setTimeout(function() {
|
||||
return console.log(i);
|
||||
}, 100);
|
||||
};
|
||||
for(_iterator = [
|
||||
1,
|
||||
2,
|
||||
3
|
||||
][Symbol.iterator](); !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true)_loop(_iterator, _step);
|
||||
_ctx.next = 10;
|
||||
break;
|
||||
case 6:
|
||||
_ctx.prev = 6;
|
||||
_ctx.t0 = _ctx["catch"](1);
|
||||
_didIteratorError = true;
|
||||
_iteratorError = _ctx.t0;
|
||||
case 10:
|
||||
_ctx.prev = 10;
|
||||
_ctx.prev = 11;
|
||||
if (!_iteratorNormalCompletion && _iterator.return != null) {
|
||||
_iterator.return();
|
||||
}
|
||||
case 13:
|
||||
_ctx.prev = 13;
|
||||
if (!_didIteratorError) {
|
||||
_ctx.next = 16;
|
||||
break;
|
||||
}
|
||||
throw _iteratorError;
|
||||
case 16:
|
||||
return _ctx.finish(13);
|
||||
case 17:
|
||||
return _ctx.finish(10);
|
||||
case 18:
|
||||
case "end":
|
||||
return _ctx.stop();
|
||||
}
|
||||
}, _callee, null, [
|
||||
[
|
||||
1,
|
||||
6,
|
||||
10,
|
||||
18
|
||||
],
|
||||
[
|
||||
11,
|
||||
,
|
||||
13,
|
||||
17
|
||||
]
|
||||
]);
|
||||
}));
|
||||
return _f.apply(this, arguments);
|
||||
}
|
@ -59,8 +59,8 @@ where
|
||||
parameters(),
|
||||
computed_properties(),
|
||||
destructuring(c.destructuring),
|
||||
regenerator(c.regenerator, global_mark),
|
||||
block_scoping(),
|
||||
regenerator(c.regenerator, global_mark),
|
||||
)
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user