diff --git a/packages/babel-plugin-transform-regenerator/src/visit.js b/packages/babel-plugin-transform-regenerator/src/visit.js index 9750fdd837..15e522ace1 100644 --- a/packages/babel-plugin-transform-regenerator/src/visit.js +++ b/packages/babel-plugin-transform-regenerator/src/visit.js @@ -141,6 +141,12 @@ function getOuterFnExpr(funPath) { let node = funPath.node; t.assertFunction(node); + if (!node.id){ + // Default-exported function declarations, and function expressions may not + // have a name to reference, so we explicitly add one. + node.id = funPath.scope.parent.generateUidIdentifier("callee"); + } + if (node.generator && // Non-generator functions don't need to be marked. t.isFunctionDeclaration(node)) { let pp = funPath.findParent(function (path) { @@ -166,9 +172,7 @@ function getOuterFnExpr(funPath) { ); } - return node.id || ( - node.id = funPath.scope.parent.generateUidIdentifier("callee") - ); + return node.id; } function getRuntimeMarkDecl(blockPath) { diff --git a/packages/babel-plugin-transform-regenerator/test/fixtures/regression/6733/actual.js b/packages/babel-plugin-transform-regenerator/test/fixtures/regression/6733/actual.js new file mode 100644 index 0000000000..d1201221a7 --- /dev/null +++ b/packages/babel-plugin-transform-regenerator/test/fixtures/regression/6733/actual.js @@ -0,0 +1,4 @@ +export default function * () { + var x = yield 5; + return 5; +} 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 new file mode 100644 index 0000000000..34342c568b --- /dev/null +++ b/packages/babel-plugin-transform-regenerator/test/fixtures/regression/6733/expected.js @@ -0,0 +1,27 @@ +"use strict"; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.default = _callee; + +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; + + case 2: + x = _context.sent; + return _context.abrupt("return", 5); + + case 4: + case "end": + return _context.stop(); + } + }, _marked[0], this); +} diff --git a/packages/babel-plugin-transform-regenerator/test/fixtures/regression/options.json b/packages/babel-plugin-transform-regenerator/test/fixtures/regression/options.json new file mode 100644 index 0000000000..3c078e9f99 --- /dev/null +++ b/packages/babel-plugin-transform-regenerator/test/fixtures/regression/options.json @@ -0,0 +1,5 @@ +{ + "presets": [ + "es2015" + ] +}