Requeue generators for re-traversal so we pick up regeneratorRuntime - fixes T6676

This commit is contained in:
Logan Smyth 2015-12-13 16:15:02 -08:00
parent 9c88b8797e
commit ee6f470d77
3 changed files with 18 additions and 11 deletions

View File

@ -129,6 +129,11 @@ exports.visitor = {
if (wasGeneratorFunction && t.isExpression(node)) {
path.replaceWith(t.callExpression(util.runtimeProperty("mark"), [node]));
}
// Generators are processed in 'exit' handlers so that regenerator only has to run on
// an ES5 AST, but that means traversal will not pick up newly inserted references
// to things like 'regeneratorRuntime'. To avoid this, we explicitly re-queue.
path.requeue();
}
}
};

View File

@ -10,18 +10,20 @@ var _marked = [_callee].map(regeneratorRuntime.mark);
function _callee() {
var x;
return regeneratorRuntime.wrap(function _callee$(_context) {
while (1) switch (_context.prev = _context.next) {
case 0:
_context.next = 2;
return 5;
while (1) {
switch (_context.prev = _context.next) {
case 0:
_context.next = 2;
return 5;
case 2:
x = _context.sent;
return _context.abrupt("return", 5);
case 2:
x = _context.sent;
return _context.abrupt("return", 5);
case 4:
case "end":
return _context.stop();
case 4:
case "end":
return _context.stop();
}
}
}, _marked[0], this);
}

View File

@ -7,7 +7,7 @@ import foo, * as bar from "someModule";
export const myWord = _Symbol("abc");
export function giveWord() {
return regeneratorRuntime.wrap(function giveWord$(_context) {
return _regeneratorRuntime.wrap(function giveWord$(_context) {
while (1) switch (_context.prev = _context.next) {
case 0:
_context.next = 2;