From 50b2054fbfa20a45f29ed322d3b58f2d04118f8f Mon Sep 17 00:00:00 2001 From: David Majda Date: Thu, 8 May 2014 14:38:24 +0200 Subject: [PATCH] Utility functions cleanup: Cleanup lib/utils/arrays.js --- lib/compiler/passes/generate-bytecode.js | 2 +- lib/utils/arrays.js | 87 +++++++++++++----------- 2 files changed, 50 insertions(+), 39 deletions(-) diff --git a/lib/compiler/passes/generate-bytecode.js b/lib/compiler/passes/generate-bytecode.js index e848179..633baf1 100644 --- a/lib/compiler/passes/generate-bytecode.js +++ b/lib/compiler/passes/generate-bytecode.js @@ -177,7 +177,7 @@ function generateBytecode(ast) { var consts = []; function addConst(value) { - var index = arrays.indexOf(consts, function(c) { return c === value; }); + var index = arrays.indexOf(consts, value); return index === -1 ? consts.push(value) - 1 : index; } diff --git a/lib/utils/arrays.js b/lib/utils/arrays.js index 7d1337d..45b320a 100644 --- a/lib/utils/arrays.js +++ b/lib/utils/arrays.js @@ -1,65 +1,76 @@ /* Array utilities. */ var arrays = { - /* Like Python's |range|, but without |step|. */ range: function(start, stop) { - if (stop === undefined) { - stop = start; - start = 0; - } + var length = stop - start, + result = new Array(length), + i; - var result = new Array(Math.max(0, stop - start)); - for (var i = 0, j = start; j < stop; i++, j++) { + for (i = 0, j = start; i < length; i++, j++) { result[i] = j; } + return result; }, - find: function(array, callback) { - var length = array.length; - for (var i = 0; i < length; i++) { - if (callback(array[i])) { - return array[i]; + find: function(array, valueOrPredicate) { + var length = array.length, i; + + if (typeof valueOrPredicate === "function") { + for (i = 0; i < length; i++) { + if (valueOrPredicate(array[i])) { + return array[i]; + } + } + } else { + for (i = 0; i < length; i++) { + if (array[i] === valueOrPredicate) { + return array[i]; + } } } }, - indexOf: function(array, callback) { - var length = array.length; - for (var i = 0; i < length; i++) { - if (callback(array[i])) { - return i; + indexOf: function(array, valueOrPredicate) { + var length = array.length, i; + + if (typeof valueOrPredicate === "function") { + for (i = 0; i < length; i++) { + if (valueOrPredicate(array[i])) { + return i; + } + } + } else { + for (i = 0; i < length; i++) { + if (array[i] === valueOrPredicate) { + return i; + } } } + return -1; }, - contains: function(array, value) { - /* - * Stupid IE does not have Array.prototype.indexOf, otherwise this function - * would be a one-liner. - */ - var length = array.length; - for (var i = 0; i < length; i++) { - if (array[i] === value) { - return true; - } - } - return false; + contains: function(array, valueOrPredicate) { + return arrays.indexOf(array, valueOrPredicate) !== -1; }, - each: function(array, callback) { - var length = array.length; - for (var i = 0; i < length; i++) { - callback(array[i], i); + each: function(array, iterator) { + var length = array.length, i; + + for (i = 0; i < length; i++) { + iterator(array[i], i); } }, - map: function(array, callback) { - var result = []; - var length = array.length; - for (var i = 0; i < length; i++) { - result[i] = callback(array[i], i); + map: function(array, iterator) { + var length = array.length, + result = new Array(length), + i; + + for (i = 0; i < length; i++) { + result[i] = iterator(array[i], i); } + return result; },