mirror of
				https://github.com/RGBCube/serenity
				synced 2025-10-31 06:02:44 +00:00 
			
		
		
		
	LibJS: Remove unnecessary ThrowCompletionOr return types in TypedArray
We used to need these because we worried about tiny OOM errors. Work towards #20449
This commit is contained in:
		
							parent
							
								
									1bc58333f8
								
							
						
					
					
						commit
						abcf71a8ca
					
				
					 6 changed files with 23 additions and 24 deletions
				
			
		|  | @ -108,11 +108,11 @@ public: | |||
|         Unordered | ||||
|     }; | ||||
|     template<typename type> | ||||
|     ThrowCompletionOr<Value> get_value(size_t byte_index, bool is_typed_array, Order, bool is_little_endian = true); | ||||
|     Value get_value(size_t byte_index, bool is_typed_array, Order, bool is_little_endian = true); | ||||
|     template<typename type> | ||||
|     ThrowCompletionOr<void> set_value(size_t byte_index, Value value, bool is_typed_array, Order, bool is_little_endian = true); | ||||
|     void set_value(size_t byte_index, Value value, bool is_typed_array, Order, bool is_little_endian = true); | ||||
|     template<typename T> | ||||
|     ThrowCompletionOr<Value> get_modify_set_value(size_t byte_index, Value value, ReadWriteModifyFunction operation, bool is_little_endian = true); | ||||
|     Value get_modify_set_value(size_t byte_index, Value value, ReadWriteModifyFunction operation, bool is_little_endian = true); | ||||
| 
 | ||||
| private: | ||||
|     ArrayBuffer(ByteBuffer buffer, Object& prototype); | ||||
|  | @ -208,7 +208,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<T>::get_value_from_buffer(), https://tc39.es/ecma262/#sec-getvaluefrombuffer
 | ||||
