Chromium Code Reviews| Index: src/array.js |
| diff --git a/src/array.js b/src/array.js |
| index 7baabf83610c3c333eb13b9a5463c652ccaa3839..394ebd080758e8823ac4bd29ec268c1fdd0dd8a5 100644 |
| --- a/src/array.js |
| +++ b/src/array.js |
| @@ -567,10 +567,10 @@ function SparseReverse(array, len) { |
| high = len - i - 1; |
| } |
| - var current_i = array[low]; |
| - if (!IS_UNDEFINED(current_i) || low in array) { |
|
adamk
2015/07/16 22:08:13
As discussed offline, I don't think SparseReverse
Dan Ehrenberg
2015/07/16 22:16:49
Done.
|
| - var current_j = array[high]; |
| - if (!IS_UNDEFINED(current_j) || high in array) { |
| + if (low in array) { |
| + var current_i = array[low]; |
| + if (high in array) { |
| + var current_j = array[high]; |
| array[low] = current_j; |
| array[high] = current_i; |
| } else { |
| @@ -578,8 +578,8 @@ function SparseReverse(array, len) { |
| delete array[low]; |
| } |
| } else { |
| - var current_j = array[high]; |
| - if (!IS_UNDEFINED(current_j) || high in array) { |
| + if (high in array) { |
| + var current_j = array[high]; |
| array[low] = current_j; |
| delete array[high]; |
| } |
| @@ -587,14 +587,25 @@ function SparseReverse(array, len) { |
| } |
| } |
| +function PackedArrayReverse(array, len) { |
| + var j = len - 1; |
| + for (var i = 0; i < j; i++, j--) { |
| + var current_i = array[i]; |
| + var current_j = array[j]; |
| + array[i] = current_j; |
| + array[j] = current_i; |
| + } |
| + return array; |
| +} |
| + |
| function InnerArrayReverse(array, len) { |
| var j = len - 1; |
| for (var i = 0; i < j; i++, j--) { |
| - var current_i = array[i]; |
| - if (!IS_UNDEFINED(current_i) || i in array) { |
| - var current_j = array[j]; |
| - if (!IS_UNDEFINED(current_j) || j in array) { |
| + if (i in array) { |
| + var current_i = array[i]; |
| + if (j in array) { |
| + var current_j = array[j]; |
| array[i] = current_j; |
| array[j] = current_i; |
| } else { |
| @@ -602,8 +613,8 @@ function InnerArrayReverse(array, len) { |
| delete array[i]; |
| } |
| } else { |
| - var current_j = array[j]; |
| - if (!IS_UNDEFINED(current_j) || j in array) { |
| + if (j in array) { |
| + var current_j = array[j]; |
| array[i] = current_j; |
| delete array[j]; |
| } |
| @@ -623,9 +634,11 @@ function ArrayReverse() { |
| %NormalizeElements(array); |
| SparseReverse(array, len); |
| return array; |
| + } else if (%_HasFastPackedElements(array)) { |
|
adamk
2015/07/16 22:08:13
This needs an IS_ARRAY check (you can cache this a
Toon Verwaest
2015/07/16 22:15:32
Do we have objects with packed elements that are n
Dan Ehrenberg
2015/07/16 22:16:49
Done.
|
| + return PackedArrayReverse(array, len); |
| + } else { |
| + return InnerArrayReverse(array, len); |
|
adamk
2015/07/16 22:08:13
how about "GenericArrayReverse" as the name for th
Dan Ehrenberg
2015/07/16 22:16:49
Done.
|
| } |
| - |
| - return InnerArrayReverse(array, len); |
| } |
| @@ -1688,10 +1701,10 @@ utils.Export(function(to) { |
| to.InnerArrayMap = InnerArrayMap; |
| to.InnerArrayReduce = InnerArrayReduce; |
| to.InnerArrayReduceRight = InnerArrayReduceRight; |
| - to.InnerArrayReverse = InnerArrayReverse; |
| to.InnerArraySome = InnerArraySome; |
| to.InnerArraySort = InnerArraySort; |
| to.InnerArrayToLocaleString = InnerArrayToLocaleString; |
| + to.PackedArrayReverse = PackedArrayReverse; |
| }); |
| $arrayConcat = ArrayConcatJS; |