From 60dae7a88d80cb0daf5b998a4e69994a6db91ed1 Mon Sep 17 00:00:00 2001 From: Sebastian McKenzie Date: Thu, 15 Jan 2015 20:13:24 +1100 Subject: [PATCH] add build comprehension helper --- .../helpers/build-comprehension.js | 23 ++++++++++++++ .../transformers/es7-array-comprehension.js | 31 +++---------------- .../es7-generator-comprehension.js | 4 +-- 3 files changed, 30 insertions(+), 28 deletions(-) create mode 100644 lib/6to5/transformation/helpers/build-comprehension.js diff --git a/lib/6to5/transformation/helpers/build-comprehension.js b/lib/6to5/transformation/helpers/build-comprehension.js new file mode 100644 index 0000000000..9ba979caef --- /dev/null +++ b/lib/6to5/transformation/helpers/build-comprehension.js @@ -0,0 +1,23 @@ +var t = require("../../types"); + +module.exports = function build(node, buildBody) { + var self = node.blocks.shift(); + if (!self) return; + + var child = build(node, buildBody); + if (!child) { + // last item + child = buildBody(); + + // add a filter as this is our final stop + if (node.filter) { + child = t.ifStatement(node.filter, t.blockStatement([child])); + } + } + + return t.forOfStatement( + t.variableDeclaration("let", [t.variableDeclarator(self.left)]), + self.right, + t.blockStatement([child]) + ); +}; diff --git a/lib/6to5/transformation/transformers/es7-array-comprehension.js b/lib/6to5/transformation/transformers/es7-array-comprehension.js index a988678d93..0a18a94e8a 100644 --- a/lib/6to5/transformation/transformers/es7-array-comprehension.js +++ b/lib/6to5/transformation/transformers/es7-array-comprehension.js @@ -1,6 +1,7 @@ -var traverse = require("../../traverse"); -var util = require("../../util"); -var t = require("../../types"); +var buildComprehension = require("../helpers/build-comprehension"); +var traverse = require("../../traverse"); +var util = require("../../util"); +var t = require("../../types"); exports.experimental = true; @@ -22,7 +23,7 @@ var build = function (node, parent, file, scope) { var returnStatement = body.pop(); - body.push(exports._build(node, function () { + body.push(buildComprehension(node, function () { return util.template("array-push", { STATEMENT: node.body, KEY: uid @@ -33,28 +34,6 @@ var build = function (node, parent, file, scope) { return container; }; -exports._build = function (node, buildBody) { - var self = node.blocks.shift(); - if (!self) return; - - var child = exports._build(node, buildBody); - if (!child) { - // last item - child = buildBody(); - - // add a filter as this is our final stop - if (node.filter) { - child = t.ifStatement(node.filter, t.blockStatement([child])); - } - } - - return t.forOfStatement( - t.variableDeclaration("let", [t.variableDeclarator(self.left)]), - self.right, - t.blockStatement([child]) - ); -}; - exports.ComprehensionExpression = function (node, parent, file, scope) { if (node.generator) return; diff --git a/lib/6to5/transformation/transformers/es7-generator-comprehension.js b/lib/6to5/transformation/transformers/es7-generator-comprehension.js index 9d950fecd3..84d75634a1 100644 --- a/lib/6to5/transformation/transformers/es7-generator-comprehension.js +++ b/lib/6to5/transformation/transformers/es7-generator-comprehension.js @@ -1,4 +1,4 @@ -var arrayComprehension = require("./es7-array-comprehension"); +var buildComprehension = require("../helpers/build-comprehension"); var t = require("../../types"); exports.experimental = true; @@ -10,7 +10,7 @@ exports.ComprehensionExpression = function (node) { var container = t.functionExpression(null, [], t.blockStatement(body), true); container._aliasFunction = true; - body.push(arrayComprehension._build(node, function () { + body.push(buildComprehension(node, function () { return t.expressionStatement(t.yieldExpression(node.body)); }));