diff --git a/Userland/Libraries/LibJS/Runtime/ArrayBuffer.cpp b/Userland/Libraries/LibJS/Runtime/ArrayBuffer.cpp index f1bced4788..e4a2dcb7e9 100644 --- a/Userland/Libraries/LibJS/Runtime/ArrayBuffer.cpp +++ b/Userland/Libraries/LibJS/Runtime/ArrayBuffer.cpp @@ -138,7 +138,7 @@ void copy_data_block_bytes(ByteBuffer& to_block, u64 to_index, ByteBuffer const& // 7. Return unused. } -// 25.1.2.1 AllocateArrayBuffer ( constructor, byteLength ), https://tc39.es/ecma262/#sec-allocatearraybuffer +// 25.1.3.1 AllocateArrayBuffer ( constructor, byteLength [ , maxByteLength ] ), https://tc39.es/ecma262/#sec-allocatearraybuffer ThrowCompletionOr allocate_array_buffer(VM& vm, FunctionObject& constructor, size_t byte_length) { // 1. Let obj be ? OrdinaryCreateFromConstructor(constructor, "%ArrayBuffer.prototype%", « [[ArrayBufferData]], [[ArrayBufferByteLength]], [[ArrayBufferDetachKey]] »). @@ -156,7 +156,7 @@ ThrowCompletionOr allocate_array_buffer(VM& vm, FunctionObject& co return obj.ptr(); } -// 25.1.2.3 DetachArrayBuffer ( arrayBuffer [ , key ] ), https://tc39.es/ecma262/#sec-detacharraybuffer +// 25.1.3.4 DetachArrayBuffer ( arrayBuffer [ , key ] ), https://tc39.es/ecma262/#sec-detacharraybuffer ThrowCompletionOr detach_array_buffer(VM& vm, ArrayBuffer& array_buffer, Optional key) { // 1. Assert: IsSharedArrayBuffer(arrayBuffer) is false. @@ -178,7 +178,7 @@ ThrowCompletionOr detach_array_buffer(VM& vm, ArrayBuffer& array_buffer, O return {}; } -// 25.1.2.4 CloneArrayBuffer ( srcBuffer, srcByteOffset, srcLength, cloneConstructor ), https://tc39.es/ecma262/#sec-clonearraybuffer +// 25.1.3.5 CloneArrayBuffer ( srcBuffer, srcByteOffset, srcLength, cloneConstructor ), https://tc39.es/ecma262/#sec-clonearraybuffer ThrowCompletionOr clone_array_buffer(VM& vm, ArrayBuffer& source_buffer, size_t source_byte_offset, size_t source_length) { auto& realm = *vm.current_realm(); @@ -249,7 +249,7 @@ ThrowCompletionOr array_buffer_copy_and_detach(VM& vm, ArrayBuffer return new_buffer; } -// 25.2.1.1 AllocateSharedArrayBuffer ( constructor, byteLength ), https://tc39.es/ecma262/#sec-allocatesharedarraybuffer +// 25.2.2.1 AllocateSharedArrayBuffer ( constructor, byteLength [ , maxByteLength ] ), https://tc39.es/ecma262/#sec-allocatesharedarraybuffer ThrowCompletionOr> allocate_shared_array_buffer(VM& vm, FunctionObject& constructor, size_t byte_length) { // 1. Let obj be ? OrdinaryCreateFromConstructor(constructor, "%SharedArrayBuffer.prototype%", « [[ArrayBufferData]], [[ArrayBufferByteLength]] »). diff --git a/Userland/Libraries/LibJS/Runtime/ArrayBuffer.h b/Userland/Libraries/LibJS/Runtime/ArrayBuffer.h index 6e6708cbb7..a642485b2c 100644 --- a/Userland/Libraries/LibJS/Runtime/ArrayBuffer.h +++ b/Userland/Libraries/LibJS/Runtime/ArrayBuffer.h @@ -77,7 +77,7 @@ public: void detach_buffer() { m_data_block.byte_buffer = Empty {}; } - // 25.1.2.2 IsDetachedBuffer ( arrayBuffer ), https://tc39.es/ecma262/#sec-isdetachedbuffer + // 25.1.3.3 IsDetachedBuffer ( arrayBuffer ), https://tc39.es/ecma262/#sec-isdetachedbuffer bool is_detached() const { // 1. If arrayBuffer.[[ArrayBufferData]] is null, return true. @@ -87,7 +87,7 @@ public: return false; } - // 25.2.1.2 IsSharedArrayBuffer ( obj ), https://tc39.es/ecma262/#sec-issharedarraybuffer + // 25.2.2.2 IsSharedArrayBuffer ( obj ), https://tc39.es/ecma262/#sec-issharedarraybuffer bool is_shared_array_buffer() const { // 1. Let bufferData be obj.[[ArrayBufferData]]. @@ -134,7 +134,7 @@ ThrowCompletionOr clone_array_buffer(VM&, ArrayBuffer& source_buff ThrowCompletionOr array_buffer_copy_and_detach(VM&, ArrayBuffer& array_buffer, Value new_length, PreserveResizability preserve_resizability); ThrowCompletionOr> allocate_shared_array_buffer(VM&, FunctionObject& constructor, size_t byte_length); -// 25.1.2.9 RawBytesToNumeric ( type, rawBytes, isLittleEndian ), https://tc39.es/ecma262/#sec-rawbytestonumeric +// 25.1.3.13 RawBytesToNumeric ( type, rawBytes, isLittleEndian ), https://tc39.es/ecma262/#sec-rawbytestonumeric template static Value raw_bytes_to_numeric(VM& vm, Bytes raw_value, bool is_little_endian) { @@ -206,7 +206,7 @@ static Value raw_bytes_to_numeric(VM& vm, Bytes raw_value, bool is_little_endian } } -// Implementation for 25.1.2.10 GetValueFromBuffer, used in TypedArray::get_value_from_buffer(), https://tc39.es/ecma262/#sec-getvaluefrombuffer +// 25.1.3.15 GetValueFromBuffer ( arrayBuffer, byteIndex, type, isTypedArray, order [ , isLittleEndian ] ), https://tc39.es/ecma262/#sec-getvaluefrombuffer template Value ArrayBuffer::get_value(size_t byte_index, [[maybe_unused]] bool is_typed_array, Order, bool is_little_endian) { @@ -252,7 +252,7 @@ Value ArrayBuffer::get_value(size_t byte_index, [[maybe_unused]] bool is_typed_a return raw_bytes_to_numeric(vm, raw_value, is_little_endian); } -// 25.1.2.11 NumericToRawBytes ( type, value, isLittleEndian ), https://tc39.es/ecma262/#sec-numerictorawbytes +// 25.1.3.16 NumericToRawBytes ( type, value, isLittleEndian ), https://tc39.es/ecma262/#sec-numerictorawbytes template static void numeric_to_raw_bytes(VM& vm, Value value, bool is_little_endian, Bytes raw_bytes) { @@ -317,7 +317,7 @@ static void numeric_to_raw_bytes(VM& vm, Value value, bool is_little_endian, Byt } } -// 25.1.2.12 SetValueInBuffer ( arrayBuffer, byteIndex, type, value, isTypedArray, order [ , isLittleEndian ] ), https://tc39.es/ecma262/#sec-setvalueinbuffer +// 25.1.3.17 SetValueInBuffer ( arrayBuffer, byteIndex, type, value, isTypedArray, order [ , isLittleEndian ] ), https://tc39.es/ecma262/#sec-setvalueinbuffer template void ArrayBuffer::set_value(size_t byte_index, Value value, [[maybe_unused]] bool is_typed_array, Order, bool is_little_endian) { @@ -363,7 +363,7 @@ void ArrayBuffer::set_value(size_t byte_index, Value value, [[maybe_unused]] boo // 10. Return unused. } -// 25.1.2.13 GetModifySetValueInBuffer ( arrayBuffer, byteIndex, type, value, op [ , isLittleEndian ] ), https://tc39.es/ecma262/#sec-getmodifysetvalueinbuffer +// 25.1.3.18 GetModifySetValueInBuffer ( arrayBuffer, byteIndex, type, value, op [ , isLittleEndian ] ), https://tc39.es/ecma262/#sec-getmodifysetvalueinbuffer template Value ArrayBuffer::get_modify_set_value(size_t byte_index, Value value, ReadWriteModifyFunction operation, bool is_little_endian) { diff --git a/Userland/Libraries/LibJS/Runtime/ArrayBufferConstructor.cpp b/Userland/Libraries/LibJS/Runtime/ArrayBufferConstructor.cpp index 1fa1fc3d0d..3ba70067ff 100644 --- a/Userland/Libraries/LibJS/Runtime/ArrayBufferConstructor.cpp +++ b/Userland/Libraries/LibJS/Runtime/ArrayBufferConstructor.cpp @@ -26,19 +26,19 @@ void ArrayBufferConstructor::initialize(Realm& realm) auto& vm = this->vm(); Base::initialize(realm); - // 25.1.4.2 ArrayBuffer.prototype, https://tc39.es/ecma262/#sec-arraybuffer.prototype + // 25.1.5.2 ArrayBuffer.prototype, https://tc39.es/ecma262/#sec-arraybuffer.prototype define_direct_property(vm.names.prototype, realm.intrinsics().array_buffer_prototype(), 0); u8 attr = Attribute::Writable | Attribute::Configurable; define_native_function(realm, vm.names.isView, is_view, 1, attr); - // 25.1.5.4 ArrayBuffer.prototype [ @@toStringTag ], https://tc39.es/ecma262/#sec-arraybuffer.prototype-@@tostringtag + // 25.1.6.7 ArrayBuffer.prototype [ @@toStringTag ], https://tc39.es/ecma262/#sec-arraybuffer.prototype-@@tostringtag define_native_accessor(realm, vm.well_known_symbol_species(), symbol_species_getter, {}, Attribute::Configurable); define_direct_property(vm.names.length, Value(1), Attribute::Configurable); } -// 25.1.3.1 ArrayBuffer ( length ), https://tc39.es/ecma262/#sec-arraybuffer-length +// 25.1.4.1 ArrayBuffer ( length [ , options ] ), https://tc39.es/ecma262/#sec-arraybuffer-length ThrowCompletionOr ArrayBufferConstructor::call() { auto& vm = this->vm(); @@ -47,7 +47,7 @@ ThrowCompletionOr ArrayBufferConstructor::call() return vm.throw_completion(ErrorType::ConstructorWithoutNew, vm.names.ArrayBuffer); } -// 25.1.3.1 ArrayBuffer ( length ), https://tc39.es/ecma262/#sec-arraybuffer-length +// 25.1.4.1 ArrayBuffer ( length [ , options ] ), https://tc39.es/ecma262/#sec-arraybuffer-length ThrowCompletionOr> ArrayBufferConstructor::construct(FunctionObject& new_target) { auto& vm = this->vm(); @@ -68,7 +68,7 @@ ThrowCompletionOr> ArrayBufferConstructor::construct(Functi return *TRY(allocate_array_buffer(vm, new_target, byte_length_or_error.release_value())); } -// 25.1.4.1 ArrayBuffer.isView ( arg ), https://tc39.es/ecma262/#sec-arraybuffer.isview +// 25.1.5.1 ArrayBuffer.isView ( arg ), https://tc39.es/ecma262/#sec-arraybuffer.isview JS_DEFINE_NATIVE_FUNCTION(ArrayBufferConstructor::is_view) { auto arg = vm.argument(0); @@ -87,7 +87,7 @@ JS_DEFINE_NATIVE_FUNCTION(ArrayBufferConstructor::is_view) return Value(false); } -// 25.1.4.3 get ArrayBuffer [ @@species ], https://tc39.es/ecma262/#sec-get-arraybuffer-@@species +// 25.1.5.3 get ArrayBuffer [ @@species ], https://tc39.es/ecma262/#sec-get-arraybuffer-@@species JS_DEFINE_NATIVE_FUNCTION(ArrayBufferConstructor::symbol_species_getter) { // 1. Return the this value. diff --git a/Userland/Libraries/LibJS/Runtime/ArrayBufferPrototype.cpp b/Userland/Libraries/LibJS/Runtime/ArrayBufferPrototype.cpp index 34d5911076..615b918386 100644 --- a/Userland/Libraries/LibJS/Runtime/ArrayBufferPrototype.cpp +++ b/Userland/Libraries/LibJS/Runtime/ArrayBufferPrototype.cpp @@ -26,17 +26,35 @@ void ArrayBufferPrototype::initialize(Realm& realm) auto& vm = this->vm(); Base::initialize(realm); u8 attr = Attribute::Writable | Attribute::Configurable; + define_native_accessor(realm, vm.names.byteLength, byte_length_getter, {}, Attribute::Configurable); define_native_function(realm, vm.names.slice, slice, 2, attr); + define_native_accessor(realm, vm.names.detached, detached_getter, {}, Attribute::Configurable); define_native_function(realm, vm.names.transfer, transfer, 0, attr); define_native_function(realm, vm.names.transferToFixedLength, transfer_to_fixed_length, 0, attr); - define_native_accessor(realm, vm.names.byteLength, byte_length_getter, {}, Attribute::Configurable); - define_native_accessor(realm, vm.names.detached, detached_getter, {}, Attribute::Configurable); - // 25.1.5.4 ArrayBuffer.prototype [ @@toStringTag ], https://tc39.es/ecma262/#sec-arraybuffer.prototype-@@tostringtag + // 25.1.6.7 ArrayBuffer.prototype [ @@toStringTag ], https://tc39.es/ecma262/#sec-arraybuffer.prototype-@@tostringtag define_direct_property(vm.well_known_symbol_to_string_tag(), PrimitiveString::create(vm, vm.names.ArrayBuffer.as_string()), Attribute::Configurable); } -// 25.1.5.3 ArrayBuffer.prototype.slice ( start, end ), https://tc39.es/ecma262/#sec-arraybuffer.prototype.slice +// 25.1.6.1 get ArrayBuffer.prototype.byteLength, https://tc39.es/ecma262/#sec-get-arraybuffer.prototype.bytelength +JS_DEFINE_NATIVE_FUNCTION(ArrayBufferPrototype::byte_length_getter) +{ + // 1. Let O be the this value. + // 2. Perform ? RequireInternalSlot(O, [[ArrayBufferData]]). + auto array_buffer_object = TRY(typed_this_value(vm)); + + // 3. If IsSharedArrayBuffer(O) is true, throw a TypeError exception. + if (array_buffer_object->is_shared_array_buffer()) + return vm.throw_completion(ErrorType::ThisCannotBeSharedArrayBuffer); + + // NOTE: These steps are done in byte_length() + // 4. If IsDetachedBuffer(O) is true, return +0𝔽. + // 5. Let length be O.[[ArrayBufferByteLength]]. + // 6. Return 𝔽(length). + return Value(array_buffer_object->byte_length()); +} + +// 25.1.6.6 ArrayBuffer.prototype.slice ( start, end ), https://tc39.es/ecma262/#sec-arraybuffer.prototype.slice JS_DEFINE_NATIVE_FUNCTION(ArrayBufferPrototype::slice) { auto& realm = *vm.current_realm(); @@ -133,24 +151,6 @@ JS_DEFINE_NATIVE_FUNCTION(ArrayBufferPrototype::slice) return new_array_buffer_object; } -// 25.1.5.1 get ArrayBuffer.prototype.byteLength, https://tc39.es/ecma262/#sec-get-arraybuffer.prototype.bytelength -JS_DEFINE_NATIVE_FUNCTION(ArrayBufferPrototype::byte_length_getter) -{ - // 1. Let O be the this value. - // 2. Perform ? RequireInternalSlot(O, [[ArrayBufferData]]). - auto array_buffer_object = TRY(typed_this_value(vm)); - - // 3. If IsSharedArrayBuffer(O) is true, throw a TypeError exception. - if (array_buffer_object->is_shared_array_buffer()) - return vm.throw_completion(ErrorType::ThisCannotBeSharedArrayBuffer); - - // NOTE: These steps are done in byte_length() - // 4. If IsDetachedBuffer(O) is true, return +0𝔽. - // 5. Let length be O.[[ArrayBufferByteLength]]. - // 6. Return 𝔽(length). - return Value(array_buffer_object->byte_length()); -} - // 25.1.5.4 get ArrayBuffer.prototype.detached, https://tc39.es/proposal-arraybuffer-transfer/#sec-get-arraybuffer.prototype.detached JS_DEFINE_NATIVE_FUNCTION(ArrayBufferPrototype::detached_getter) { diff --git a/Userland/Libraries/LibJS/Runtime/ArrayBufferPrototype.h b/Userland/Libraries/LibJS/Runtime/ArrayBufferPrototype.h index d624e894e8..db3251f2e7 100644 --- a/Userland/Libraries/LibJS/Runtime/ArrayBufferPrototype.h +++ b/Userland/Libraries/LibJS/Runtime/ArrayBufferPrototype.h @@ -22,11 +22,11 @@ public: private: explicit ArrayBufferPrototype(Realm&); + JS_DECLARE_NATIVE_FUNCTION(byte_length_getter); JS_DECLARE_NATIVE_FUNCTION(slice); + JS_DECLARE_NATIVE_FUNCTION(detached_getter); JS_DECLARE_NATIVE_FUNCTION(transfer); JS_DECLARE_NATIVE_FUNCTION(transfer_to_fixed_length); - JS_DECLARE_NATIVE_FUNCTION(byte_length_getter); - JS_DECLARE_NATIVE_FUNCTION(detached_getter); }; } diff --git a/Userland/Libraries/LibJS/Runtime/AtomicsObject.cpp b/Userland/Libraries/LibJS/Runtime/AtomicsObject.cpp index 50a211d973..c590d2edf6 100644 --- a/Userland/Libraries/LibJS/Runtime/AtomicsObject.cpp +++ b/Userland/Libraries/LibJS/Runtime/AtomicsObject.cpp @@ -83,7 +83,7 @@ static ThrowCompletionOr validate_atomic_access(VM& vm, TypedArrayBase& return (access_index * element_size) + offset; } -// 25.4.2.11 AtomicReadModifyWrite ( typedArray, index, value, op ), https://tc39.es/ecma262/#sec-atomicreadmodifywrite +// 25.4.2.17 AtomicReadModifyWrite ( typedArray, index, value, op ), https://tc39.es/ecma262/#sec-atomicreadmodifywrite static ThrowCompletionOr atomic_read_modify_write(VM& vm, TypedArrayBase& typed_array, Value index, Value value, ReadWriteModifyFunction operation) { // 1. Let buffer be ? ValidateIntegerTypedArray(typedArray). @@ -216,11 +216,11 @@ void AtomicsObject::initialize(Realm& realm) define_native_function(realm, vm.names.notify, notify, 3, attr); define_native_function(realm, vm.names.xor_, xor_, 3, attr); - // 25.4.15 Atomics [ @@toStringTag ], https://tc39.es/ecma262/#sec-atomics-@@tostringtag + // 25.4.17 Atomics [ @@toStringTag ], https://tc39.es/ecma262/#sec-atomics-@@tostringtag define_direct_property(vm.well_known_symbol_to_string_tag(), PrimitiveString::create(vm, "Atomics"_string), Attribute::Configurable); } -// 25.4.3 Atomics.add ( typedArray, index, value ), https://tc39.es/ecma262/#sec-atomics.add +// 25.4.4 Atomics.add ( typedArray, index, value ), https://tc39.es/ecma262/#sec-atomics.add JS_DEFINE_NATIVE_FUNCTION(AtomicsObject::add) { auto* typed_array = TRY(typed_array_from(vm, vm.argument(0))); @@ -236,7 +236,7 @@ JS_DEFINE_NATIVE_FUNCTION(AtomicsObject::add) VERIFY_NOT_REACHED(); } -// 25.4.4 Atomics.and ( typedArray, index, value ), https://tc39.es/ecma262/#sec-atomics.and +// 25.4.5 Atomics.and ( typedArray, index, value ), https://tc39.es/ecma262/#sec-atomics.and JS_DEFINE_NATIVE_FUNCTION(AtomicsObject::and_) { auto* typed_array = TRY(typed_array_from(vm, vm.argument(0))); @@ -252,7 +252,7 @@ JS_DEFINE_NATIVE_FUNCTION(AtomicsObject::and_) VERIFY_NOT_REACHED(); } -// Implementation of 25.4.5 Atomics.compareExchange ( typedArray, index, expectedValue, replacementValue ), https://tc39.es/ecma262/#sec-atomics.compareexchange +// 25.4.6 Atomics.compareExchange ( typedArray, index, expectedValue, replacementValue ), https://tc39.es/ecma262/#sec-atomics.compareexchange template static ThrowCompletionOr atomic_compare_exchange_impl(VM& vm, TypedArrayBase& typed_array) { @@ -331,7 +331,7 @@ static ThrowCompletionOr atomic_compare_exchange_impl(VM& vm, TypedArrayB return raw_bytes_to_numeric(vm, raw_bytes_read, is_little_endian); } -// 25.4.5 Atomics.compareExchange ( typedArray, index, expectedValue, replacementValue ), https://tc39.es/ecma262/#sec-atomics.compareexchange +// 25.4.6 Atomics.compareExchange ( typedArray, index, expectedValue, replacementValue ), https://tc39.es/ecma262/#sec-atomics.compareexchange JS_DEFINE_NATIVE_FUNCTION(AtomicsObject::compare_exchange) { auto* typed_array = TRY(typed_array_from(vm, vm.argument(0))); @@ -345,7 +345,7 @@ JS_DEFINE_NATIVE_FUNCTION(AtomicsObject::compare_exchange) VERIFY_NOT_REACHED(); } -// 25.4.6 Atomics.exchange ( typedArray, index, value ), https://tc39.es/ecma262/#sec-atomics.exchange +// 25.4.7 Atomics.exchange ( typedArray, index, value ), https://tc39.es/ecma262/#sec-atomics.exchange JS_DEFINE_NATIVE_FUNCTION(AtomicsObject::exchange) { auto* typed_array = TRY(typed_array_from(vm, vm.argument(0))); @@ -361,7 +361,7 @@ JS_DEFINE_NATIVE_FUNCTION(AtomicsObject::exchange) VERIFY_NOT_REACHED(); } -// 25.4.7 Atomics.isLockFree ( size ), https://tc39.es/ecma262/#sec-atomics.islockfree +// 25.4.8 Atomics.isLockFree ( size ), https://tc39.es/ecma262/#sec-atomics.islockfree JS_DEFINE_NATIVE_FUNCTION(AtomicsObject::is_lock_free) { auto size = TRY(vm.argument(0).to_integer_or_infinity(vm)); @@ -376,7 +376,7 @@ JS_DEFINE_NATIVE_FUNCTION(AtomicsObject::is_lock_free) return Value(false); } -// 25.4.8 Atomics.load ( typedArray, index ), https://tc39.es/ecma262/#sec-atomics.load +// 25.4.9 Atomics.load ( typedArray, index ), https://tc39.es/ecma262/#sec-atomics.load JS_DEFINE_NATIVE_FUNCTION(AtomicsObject::load) { // 1. Let buffer be ? ValidateIntegerTypedArray(typedArray). @@ -397,7 +397,7 @@ JS_DEFINE_NATIVE_FUNCTION(AtomicsObject::load) return typed_array->get_value_from_buffer(indexed_position, ArrayBuffer::Order::SeqCst, true); } -// 25.4.9 Atomics.or ( typedArray, index, value ), https://tc39.es/ecma262/#sec-atomics.or +// 25.4.10 Atomics.or ( typedArray, index, value ), https://tc39.es/ecma262/#sec-atomics.or JS_DEFINE_NATIVE_FUNCTION(AtomicsObject::or_) { auto* typed_array = TRY(typed_array_from(vm, vm.argument(0))); @@ -413,7 +413,7 @@ JS_DEFINE_NATIVE_FUNCTION(AtomicsObject::or_) VERIFY_NOT_REACHED(); } -// 25.4.10 Atomics.store ( typedArray, index, value ), https://tc39.es/ecma262/#sec-atomics.store +// 25.4.11 Atomics.store ( typedArray, index, value ), https://tc39.es/ecma262/#sec-atomics.store JS_DEFINE_NATIVE_FUNCTION(AtomicsObject::store) { // 1. Let buffer be ? ValidateIntegerTypedArray(typedArray). @@ -447,7 +447,7 @@ JS_DEFINE_NATIVE_FUNCTION(AtomicsObject::store) return value_to_set; } -// 25.4.11 Atomics.sub ( typedArray, index, value ), https://tc39.es/ecma262/#sec-atomics.sub +// 25.4.12 Atomics.sub ( typedArray, index, value ), https://tc39.es/ecma262/#sec-atomics.sub JS_DEFINE_NATIVE_FUNCTION(AtomicsObject::sub) { auto* typed_array = TRY(typed_array_from(vm, vm.argument(0))); @@ -532,7 +532,7 @@ JS_DEFINE_NATIVE_FUNCTION(AtomicsObject::notify) return vm.throw_completion(ErrorType::NotImplemented, "SharedArrayBuffer"sv); } -// 25.4.14 Atomics.xor ( typedArray, index, value ), https://tc39.es/ecma262/#sec-atomics.xor +// 25.4.16 Atomics.xor ( typedArray, index, value ), https://tc39.es/ecma262/#sec-atomics.xor JS_DEFINE_NATIVE_FUNCTION(AtomicsObject::xor_) { auto* typed_array = TRY(typed_array_from(vm, vm.argument(0))); diff --git a/Userland/Libraries/LibJS/Runtime/DataViewPrototype.cpp b/Userland/Libraries/LibJS/Runtime/DataViewPrototype.cpp index 8edb9f7d4b..141aeefa24 100644 --- a/Userland/Libraries/LibJS/Runtime/DataViewPrototype.cpp +++ b/Userland/Libraries/LibJS/Runtime/DataViewPrototype.cpp @@ -53,7 +53,7 @@ void DataViewPrototype::initialize(Realm& realm) define_direct_property(vm.well_known_symbol_to_string_tag(), PrimitiveString::create(vm, vm.names.DataView.as_string()), Attribute::Configurable); } -// 25.3.1.1 GetViewValue ( view, requestIndex, isLittleEndian, type ), https://tc39.es/ecma262/#sec-getviewvalue +// 25.3.1.5 GetViewValue ( view, requestIndex, isLittleEndian, type ), https://tc39.es/ecma262/#sec-getviewvalue template static ThrowCompletionOr get_view_value(VM& vm, Value request_index, Value is_little_endian) { @@ -98,7 +98,7 @@ static ThrowCompletionOr get_view_value(VM& vm, Value request_index, Valu return buffer->get_value(buffer_index.value(), false, ArrayBuffer::Order::Unordered, little_endian); } -// 25.3.1.2 SetViewValue ( view, requestIndex, isLittleEndian, type, value ), https://tc39.es/ecma262/#sec-setviewvalue +// 25.3.1.6 SetViewValue ( view, requestIndex, isLittleEndian, type, value ), https://tc39.es/ecma262/#sec-setviewvalue template static ThrowCompletionOr set_view_value(VM& vm, Value request_index, Value is_little_endian, Value value) { diff --git a/Userland/Libraries/LibJS/Runtime/SharedArrayBufferConstructor.cpp b/Userland/Libraries/LibJS/Runtime/SharedArrayBufferConstructor.cpp index b5c9f98d0f..c4465138a7 100644 --- a/Userland/Libraries/LibJS/Runtime/SharedArrayBufferConstructor.cpp +++ b/Userland/Libraries/LibJS/Runtime/SharedArrayBufferConstructor.cpp @@ -26,16 +26,16 @@ void SharedArrayBufferConstructor::initialize(Realm& realm) auto& vm = this->vm(); Base::initialize(realm); - // 25.2.4.2 SharedArrayBuffer.prototype, https://tc39.es/ecma262/#sec-sharedarraybuffer.prototype + // 25.2.4.1 SharedArrayBuffer.prototype, https://tc39.es/ecma262/#sec-sharedarraybuffer.prototype define_direct_property(vm.names.prototype, realm.intrinsics().shared_array_buffer_prototype(), 0); - // 25.2.4.4 SharedArrayBuffer.prototype [ @@toStringTag ], https://tc39.es/ecma262/#sec-sharedarraybuffer.prototype.toString + // 25.2.5.7 SharedArrayBuffer.prototype [ @@toStringTag ], https://tc39.es/ecma262/#sec-sharedarraybuffer.prototype.toString define_native_accessor(realm, vm.well_known_symbol_species(), symbol_species_getter, {}, Attribute::Configurable); define_direct_property(vm.names.length, Value(1), Attribute::Configurable); } -// 25.2.2.1 SharedArrayBuffer ( length ), https://tc39.es/ecma262/#sec-sharedarraybuffer-length +// 25.2.3.1 SharedArrayBuffer ( length [ , options ] ), https://tc39.es/ecma262/#sec-sharedarraybuffer-length ThrowCompletionOr SharedArrayBufferConstructor::call() { auto& vm = this->vm(); @@ -44,7 +44,7 @@ ThrowCompletionOr SharedArrayBufferConstructor::call() return vm.throw_completion(ErrorType::ConstructorWithoutNew, vm.names.SharedArrayBuffer); } -// 25.2.2.1 SharedArrayBuffer ( length ), https://tc39.es/ecma262/#sec-sharedarraybuffer-length +// 25.2.3.1 SharedArrayBuffer ( length [ , options ] ), https://tc39.es/ecma262/#sec-sharedarraybuffer-length ThrowCompletionOr> SharedArrayBufferConstructor::construct(FunctionObject& new_target) { auto& vm = this->vm(); @@ -65,7 +65,7 @@ ThrowCompletionOr> SharedArrayBufferConstructor::construct( return *TRY(allocate_shared_array_buffer(vm, new_target, byte_length_or_error.release_value())); } -// 25.2.3.2 get SharedArrayBuffer [ @@species ], https://tc39.es/ecma262/#sec-sharedarraybuffer-@@species +// 25.2.4.2 get SharedArrayBuffer [ @@species ], https://tc39.es/ecma262/#sec-sharedarraybuffer-@@species JS_DEFINE_NATIVE_FUNCTION(SharedArrayBufferConstructor::symbol_species_getter) { // 1. Return the this value. diff --git a/Userland/Libraries/LibJS/Runtime/SharedArrayBufferPrototype.cpp b/Userland/Libraries/LibJS/Runtime/SharedArrayBufferPrototype.cpp index f49812e50d..5df8ef92d8 100644 --- a/Userland/Libraries/LibJS/Runtime/SharedArrayBufferPrototype.cpp +++ b/Userland/Libraries/LibJS/Runtime/SharedArrayBufferPrototype.cpp @@ -28,11 +28,11 @@ void SharedArrayBufferPrototype::initialize(Realm& realm) define_native_accessor(realm, vm.names.byteLength, byte_length_getter, {}, Attribute::Configurable); define_native_function(realm, vm.names.slice, slice, 2, attr); - // 25.2.4.4 SharedArrayBuffer.prototype [ @@toStringTag ], https://tc39.es/ecma262/#sec-sharedarraybuffer.prototype.toString + // 25.2.5.7 SharedArrayBuffer.prototype [ @@toStringTag ], https://tc39.es/ecma262/#sec-sharedarraybuffer.prototype.toString define_direct_property(vm.well_known_symbol_to_string_tag(), PrimitiveString::create(vm, vm.names.SharedArrayBuffer.as_string()), Attribute::Configurable); } -// 25.2.4.1 get SharedArrayBuffer.prototype.byteLength, https://tc39.es/ecma262/#sec-get-sharedarraybuffer.prototype.bytelength +// 25.2.5.1 get SharedArrayBuffer.prototype.byteLength, https://tc39.es/ecma262/#sec-get-sharedarraybuffer.prototype.bytelength JS_DEFINE_NATIVE_FUNCTION(SharedArrayBufferPrototype::byte_length_getter) { // 1. Let O be the this value. @@ -47,7 +47,7 @@ JS_DEFINE_NATIVE_FUNCTION(SharedArrayBufferPrototype::byte_length_getter) return Value(array_buffer_object->byte_length()); } -// 25.2.4.3 SharedArrayBuffer.prototype.slice ( start, end ), https://tc39.es/ecma262/#sec-sharedarraybuffer.prototype.slice +// 25.2.5.6 SharedArrayBuffer.prototype.slice ( start, end ), https://tc39.es/ecma262/#sec-sharedarraybuffer.prototype.slice JS_DEFINE_NATIVE_FUNCTION(SharedArrayBufferPrototype::slice) { auto& realm = *vm.current_realm(); diff --git a/Userland/Libraries/LibJS/Runtime/TypedArray.h b/Userland/Libraries/LibJS/Runtime/TypedArray.h index 4aed96a29e..6a9964d4cf 100644 --- a/Userland/Libraries/LibJS/Runtime/TypedArray.h +++ b/Userland/Libraries/LibJS/Runtime/TypedArray.h @@ -58,15 +58,15 @@ public: virtual size_t element_size() const = 0; virtual DeprecatedFlyString const& element_name() const = 0; - // 25.1.2.6 IsUnclampedIntegerElementType ( type ), https://tc39.es/ecma262/#sec-isunclampedintegerelementtype + // 25.1.3.10 IsUnclampedIntegerElementType ( type ), https://tc39.es/ecma262/#sec-isunclampedintegerelementtype virtual bool is_unclamped_integer_element_type() const = 0; - // 25.1.2.7 IsBigIntElementType ( type ), https://tc39.es/ecma262/#sec-isbigintelementtype + // 25.1.3.11 IsBigIntElementType ( type ), https://tc39.es/ecma262/#sec-isbigintelementtype virtual bool is_bigint_element_type() const = 0; - // 25.1.2.10 GetValueFromBuffer ( arrayBuffer, byteIndex, type, isTypedArray, order [ , isLittleEndian ] ), https://tc39.es/ecma262/#sec-getvaluefrombuffer + // 25.1.3.15 GetValueFromBuffer ( arrayBuffer, byteIndex, type, isTypedArray, order [ , isLittleEndian ] ), https://tc39.es/ecma262/#sec-getvaluefrombuffer virtual Value get_value_from_buffer(size_t byte_index, ArrayBuffer::Order, bool is_little_endian = true) const = 0; - // 25.1.2.12 SetValueInBuffer ( arrayBuffer, byteIndex, type, value, isTypedArray, order [ , isLittleEndian ] ), https://tc39.es/ecma262/#sec-setvalueinbuffer + // 25.1.3.17 SetValueInBuffer ( arrayBuffer, byteIndex, type, value, isTypedArray, order [ , isLittleEndian ] ), https://tc39.es/ecma262/#sec-setvalueinbuffer virtual void set_value_in_buffer(size_t byte_index, Value, ArrayBuffer::Order, bool is_little_endian = true) = 0; - // 25.1.2.13 GetModifySetValueInBuffer ( arrayBuffer, byteIndex, type, value, op [ , isLittleEndian ] ), https://tc39.es/ecma262/#sec-getmodifysetvalueinbuffer + // 25.1.3.18 GetModifySetValueInBuffer ( arrayBuffer, byteIndex, type, value, op ), https://tc39.es/ecma262/#sec-getmodifysetvalueinbuffer virtual Value get_modify_set_value_in_buffer(size_t byte_index, Value value, ReadWriteModifyFunction operation, bool is_little_endian = true) = 0; protected: @@ -90,7 +90,7 @@ private: virtual void visit_edges(Visitor&) override; }; -// 10.4.5.9 IsValidIntegerIndex ( O, index ), https://tc39.es/ecma262/#sec-isvalidintegerindex +// 10.4.5.14 IsValidIntegerIndex ( O, index ), https://tc39.es/ecma262/#sec-isvalidintegerindex inline bool is_valid_integer_index(TypedArrayBase const& typed_array, CanonicalIndex property_index) { // 1. If IsDetachedBuffer(O.[[ViewedArrayBuffer]]) is true, return false. @@ -110,7 +110,7 @@ inline bool is_valid_integer_index(TypedArrayBase const& typed_array, CanonicalI return true; } -// 10.4.5.10 IntegerIndexedElementGet ( O, index ), https://tc39.es/ecma262/#sec-integerindexedelementget +// 10.4.5.15 IntegerIndexedElementGet ( O, index ), https://tc39.es/ecma262/#sec-integerindexedelementget template inline ThrowCompletionOr integer_indexed_element_get(TypedArrayBase const& typed_array, CanonicalIndex property_index) { @@ -138,7 +138,7 @@ inline ThrowCompletionOr integer_indexed_element_get(TypedArrayBase const return typed_array.viewed_array_buffer()->template get_value(indexed_position.value(), true, ArrayBuffer::Order::Unordered); } -// 10.4.5.11 IntegerIndexedElementSet ( O, index, value ), https://tc39.es/ecma262/#sec-integerindexedelementset +// 10.4.5.16 IntegerIndexedElementSet ( O, index, value ), https://tc39.es/ecma262/#sec-integerindexedelementset // NOTE: In error cases, the function will return as if it succeeded. template inline ThrowCompletionOr integer_indexed_element_set(TypedArrayBase& typed_array, CanonicalIndex property_index, Value value)