Skip to content

Commit

Permalink
Perf: Update known array lengths (#3370)
Browse files Browse the repository at this point in the history
  • Loading branch information
Harris-Miller committed Nov 18, 2023
1 parent 4261fb1 commit ddd9736
Show file tree
Hide file tree
Showing 10 changed files with 33 additions and 28 deletions.
4 changes: 2 additions & 2 deletions source/internal/_clone.js
Original file line number Diff line number Diff line change
Expand Up @@ -39,9 +39,9 @@ export default function _clone(value, deep, map) {

switch (type(value)) {
case 'Object': return copy(Object.create(Object.getPrototypeOf(value)));
case 'Array': return copy([]);
case 'Array': return copy(Array(value.length));
case 'Date': return new Date(value.valueOf());
case 'RegExp': return _cloneRegExp(value);
case 'RegExp': return _cloneRegExp(value);
case 'Int8Array':
case 'Uint8Array':
case 'Uint8ClampedArray':
Expand Down
13 changes: 8 additions & 5 deletions source/intersperse.js
Original file line number Diff line number Diff line change
Expand Up @@ -19,15 +19,18 @@ import _curry2 from './internal/_curry2.js';
*
* R.intersperse('a', ['b', 'n', 'n', 's']); //=> ['b', 'a', 'n', 'a', 'n', 'a', 's']
*/
var intersperse = _curry2(_checkForMethod('intersperse', function intersperse(separator, list) {
var out = [];
var idx = 0;
var intersperse = _curry2(_checkForMethod('intersperse', function _intersperse(separator, list) {
var length = list.length;
if (length === 0) { return []; }
var out = Array(length * 2 - 1);
var idx = 0;
while (idx < length) {
var i = idx * 2;
if (idx === length - 1) {
out.push(list[idx]);
out[i] = list[idx];
} else {
out.push(list[idx], separator);
out[i] = list[idx];
out[i + 1] = separator;
}
idx += 1;
}
Expand Down
2 changes: 1 addition & 1 deletion source/mapAccum.js
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,7 @@ import _curry3 from './internal/_curry3.js';
var mapAccum = _curry3(function mapAccum(fn, acc, list) {
var idx = 0;
var len = list.length;
var result = [];
var result = Array(len);
var tuple = [acc];
while (idx < len) {
tuple = fn(tuple[0], list[idx]);
Expand Down
2 changes: 1 addition & 1 deletion source/mapAccumRight.js
Original file line number Diff line number Diff line change
Expand Up @@ -40,7 +40,7 @@ import _curry3 from './internal/_curry3.js';
*/
var mapAccumRight = _curry3(function mapAccumRight(fn, acc, list) {
var idx = list.length - 1;
var result = [];
var result = Array(list.length);
var tuple = [acc];
while (idx >= 0) {
tuple = fn(tuple[0], list[idx]);
Expand Down
11 changes: 6 additions & 5 deletions source/range.js
Original file line number Diff line number Diff line change
Expand Up @@ -22,11 +22,12 @@ var range = _curry2(function range(from, to) {
if (!(_isNumber(from) && _isNumber(to))) {
throw new TypeError('Both arguments to range must be numbers');
}
var result = [];
var n = from;
while (n < to) {
result.push(n);
n += 1;
var result = Array(from < to ? to - from : 0);
var finish = from < 0 ? to + Math.abs(from) : to - from;
var idx = 0;
while (idx < finish) {
result[idx] = idx + from;
idx += 1;
}
return result;
});
Expand Down
3 changes: 2 additions & 1 deletion source/scan.js
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,8 @@ import _xscan from './internal/_xscan.js';
var scan = _curry3(_dispatchable([], _xscan, function scan(fn, acc, list) {
var idx = 0;
var len = list.length;
var result = [acc];
var result = Array(len + 1);
result[0] = acc;
while (idx < len) {
acc = fn(acc, list[idx]);
result[idx + 1] = acc;
Expand Down
8 changes: 4 additions & 4 deletions source/times.js
Original file line number Diff line number Diff line change
Expand Up @@ -26,15 +26,15 @@ import _curry2 from './internal/_curry2.js';
*/
var times = _curry2(function times(fn, n) {
var len = Number(n);
var idx = 0;
var list;

if (len < 0 || isNaN(len)) {
throw new RangeError('n must be a non-negative number');
}
list = [];

var idx = 0;
var list = Array(len);
while (idx < len) {
list.push(fn(idx));
list[idx] = fn(idx);
idx += 1;
}
return list;
Expand Down
10 changes: 5 additions & 5 deletions source/xprod.js
Original file line number Diff line number Diff line change
Expand Up @@ -20,18 +20,18 @@ import _curry2 from './internal/_curry2.js';
* @symb R.xprod([a, b], [c, d]) = [[a, c], [a, d], [b, c], [b, d]]
*/
var xprod = _curry2(function xprod(a, b) { // = xprodWith(prepend); (takes about 3 times as long...)
var idx = 0;
var i = 0;
var ilen = a.length;
var j;
var jlen = b.length;
var result = [];
while (idx < ilen) {
var result = Array(ilen * jlen);
while (i < ilen) {
j = 0;
while (j < jlen) {
result[result.length] = [a[idx], b[j]];
result[(i * jlen) + j] = [a[i], b[j]];
j += 1;
}
idx += 1;
i += 1;
}
return result;
});
Expand Down
4 changes: 2 additions & 2 deletions source/zip.js
Original file line number Diff line number Diff line change
Expand Up @@ -21,9 +21,9 @@ import _curry2 from './internal/_curry2.js';
* @symb R.zip([a, b, c], [d, e, f]) = [[a, d], [b, e], [c, f]]
*/
var zip = _curry2(function zip(a, b) {
var rv = [];
var idx = 0;
var len = Math.min(a.length, b.length);
var rv = Array(len);
var idx = 0;
while (idx < len) {
rv[idx] = [a[idx], b[idx]];
idx += 1;
Expand Down
4 changes: 2 additions & 2 deletions source/zipWith.js
Original file line number Diff line number Diff line change
Expand Up @@ -26,9 +26,9 @@ import _curry3 from './internal/_curry3.js';
* @symb R.zipWith(fn, [a, b, c], [d, e, f]) = [fn(a, d), fn(b, e), fn(c, f)]
*/
var zipWith = _curry3(function zipWith(fn, a, b) {
var rv = [];
var idx = 0;
var len = Math.min(a.length, b.length);
var rv = Array(len);
var idx = 0;
while (idx < len) {
rv[idx] = fn(a[idx], b[idx]);
idx += 1;
Expand Down

0 comments on commit ddd9736

Please sign in to comment.