From e677c72d583d553c46f7ec1aeb52bbb1234c1d71 Mon Sep 17 00:00:00 2001 From: Ondrej Kraus Date: Wed, 25 Feb 2015 04:30:17 +0100 Subject: [PATCH] add patterns support --- .../transformers/es6/parameters.rest.js | 27 ++++++++----------- 1 file changed, 11 insertions(+), 16 deletions(-) diff --git a/src/babel/transformation/transformers/es6/parameters.rest.js b/src/babel/transformation/transformers/es6/parameters.rest.js index 09e8fdd960..7559619db5 100644 --- a/src/babel/transformation/transformers/es6/parameters.rest.js +++ b/src/babel/transformation/transformers/es6/parameters.rest.js @@ -64,6 +64,17 @@ exports.Function = function (node, parent, scope) { // otherwise `arguments` will be remapped in arrow functions argsId._ignoreAliasFunctions = true; + // support patterns + if (t.isPattern(rest)) { + var pattern = rest; + rest = scope.generateUidIdentifier("ref"); + var declar = t.variableDeclaration("var", pattern.elements.map(function (elem, index) { + var accessExpr = t.memberExpression(rest, t.literal(index)); + return t.variableDeclarator(elem, accessExpr); + })); + node.body.body.unshift(declar); + } + // check if rest is used only in member expressions var restOuterDeclar = scope.getBindingIdentifier(rest.name); var state = { @@ -107,22 +118,6 @@ exports.Function = function (node, parent, scope) { ); } - // support patterns - if (t.isPattern(rest)) { - var pattern = rest; - rest = scope.generateUidIdentifier("ref"); - - // let the destructuring transformer handle this - var restDeclar = t.variableDeclaration("var", [ - t.variableDeclarator(pattern, rest) - ]); - - // retain evaluation position - restDeclar._blockHoist = node.params.length + 1; - - node.body.body.unshift(restDeclar); - } - scope.assignTypeGeneric(rest.name, "Array"); var loop = util.template("rest", {