Chromium Code Reviews| Index: src/js/typedarray.js |
| diff --git a/src/js/typedarray.js b/src/js/typedarray.js |
| index 204e0918b24a45550be3440ac389cd2178751838..7404f1760d79fdc4d9e2316250d367d20e8f1002 100644 |
| --- a/src/js/typedarray.js |
| +++ b/src/js/typedarray.js |
| @@ -28,9 +28,7 @@ var InnerArrayFilter; |
| var InnerArrayFind; |
| var InnerArrayFindIndex; |
| var InnerArrayForEach; |
| -var InnerArrayIndexOf; |
| var InnerArrayJoin; |
| -var InnerArrayLastIndexOf; |
| var InnerArrayReduce; |
| var InnerArrayReduceRight; |
| var InnerArraySome; |
| @@ -79,9 +77,7 @@ utils.Import(function(from) { |
| InnerArrayFind = from.InnerArrayFind; |
| InnerArrayFindIndex = from.InnerArrayFindIndex; |
| InnerArrayForEach = from.InnerArrayForEach; |
| - InnerArrayIndexOf = from.InnerArrayIndexOf; |
| InnerArrayJoin = from.InnerArrayJoin; |
| - InnerArrayLastIndexOf = from.InnerArrayLastIndexOf; |
| InnerArrayReduce = from.InnerArrayReduce; |
| InnerArrayReduceRight = from.InnerArrayReduceRight; |
| InnerArraySome = from.InnerArraySome; |
| @@ -572,7 +568,28 @@ function TypedArrayIndexOf(element, index) { |
| if (!IS_TYPEDARRAY(this)) throw %make_type_error(kNotTypedArray); |
| var length = %_TypedArrayGetLength(this); |
| - return InnerArrayIndexOf(this, element, index, length); |
| + |
| + if (length === 0) return -1; |
| + var n = TO_INTEGER(index); |
| + |
|
Camillo Bruni
2016/08/12 09:35:17
If the input is not a number return -1:
if (!IS_NU
mattloring
2016/08/12 17:52:43
Done.
|
| + var k; |
| + if (n >= 0) { |
| + k = n; |
| + } else { |
| + k = length + n; |
| + if (k < 0) { |
| + k = 0; |
| + } |
| + } |
| + |
| + while (k < length) { |
| + var elementK = this[k]; |
| + if (k in this && element === elementK) { |
|
Camillo Bruni
2016/08/12 09:35:17
This "in" check is not necessary since the typed a
mattloring
2016/08/12 17:52:43
Done.
|
| + return k; |
| + } |
| + ++k; |
| + } |
| + return -1; |
| } |
| %FunctionSetLength(TypedArrayIndexOf, 1); |
| @@ -583,8 +600,33 @@ function TypedArrayLastIndexOf(element, index) { |
| var length = %_TypedArrayGetLength(this); |
| - return InnerArrayLastIndexOf(this, element, index, length, |
| - arguments.length); |
| + if (length === 0) return -1; |
| + var n; |
| + if (arguments.length < 2) { |
| + n = length - 1; |
| + } else { |
| + n = TO_INTEGER(index); |
| + } |
|
Camillo Bruni
2016/08/12 09:35:17
Add: if (!IS_NUMBER(element)) return -1;
mattloring
2016/08/12 17:52:43
Done.
|
| + |
| + var k; |
| + if (n >= 0) { |
| + if (length <= n) { |
| + k = length - 1; |
| + } else { |
| + k = n; |
| + } |
| + } else { |
| + k = length + n; |
| + } |
| + |
| + while (k >= 0) { |
| + var elementK = this[k]; |
| + if (k in this && element === elementK) { |
|
Camillo Bruni
2016/08/12 09:35:17
same here: you can remove the "in" check.
mattloring
2016/08/12 17:52:43
Done.
|
| + return k; |
| + } |
| + --k; |
| + } |
| + return -1; |
| } |
| %FunctionSetLength(TypedArrayLastIndexOf, 1); |