From 55054e45da08aa53dcaf67e8537e3a38a22caaf4 Mon Sep 17 00:00:00 2001 From: Sebastian McKenzie Date: Thu, 15 Jan 2015 19:34:33 +1100 Subject: [PATCH] Revert "Improve performance of rest parameter." This reverts commit e5463cc2a97cafbf9d35656038f19b45dd75ffce. --- lib/6to5/transformation/templates/rest.js | 2 +- .../transformers/es6-rest-parameters.js | 20 ++++++------------- .../arrow-functions/expected.js | 6 +++--- .../es6-rest-parameters/multiple/expected.js | 12 +++++------ .../es6-rest-parameters/single/expected.js | 12 +++++------ 5 files changed, 22 insertions(+), 30 deletions(-) diff --git a/lib/6to5/transformation/templates/rest.js b/lib/6to5/transformation/templates/rest.js index c15ce8815d..f396f01117 100644 --- a/lib/6to5/transformation/templates/rest.js +++ b/lib/6to5/transformation/templates/rest.js @@ -1,3 +1,3 @@ -for (var LEN = ARGUMENTS.length, ARRAY = Array(ARRAY_LEN), KEY = START; KEY < LEN; KEY++) { +for (var KEY = START; KEY < ARGUMENTS.length; 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 d1de130e31..266b6f62f7 100644 --- a/lib/6to5/transformation/transformers/es6-rest-parameters.js +++ b/lib/6to5/transformation/transformers/es6-rest-parameters.js @@ -14,31 +14,23 @@ exports.Function = function (node, parent, file) { var start = t.literal(node.params.length); var key = file.generateUidIdentifier("key"); - var len = file.generateUidIdentifier("len"); var arrKey = key; if (node.params.length) { - arrKey = t.binaryExpression("-", key, start); - } - - var arrLen = len; - if (node.params.length) { - arrLen = t.conditionalExpression( - t.binaryExpression(">", len, start), - t.binaryExpression("-", len, start), - t.literal(0) - ); + arrKey = t.binaryExpression("-", arrKey, start); } node.body.body.unshift( + t.variableDeclaration("var", [ + t.variableDeclarator(rest, t.arrayExpression([])) + ]), + util.template("rest", { ARGUMENTS: argsId, ARRAY_KEY: arrKey, - ARRAY_LEN: arrLen, START: start, ARRAY: rest, - KEY: key, - LEN: len, + KEY: key }) ); }; diff --git a/test/fixtures/transformation/es6-rest-parameters/arrow-functions/expected.js b/test/fixtures/transformation/es6-rest-parameters/arrow-functions/expected.js index fa875fd363..cb971ebc77 100644 --- a/test/fixtures/transformation/es6-rest-parameters/arrow-functions/expected.js +++ b/test/fixtures/transformation/es6-rest-parameters/arrow-functions/expected.js @@ -1,9 +1,9 @@ "use strict"; var concat = function () { - for (var _len = arguments.length, - arrs = Array(_len), - _key = 0; _key < _len; _key++) { + var arrs = []; + + for (var _key = 0; _key < arguments.length; _key++) { arrs[_key] = arguments[_key]; } }; diff --git a/test/fixtures/transformation/es6-rest-parameters/multiple/expected.js b/test/fixtures/transformation/es6-rest-parameters/multiple/expected.js index dc6e082ce6..56ff1c407f 100644 --- a/test/fixtures/transformation/es6-rest-parameters/multiple/expected.js +++ b/test/fixtures/transformation/es6-rest-parameters/multiple/expected.js @@ -1,17 +1,17 @@ "use strict"; var t = function (f) { - for (var _len = arguments.length, - items = Array(_len > 1 ? _len - 1 : 0), - _key = 1; _key < _len; _key++) { + var items = []; + + for (var _key = 1; _key < arguments.length; _key++) { items[_key - 1] = arguments[_key]; } }; function t(f) { - for (var _len2 = arguments.length, - items = Array(_len2 > 1 ? _len2 - 1 : 0), - _key2 = 1; _key2 < _len2; _key2++) { + var items = []; + + for (var _key2 = 1; _key2 < arguments.length; _key2++) { items[_key2 - 1] = arguments[_key2]; } } diff --git a/test/fixtures/transformation/es6-rest-parameters/single/expected.js b/test/fixtures/transformation/es6-rest-parameters/single/expected.js index d6f9e1a5fe..316b3ec9a4 100644 --- a/test/fixtures/transformation/es6-rest-parameters/single/expected.js +++ b/test/fixtures/transformation/es6-rest-parameters/single/expected.js @@ -1,17 +1,17 @@ "use strict"; var t = function () { - for (var _len = arguments.length, - items = Array(_len), - _key = 0; _key < _len; _key++) { + var items = []; + + for (var _key = 0; _key < arguments.length; _key++) { items[_key] = arguments[_key]; } }; function t() { - for (var _len2 = arguments.length, - items = Array(_len2), - _key2 = 0; _key2 < _len2; _key2++) { + var items = []; + + for (var _key2 = 0; _key2 < arguments.length; _key2++) { items[_key2] = arguments[_key2]; } }