| // Copyright (C) 2020 Rick Waldron. All rights reserved. |
| // This code is governed by the BSD license found in the LICENSE file. |
| /*--- |
| esid: sec-%typedarray%.prototype.lastindexof |
| description: Returns -1 if buffer is detached after ValidateTypedArray |
| info: | |
| %TypedArray%.prototype.lastIndexOf ( searchElement [ , fromIndex ] ) |
| |
| The interpretation and use of the arguments of %TypedArray%.prototype.lastIndexOf are the same as for Array.prototype.lastIndexOf as defined in 22.1.3.17. |
| |
| When the lastIndexOf method is called with one or two arguments, the following steps are taken: |
| |
| Let O be the this value. |
| Perform ? ValidateTypedArray(O). |
| Let len be O.[[ArrayLength]]. |
| If len is 0, return -1F. |
| If fromIndex is present, let n be ? ToIntegerOrInfinity(fromIndex); else let n be len - 1. |
| If n is -∞, return -1F. |
| If n ≥ 0, then |
| Let k be min(n, len - 1). |
| Else, |
| Let k be len + n. |
| Repeat, while k ≥ 0, |
| Let kPresent be ! HasProperty(O, ! ToString(F(k))). |
| If kPresent is true, then |
| Let elementK be ! Get(O, ! ToString(F(k))). |
| Let same be the result of performing Strict Equality Comparison searchElement === elementK. |
| If same is true, return F(k). |
| Set k to k - 1. |
| Return -1F. |
| |
| includes: [testTypedArray.js, detachArrayBuffer.js] |
| features: [align-detached-buffer-semantics-with-web-reality, TypedArray] |
| ---*/ |
| |
| testWithTypedArrayConstructors(function(TA) { |
| const sample = new TA(1); |
| const fromIndex = { |
| valueOf() { |
| $DETACHBUFFER(sample.buffer); |
| return 0; |
| } |
| }; |
| |
| assert.sameValue(sample.lastIndexOf(undefined, fromIndex), -1); |
| }); |