From 1696f77980da64e4bae5c1969a61837cd5a2eb43 Mon Sep 17 00:00:00 2001 From: Sebastian McKenzie Date: Tue, 6 Jan 2015 20:15:10 +1100 Subject: [PATCH] fix rest parameter keys when on functions with params --- CHANGELOG.md | 5 +++++ lib/6to5/transformation/templates/rest.js | 2 +- .../transformers/es6-rest-parameters.js | 13 +++++++++++-- .../es6-rest-parameters/multiple/expected.js | 4 ++-- 4 files changed, 19 insertions(+), 5 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 1afbaabd28..8a29c9ec37 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -11,6 +11,11 @@ _Note: Gaps between patch versions are faulty/broken releases._ +## 2.6.1 + + * **Bug Fix** + * Fix rest parameter keys when on functions with params. + ## 2.6.1 * **Bug Fix** diff --git a/lib/6to5/transformation/templates/rest.js b/lib/6to5/transformation/templates/rest.js index ca3dfabbef..f396f01117 100644 --- a/lib/6to5/transformation/templates/rest.js +++ b/lib/6to5/transformation/templates/rest.js @@ -1,3 +1,3 @@ for (var KEY = START; KEY < ARGUMENTS.length; KEY++) { - ARRAY[KEY] = ARGUMENTS[KEY]; + ARRAY[ARRAY_KEY] = ARGUMENTS[KEY]; } diff --git a/lib/6to5/transformation/transformers/es6-rest-parameters.js b/lib/6to5/transformation/transformers/es6-rest-parameters.js index a3d8e9a801..266b6f62f7 100644 --- a/lib/6to5/transformation/transformers/es6-rest-parameters.js +++ b/lib/6to5/transformation/transformers/es6-rest-parameters.js @@ -12,6 +12,14 @@ exports.Function = function (node, parent, file) { var argsId = t.identifier("arguments"); argsId._ignoreAliasFunctions = true; + var start = t.literal(node.params.length); + var key = file.generateUidIdentifier("key"); + + var arrKey = key; + if (node.params.length) { + arrKey = t.binaryExpression("-", arrKey, start); + } + node.body.body.unshift( t.variableDeclaration("var", [ t.variableDeclarator(rest, t.arrayExpression([])) @@ -19,9 +27,10 @@ exports.Function = function (node, parent, file) { util.template("rest", { ARGUMENTS: argsId, - START: t.literal(node.params.length), + ARRAY_KEY: arrKey, + START: start, ARRAY: rest, - KEY: file.generateUidIdentifier("key") + KEY: key }) ); }; diff --git a/test/fixtures/transformation/es6-rest-parameters/multiple/expected.js b/test/fixtures/transformation/es6-rest-parameters/multiple/expected.js index 3aea58caf3..56ff1c407f 100644 --- a/test/fixtures/transformation/es6-rest-parameters/multiple/expected.js +++ b/test/fixtures/transformation/es6-rest-parameters/multiple/expected.js @@ -4,7 +4,7 @@ var t = function (f) { var items = []; for (var _key = 1; _key < arguments.length; _key++) { - items[_key] = arguments[_key]; + items[_key - 1] = arguments[_key]; } }; @@ -12,6 +12,6 @@ function t(f) { var items = []; for (var _key2 = 1; _key2 < arguments.length; _key2++) { - items[_key2] = arguments[_key2]; + items[_key2 - 1] = arguments[_key2]; } }