UNPKG

babel-core

Version:

Turn ES6 code into readable vanilla ES5 with source maps

69 lines (49 loc) 1.84 kB
"use strict"; var _interopRequireWildcard = function (obj) { return obj && obj.__esModule ? obj : { "default": obj }; }; var _interopRequire = function (obj) { return obj && obj.__esModule ? obj["default"] : obj; }; exports.ComprehensionExpression = ComprehensionExpression; exports.__esModule = true; var buildComprehension = _interopRequire(require("../../helpers/build-comprehension")); var traverse = _interopRequire(require("../../../traversal")); var util = _interopRequireWildcard(require("../../../util")); var t = _interopRequireWildcard(require("../../../types")); var metadata = { stage: 0 }; exports.metadata = metadata; function ComprehensionExpression(node, parent, scope, file) { var callback = array; if (node.generator) callback = generator; return callback(node, parent, scope, file); } function generator(node) { var body = []; var container = t.functionExpression(null, [], t.blockStatement(body), true); container.shadow = true; body.push(buildComprehension(node, function () { return t.expressionStatement(t.yieldExpression(node.body)); })); return t.callExpression(container, []); } function array(node, parent, scope, file) { var uid = scope.generateUidBasedOnNode(parent); var container = util.template("array-comprehension-container", { KEY: uid }); container.callee.shadow = true; var block = container.callee.body; var body = block.body; if (traverse.hasType(node, scope, "YieldExpression", t.FUNCTION_TYPES)) { container.callee.generator = true; container = t.yieldExpression(container, true); } var returnStatement = body.pop(); body.push(buildComprehension(node, function () { return util.template("array-push", { STATEMENT: node.body, KEY: uid }, true); })); body.push(returnStatement); return container; }