|
@@ -588,19 +588,26 @@ JS_ENUMERATE_TYPED_ARRAYS
|
|
|
#undef __JS_ENUMERATE
|
|
|
|
|
|
// 10.4.5.9 MakeTypedArrayWithBufferWitnessRecord ( obj, order ), https://tc39.es/ecma262/#sec-maketypedarraywithbufferwitnessrecord
|
|
|
-TypedArrayWithBufferWitness make_typed_array_with_buffer_witness_record_for_known_attached_array(TypedArrayBase const& typed_array, ArrayBuffer::Order order)
|
|
|
+TypedArrayWithBufferWitness make_typed_array_with_buffer_witness_record(TypedArrayBase const& typed_array, ArrayBuffer::Order order)
|
|
|
{
|
|
|
// 1. Let buffer be obj.[[ViewedArrayBuffer]].
|
|
|
auto* buffer = typed_array.viewed_array_buffer();
|
|
|
|
|
|
+ ByteLength byte_length { 0 };
|
|
|
+
|
|
|
// 2. If IsDetachedBuffer(buffer) is true, then
|
|
|
- // a. Let byteLength be detached.
|
|
|
+ if (buffer->is_detached()) {
|
|
|
+ // a. Let byteLength be detached.
|
|
|
+ byte_length = ByteLength::detached();
|
|
|
+ }
|
|
|
// 3. Else,
|
|
|
- // a. Let byteLength be ArrayBufferByteLength(buffer, order).
|
|
|
- auto byte_length = array_buffer_byte_length(*buffer, order);
|
|
|
+ else {
|
|
|
+ // a. Let byteLength be ArrayBufferByteLength(buffer, order).
|
|
|
+ byte_length = array_buffer_byte_length(*buffer, order);
|
|
|
+ }
|
|
|
|
|
|
// 4. Return the TypedArray With Buffer Witness Record { [[Object]]: obj, [[CachedBufferByteLength]]: byteLength }.
|
|
|
- return { .object = typed_array, .cached_buffer_byte_length = byte_length };
|
|
|
+ return { .object = typed_array, .cached_buffer_byte_length = move(byte_length) };
|
|
|
}
|
|
|
|
|
|
// 10.4.5.11 TypedArrayByteLength ( taRecord ), https://tc39.es/ecma262/#sec-typedarraybytelength
|
|
@@ -703,7 +710,7 @@ bool is_typed_array_out_of_bounds_for_known_attached_array(TypedArrayWithBufferW
|
|
|
bool is_valid_integer_index_slow_case(TypedArrayBase const& typed_array, CanonicalIndex property_index)
|
|
|
{
|
|
|
// 4. Let taRecord be MakeTypedArrayWithBufferWitnessRecord(O, unordered).
|
|
|
- auto typed_array_record = make_typed_array_with_buffer_witness_record_for_known_attached_array(typed_array, ArrayBuffer::Unordered);
|
|
|
+ auto typed_array_record = make_typed_array_with_buffer_witness_record(typed_array, ArrayBuffer::Unordered);
|
|
|
|
|
|
// 5. NOTE: Bounds checking is not a synchronizing operation when O's backing buffer is a growable SharedArrayBuffer.
|
|
|
|