| template<typename T> | ||||
| ThrowCompletionOr<Value> ArrayBuffer::get_value(size_t byte_index, [[maybe_unused]] bool is_typed_array, Order, bool is_little_endian) | ||||
| Value ArrayBuffer::get_value(size_t byte_index, [[maybe_unused]] bool is_typed_array, Order, bool is_little_endian) | ||||
| { | ||||
|     auto& vm = this->vm(); | ||||
|     // 1. Assert: IsDetachedBuffer(arrayBuffer) is false.
 | ||||
|  | @ -319,7 +319,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
 | ||||
| template<typename T> | ||||
| ThrowCompletionOr<void> ArrayBuffer::set_value(size_t byte_index, Value value, [[maybe_unused]] bool is_typed_array, Order, bool is_little_endian) | ||||
| void ArrayBuffer::set_value(size_t byte_index, Value value, [[maybe_unused]] bool is_typed_array, Order, bool is_little_endian) | ||||
| { | ||||
|     auto& vm = this->vm(); | ||||
| 
 | ||||
|  | @ -361,12 +361,11 @@ ThrowCompletionOr<void> ArrayBuffer::set_value(size_t byte_index, Value value, [ | |||
|     } | ||||
| 
 | ||||
|     // 10. Return unused.
 | ||||
|     return {}; | ||||
| } | ||||
| 
 | ||||
| // 25.1.2.13 GetModifySetValueInBuffer ( arrayBuffer, byteIndex, type, value, op [ , isLittleEndian ] ), https://tc39.es/ecma262/#sec-getmodifysetvalueinbuffer
 | ||||
| template<typename T> | ||||
| ThrowCompletionOr<Value> ArrayBuffer::get_modify_set_value(size_t byte_index, Value value, ReadWriteModifyFunction operation, bool is_little_endian) | ||||
| Value ArrayBuffer::get_modify_set_value(size_t byte_index, Value value, ReadWriteModifyFunction operation, bool is_little_endian) | ||||
| { | ||||
|     auto& vm = this->vm(); | ||||
| 
 | ||||
|  |  | |||
|  | @ -381,7 +381,7 @@ JS_DEFINE_NATIVE_FUNCTION(AtomicsObject::store) | |||
| 
 | ||||
|     // 7. Let elementType be TypedArrayElementType(typedArray).
 | ||||
|     // 8. Perform SetValueInBuffer(buffer, indexedPosition, elementType, v, true, SeqCst).
 | ||||
|     MUST_OR_THROW_OOM(typed_array->set_value_in_buffer(indexed_position, value_to_set, ArrayBuffer::Order::SeqCst, true)); | ||||
|     typed_array->set_value_in_buffer(indexed_position, value_to_set, ArrayBuffer::Order::SeqCst, true); | ||||
| 
 | ||||
|     // 9. Return v.
 | ||||
|     return value_to_set; | ||||
|  |  | |||
|  | @ -149,7 +149,7 @@ static ThrowCompletionOr<Value> set_view_value(VM& vm, Value request_index, Valu | |||
|         return vm.throw_completion<RangeError>(ErrorType::DataViewOutOfRangeByteOffset, get_index, view_size); | ||||
| 
 | ||||
|     // 14. Perform SetValueInBuffer(buffer, bufferIndex, type, numberValue, false, Unordered, isLittleEndian).
 | ||||
|     MUST_OR_THROW_OOM(buffer->set_value<T>(buffer_index.value(), number_value, false, ArrayBuffer::Order::Unordered, little_endian)); | ||||
|     buffer->set_value<T>(buffer_index.value(), number_value, false, ArrayBuffer::Order::Unordered, little_endian); | ||||
| 
 | ||||
|     // 15. Return undefined.
 | ||||
|     return js_undefined(); | ||||
|  |  | |||
|  | @ -190,10 +190,10 @@ static ThrowCompletionOr<void> initialize_typed_array_from_typed_array(VM& vm, T | |||
|         // g. Repeat, while count > 0,
 | ||||
|         for (u32 i = 0; i < element_length; ++i) { | ||||
|             // i. Let value be GetValueFromBuffer(srcData, srcByteIndex, srcType, true, Unordered).
 | ||||
|             auto value = MUST_OR_THROW_OOM(src_array.get_value_from_buffer(src_byte_index, ArrayBuffer::Order::Unordered)); | ||||
|             auto value = src_array.get_value_from_buffer(src_byte_index, ArrayBuffer::Order::Unordered); | ||||
| 
 | ||||
|             // ii. Perform SetValueInBuffer(data, targetByteIndex, elementType, value, true, Unordered).
 | ||||
|             MUST_OR_THROW_OOM(data->template set_value<T>(target_byte_index, value, true, ArrayBuffer::Order::Unordered)); | ||||
|             data->template set_value<T>(target_byte_index, value, true, ArrayBuffer::Order::Unordered); | ||||
| 
 | ||||
|             // iii. Set srcByteIndex to srcByteIndex + srcElementSize.
 | ||||
|             src_byte_index += src_element_size; | ||||
|  |  | |||
|  | @ -62,11 +62,11 @@ public: | |||
|     // 25.1.2.7 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
 | ||||
|     virtual ThrowCompletionOr<Value> get_value_from_buffer(size_t byte_index, ArrayBuffer::Order, bool is_little_endian = true) const = 0; | ||||
|     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
 | ||||
|     virtual ThrowCompletionOr<void> set_value_in_buffer(size_t byte_index, Value, ArrayBuffer::Order, bool is_little_endian = true) = 0; | ||||
|     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
 | ||||
|     virtual ThrowCompletionOr<Value> get_modify_set_value_in_buffer(size_t byte_index, Value value, ReadWriteModifyFunction operation, bool is_little_endian = true) = 0; | ||||
|     virtual Value get_modify_set_value_in_buffer(size_t byte_index, Value value, ReadWriteModifyFunction operation, bool is_little_endian = true) = 0; | ||||
| 
 | ||||
| protected: | ||||
|     TypedArrayBase(Object& prototype, IntrinsicConstructor intrinsic_constructor) | ||||
|  | @ -173,7 +173,7 @@ inline ThrowCompletionOr<void> integer_indexed_element_set(TypedArrayBase& typed | |||
| 
 | ||||
|     // d. Let elementType be TypedArrayElementType(O).
 | ||||
|     // e. Perform SetValueInBuffer(O.[[ViewedArrayBuffer]], indexedPosition, elementType, numValue, true, Unordered).
 | ||||
|     MUST_OR_THROW_OOM(typed_array.viewed_array_buffer()->template set_value<T>(indexed_position.value(), num_value, true, ArrayBuffer::Order::Unordered)); | ||||
|     typed_array.viewed_array_buffer()->template set_value<T>(indexed_position.value(), num_value, true, ArrayBuffer::Order::Unordered); | ||||
| 
 | ||||
|     // 4. Return unused.
 | ||||
|     return {}; | ||||
|  | @ -445,9 +445,9 @@ public: | |||
|         return is_bigint; | ||||
|     } | ||||
| 
 | ||||
|     ThrowCompletionOr<Value> get_value_from_buffer(size_t byte_index, ArrayBuffer::Order order, bool is_little_endian = true) const override { return viewed_array_buffer()->template get_value<T>(byte_index, true, order, is_little_endian); } | ||||
|     ThrowCompletionOr<void> set_value_in_buffer(size_t byte_index, Value value, ArrayBuffer::Order order, bool is_little_endian = true) override { return viewed_array_buffer()->template set_value<T>(byte_index, value, true, order, is_little_endian); } | ||||
|     ThrowCompletionOr<Value> get_modify_set_value_in_buffer(size_t byte_index, Value value, ReadWriteModifyFunction operation, bool is_little_endian = true) override { return viewed_array_buffer()->template get_modify_set_value<T>(byte_index, value, move(operation), is_little_endian); } | ||||
|     Value get_value_from_buffer(size_t byte_index, ArrayBuffer::Order order, bool is_little_endian = true) const override { return viewed_array_buffer()->template get_value<T>(byte_index, true, order, is_little_endian); } | ||||
|     void set_value_in_buffer(size_t byte_index, Value value, ArrayBuffer::Order order, bool is_little_endian = true) override { return viewed_array_buffer()->template set_value<T>(byte_index, value, true, order, is_little_endian); } | ||||
|     Value get_modify_set_value_in_buffer(size_t byte_index, Value value, ReadWriteModifyFunction operation, bool is_little_endian = true) override { return viewed_array_buffer()->template get_modify_set_value<T>(byte_index, value, move(operation), is_little_endian); } | ||||
| 
 | ||||
| protected: | ||||
|     TypedArray(Object& prototype, IntrinsicConstructor intrinsic_constructor, u32 array_length, ArrayBuffer& array_buffer) | ||||
|  |  | |||
|  | @ -416,10 +416,10 @@ JS_DEFINE_NATIVE_FUNCTION(TypedArrayPrototype::copy_within) | |||
|         // k. Repeat, while countBytes > 0,
 | ||||
|         for (; count_bytes > 0; --count_bytes) { | ||||
|             // i. Let value be GetValueFromBuffer(buffer, fromByteIndex, Uint8, true, Unordered).
 | ||||
|             auto value = MUST_OR_THROW_OOM(buffer->get_value<u8>(from_byte_index, true, ArrayBuffer::Order::Unordered)); | ||||
|             auto value = buffer->get_value<u8>(from_byte_index, true, ArrayBuffer::Order::Unordered); | ||||
| 
 | ||||
|             // ii. Perform SetValueInBuffer(buffer, toByteIndex, Uint8, value, true, Unordered).
 | ||||
|             MUST_OR_THROW_OOM(buffer->set_value<u8>(to_byte_index, value, true, ArrayBuffer::Order::Unordered)); | ||||
|             buffer->set_value<u8>(to_byte_index, value, true, ArrayBuffer::Order::Unordered); | ||||
| 
 | ||||
|             // iii. Set fromByteIndex to fromByteIndex + direction.
 | ||||
|             from_byte_index += direction; | ||||
|  | @ -1232,9 +1232,9 @@ static ThrowCompletionOr<void> set_typed_array_from_typed_array(VM& vm, TypedArr | |||
|         // a. Repeat, while targetByteIndex < limit,
 | ||||
|         while (target_byte_index < limit) { | ||||
|             // i. Let value be GetValueFromBuffer(srcBuffer, srcByteIndex, srcType, true, Unordered).
 | ||||
|             auto value = MUST_OR_THROW_OOM(source.get_value_from_buffer(source_byte_index, ArrayBuffer::Unordered)); | ||||
|             auto value = source.get_value_from_buffer(source_byte_index, ArrayBuffer::Unordered); | ||||
|             // ii. Perform SetValueInBuffer(targetBuffer, targetByteIndex, targetType, value, true, Unordered).
 | ||||
|             MUST_OR_THROW_OOM(target.set_value_in_buffer(target_byte_index, value, ArrayBuffer::Unordered)); | ||||
|             target.set_value_in_buffer(target_byte_index, value, ArrayBuffer::Unordered); | ||||
|             // iii. Set srcByteIndex to srcByteIndex + srcElementSize.
 | ||||
|             source_byte_index += source_element_size; | ||||
|             // iv. Set targetByteIndex to targetByteIndex + targetElementSize.
 | ||||
|  | @ -1460,10 +1460,10 @@ JS_DEFINE_NATIVE_FUNCTION(TypedArrayPrototype::slice) | |||
|             // ix. Repeat, while targetByteIndex < limit,
 | ||||
|             for (; target_byte_index < limit.value(); ++source_byte_index, ++target_byte_index) { | ||||
|                 // 1. Let value be GetValueFromBuffer(srcBuffer, srcByteIndex, Uint8, true, Unordered).
 | ||||
|                 auto value = MUST_OR_THROW_OOM(source_buffer.get_value<u8>(source_byte_index.value(), true, ArrayBuffer::Unordered)); | ||||
|                 auto value = source_buffer.get_value<u8>(source_byte_index.value(), true, ArrayBuffer::Unordered); | ||||
| 
 | ||||
|                 // 2. Perform SetValueInBuffer(targetBuffer, targetByteIndex, Uint8, value, true, Unordered).
 | ||||
|                 MUST_OR_THROW_OOM(target_buffer.set_value<u8>(target_byte_index, value, true, ArrayBuffer::Unordered)); | ||||
|                 target_buffer.set_value<u8>(target_byte_index, value, true, ArrayBuffer::Unordered); | ||||
| 
 | ||||
|                 // 3. Set srcByteIndex to srcByteIndex + 1.
 | ||||
|                 // 4. Set targetByteIndex to targetByteIndex + 1.
 | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 Andreas Kling
						Andreas Kling