From 835cfd2a15e9582c71d6baaf2f93bab9aee7b669 Mon Sep 17 00:00:00 2001 From: Sebastian McKenzie Date: Tue, 14 Oct 2014 09:31:26 +1100 Subject: [PATCH] add hasSpread helper to spread transformer --- lib/6to5/transformers/spread.js | 57 ++++++++++++++++----------------- 1 file changed, 28 insertions(+), 29 deletions(-) diff --git a/lib/6to5/transformers/spread.js b/lib/6to5/transformers/spread.js index 6dc2187112..0d9af43eb9 100644 --- a/lib/6to5/transformers/spread.js +++ b/lib/6to5/transformers/spread.js @@ -13,15 +13,15 @@ var getSpreadLiteral = function (spread, file) { return literal; }; +var hasSpread = function (nodes) { + return nodes.length && _.last(args).type === "SpreadElement"; +}; + exports.ArrayExpression = function (node, parent, file) { var elements = node.elements; - if (!elements.length) return; + if (!hasSpread(elements)) return; var spread = elements.pop(); - if (spread.type !== "SpreadElement") { - elements.push(spread); - return; - } var concat = util.template("array-concat", { ARGUMENT: getSpreadLiteral(spread, file) @@ -34,33 +34,32 @@ exports.ArrayExpression = function (node, parent, file) { exports.CallExpression = function (node, parent, file) { var args = node.arguments; + if (!hasSpread(args)) return; - if (args.length && _.last(args).type === "SpreadElement") { - var spread = args.pop(); + var spread = args.pop(); - var spreadLiteral = getSpreadLiteral(spread, file); - var contextLiteral = b.literal(null); + var spreadLiteral = getSpreadLiteral(spread, file); + var contextLiteral = b.literal(null); - node.arguments = []; + node.arguments = []; - if (args.length) { - var concat = util.template("array-concat"); - concat.arguments = [spreadLiteral]; - concat.callee.object.elements = args; - node.arguments.push(concat); - } else { - node.arguments.push(spreadLiteral); - } - - var callee = node.callee; - - if (callee.type === "MemberExpression") { - contextLiteral = callee.object; - callee.property = b.memberExpression(callee.property, b.identifier("apply"), false); - } else { - node.callee = b.memberExpression(node.callee, b.identifier("apply"), false); - } - - node.arguments.unshift(contextLiteral); + if (args.length) { + var concat = util.template("array-concat"); + concat.arguments = [spreadLiteral]; + concat.callee.object.elements = args; + node.arguments.push(concat); + } else { + node.arguments.push(spreadLiteral); } + + var callee = node.callee; + + if (callee.type === "MemberExpression") { + contextLiteral = callee.object; + callee.property = b.memberExpression(callee.property, b.identifier("apply"), false); + } else { + node.callee = b.memberExpression(node.callee, b.identifier("apply"), false); + } + + node.arguments.unshift(contextLiteral); };