Merge pull request #499 from leebyron/rest

Improve performance of rest parameter.
This commit is contained in:
Sebastian McKenzie 2015-01-15 19:28:32 +11:00
commit 1c6eeba2e9
5 changed files with 30 additions and 22 deletions

View File

@ -1,3 +1,3 @@
for (var KEY = START; KEY < ARGUMENTS.length; KEY++) { for (var LEN = ARGUMENTS.length, ARRAY = Array(ARRAY_LEN), KEY = START; KEY < LEN; KEY++) {
ARRAY[ARRAY_KEY] = ARGUMENTS[KEY]; ARRAY[ARRAY_KEY] = ARGUMENTS[KEY];
} }

View File

@ -14,23 +14,31 @@ exports.Function = function (node, parent, file) {
var start = t.literal(node.params.length); var start = t.literal(node.params.length);
var key = file.generateUidIdentifier("key"); var key = file.generateUidIdentifier("key");
var len = file.generateUidIdentifier("len");
var arrKey = key; var arrKey = key;
if (node.params.length) { if (node.params.length) {
arrKey = t.binaryExpression("-", arrKey, start); 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)
);
} }
node.body.body.unshift( node.body.body.unshift(
t.variableDeclaration("var", [
t.variableDeclarator(rest, t.arrayExpression([]))
]),
util.template("rest", { util.template("rest", {
ARGUMENTS: argsId, ARGUMENTS: argsId,
ARRAY_KEY: arrKey, ARRAY_KEY: arrKey,
ARRAY_LEN: arrLen,
START: start, START: start,
ARRAY: rest, ARRAY: rest,
KEY: key KEY: key,
LEN: len,
}) })
); );
}; };

View File

@ -1,9 +1,9 @@
"use strict"; "use strict";
var concat = function () { var concat = function () {
var arrs = []; for (var _len = arguments.length,
arrs = Array(_len),
for (var _key = 0; _key < arguments.length; _key++) { _key = 0; _key < _len; _key++) {
arrs[_key] = arguments[_key]; arrs[_key] = arguments[_key];
} }
}; };

View File

@ -1,17 +1,17 @@
"use strict"; "use strict";
var t = function (f) { var t = function (f) {
var items = []; for (var _len = arguments.length,
items = Array(_len > 1 ? _len - 1 : 0),
for (var _key = 1; _key < arguments.length; _key++) { _key = 1; _key < _len; _key++) {
items[_key - 1] = arguments[_key]; items[_key - 1] = arguments[_key];
} }
}; };
function t(f) { function t(f) {
var items = []; for (var _len2 = arguments.length,
items = Array(_len2 > 1 ? _len2 - 1 : 0),
for (var _key2 = 1; _key2 < arguments.length; _key2++) { _key2 = 1; _key2 < _len2; _key2++) {
items[_key2 - 1] = arguments[_key2]; items[_key2 - 1] = arguments[_key2];
} }
} }

View File

@ -1,17 +1,17 @@
"use strict"; "use strict";
var t = function () { var t = function () {
var items = []; for (var _len = arguments.length,
items = Array(_len),
for (var _key = 0; _key < arguments.length; _key++) { _key = 0; _key < _len; _key++) {
items[_key] = arguments[_key]; items[_key] = arguments[_key];
} }
}; };
function t() { function t() {
var items = []; for (var _len2 = arguments.length,
items = Array(_len2),
for (var _key2 = 0; _key2 < arguments.length; _key2++) { _key2 = 0; _key2 < _len2; _key2++) {
items[_key2] = arguments[_key2]; items[_key2] = arguments[_key2];
} }
} }