From ee6f470d77643a436779c059e9c550bae9843d63 Mon Sep 17 00:00:00 2001 From: Logan Smyth Date: Sun, 13 Dec 2015 16:15:02 -0800 Subject: [PATCH] Requeue generators for re-traversal so we pick up regeneratorRuntime - fixes T6676 --- .../src/visit.js | 5 +++++ .../test/fixtures/regression/6733/expected.js | 22 ++++++++++--------- .../test/fixtures/runtime/full/expected.js | 2 +- 3 files changed, 18 insertions(+), 11 deletions(-) diff --git a/packages/babel-plugin-transform-regenerator/src/visit.js b/packages/babel-plugin-transform-regenerator/src/visit.js index 15e522ace1..8e52d45f03 100644 --- a/packages/babel-plugin-transform-regenerator/src/visit.js +++ b/packages/babel-plugin-transform-regenerator/src/visit.js @@ -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(); } } }; diff --git a/packages/babel-plugin-transform-regenerator/test/fixtures/regression/6733/expected.js b/packages/babel-plugin-transform-regenerator/test/fixtures/regression/6733/expected.js index 34342c568b..087e07f510 100644 --- a/packages/babel-plugin-transform-regenerator/test/fixtures/regression/6733/expected.js +++ b/packages/babel-plugin-transform-regenerator/test/fixtures/regression/6733/expected.js @@ -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); } diff --git a/packages/babel-plugin-transform-runtime/test/fixtures/runtime/full/expected.js b/packages/babel-plugin-transform-runtime/test/fixtures/runtime/full/expected.js index f6aaa4e30b..cc3ab01b1c 100644 --- a/packages/babel-plugin-transform-runtime/test/fixtures/runtime/full/expected.js +++ b/packages/babel-plugin-transform-runtime/test/fixtures/runtime/full/expected.js @@ -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;