fix(es/transforms/compat): Apply block_scoping before regenerator (#2740)

This commit is contained in:
Hiroshi Ogawa 2021-11-14 06:14:17 +09:00 committed by GitHub
parent 898ed7015c
commit bb646cc31c
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
7 changed files with 181 additions and 1 deletions

View File

@ -0,0 +1,5 @@
{
"jsc": {
"target": "es5"
}
}

View File

@ -0,0 +1,5 @@
function* f() {
for (const i of [1, 2, 3]) {
setTimeout(() => console.log(i), 100);
}
}

View 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
]
]);
}

View File

@ -0,0 +1,5 @@
{
"jsc": {
"target": "es5"
}
}

View File

@ -0,0 +1,5 @@
async function f() {
for (const i of [1, 2, 3]) {
setTimeout(() => console.log(i), 100);
}
}

View 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);
}

View File

@ -59,8 +59,8 @@ where
parameters(),
computed_properties(),
destructuring(c.destructuring),
regenerator(c.regenerator, global_mark),
block_scoping(),
regenerator(c.regenerator, global_mark),
)
}