1
Fork 0
mirror of https://github.com/RGBCube/serenity synced 2025-05-20 17:55:08 +00:00

LibJS: Rename TypedArray element get and set methods

This renames IntegerIndexedElementGet to TypedArrayGetElement, and
IntegerIndexedElementSet to TypedArraySetElement.

This also renames the indexedPosition variable inside these method
definitions to byteIndexInBuffer.

These are part of a couple editorial changes in the ECMA-262 spec. See:
03e4410
a1a4d48

The remainder of the changes in those commits apply to the resizable
ArrayBuffer spec, which is not implemented in LibJS as of this commit.
This commit is contained in:
Timothy Flynn 2023-12-24 15:02:48 -05:00 committed by Andreas Kling
parent 4f32392426
commit 98cdf36fb0
3 changed files with 48 additions and 49 deletions

View file

@ -23,7 +23,7 @@ namespace JS::Bytecode {
// NOTE: This function assumes that the index is valid within the TypedArray,
// and that the TypedArray is not detached.
template<typename T>
inline Value fast_integer_indexed_element_get(TypedArrayBase& typed_array, u32 index)
inline Value fast_typed_array_get_element(TypedArrayBase& typed_array, u32 index)
{
Checked<u32> offset_into_array_buffer = index;
offset_into_array_buffer *= sizeof(T);
@ -41,7 +41,7 @@ inline Value fast_integer_indexed_element_get(TypedArrayBase& typed_array, u32 i
// NOTE: This function assumes that the index is valid within the TypedArray,
// and that the TypedArray is not detached.
template<typename T>
inline void fast_integer_indexed_element_set(TypedArrayBase& typed_array, u32 index, T value)
inline void fast_typed_array_set_element(TypedArrayBase& typed_array, u32 index, T value)
{
Checked<u32> offset_into_array_buffer = index;
offset_into_array_buffer *= sizeof(T);
@ -117,23 +117,22 @@ ThrowCompletionOr<Value> get_by_value(VM& vm, Value base_value, Value property_k
// For typed arrays:
if (object.is_typed_array()) {
auto& typed_array = static_cast<TypedArrayBase&>(object);
if (!typed_array.viewed_array_buffer()->is_detached() && index < typed_array.array_length()) {
switch (typed_array.kind()) {
case TypedArrayBase::Kind::Uint8Array:
return fast_integer_indexed_element_get<u8>(typed_array, index);
return fast_typed_array_get_element<u8>(typed_array, index);
case TypedArrayBase::Kind::Uint16Array:
return fast_integer_indexed_element_get<u16>(typed_array, index);
return fast_typed_array_get_element<u16>(typed_array, index);
case TypedArrayBase::Kind::Uint32Array:
return fast_integer_indexed_element_get<u32>(typed_array, index);
return fast_typed_array_get_element<u32>(typed_array, index);
case TypedArrayBase::Kind::Int8Array:
return fast_integer_indexed_element_get<i8>(typed_array, index);
return fast_typed_array_get_element<i8>(typed_array, index);
case TypedArrayBase::Kind::Int16Array:
return fast_integer_indexed_element_get<i16>(typed_array, index);
return fast_typed_array_get_element<i16>(typed_array, index);
case TypedArrayBase::Kind::Int32Array:
return fast_integer_indexed_element_get<i32>(typed_array, index);
return fast_typed_array_get_element<i32>(typed_array, index);
case TypedArrayBase::Kind::Uint8ClampedArray:
return fast_integer_indexed_element_get<u8>(typed_array, index);
return fast_typed_array_get_element<u8>(typed_array, index);
default:
// FIXME: Support more TypedArray kinds.
break;
@ -144,7 +143,7 @@ ThrowCompletionOr<Value> get_by_value(VM& vm, Value base_value, Value property_k
switch (typed_array.kind()) {
#define __JS_ENUMERATE(ClassName, snake_name, PrototypeName, ConstructorName, Type) \
case TypedArrayBase::Kind::ClassName: \
return integer_indexed_element_get<Type>(typed_array, canonical_index);
return typed_array_get_element<Type>(typed_array, canonical_index);
JS_ENUMERATE_TYPED_ARRAYS
#undef __JS_ENUMERATE
}
@ -399,25 +398,25 @@ ThrowCompletionOr<void> put_by_value(VM& vm, Value base, Value property_key_valu
if (!typed_array.viewed_array_buffer()->is_detached() && index < typed_array.array_length() && value.is_int32()) {
switch (typed_array.kind()) {
case TypedArrayBase::Kind::Uint8Array:
fast_integer_indexed_element_set<u8>(typed_array, index, static_cast<u8>(value.as_i32()));
fast_typed_array_set_element<u8>(typed_array, index, static_cast<u8>(value.as_i32()));
return {};
case TypedArrayBase::Kind::Uint16Array:
fast_integer_indexed_element_set<u16>(typed_array, index, static_cast<u16>(value.as_i32()));
fast_typed_array_set_element<u16>(typed_array, index, static_cast<u16>(value.as_i32()));
return {};
case TypedArrayBase::Kind::Uint32Array:
fast_integer_indexed_element_set<u32>(typed_array, index, static_cast<u32>(value.as_i32()));
fast_typed_array_set_element<u32>(typed_array, index, static_cast<u32>(value.as_i32()));
return {};
case TypedArrayBase::Kind::Int8Array:
fast_integer_indexed_element_set<i8>(typed_array, index, static_cast<i8>(value.as_i32()));
fast_typed_array_set_element<i8>(typed_array, index, static_cast<i8>(value.as_i32()));
return {};
case TypedArrayBase::Kind::Int16Array:
fast_integer_indexed_element_set<i16>(typed_array, index, static_cast<i16>(value.as_i32()));
fast_typed_array_set_element<i16>(typed_array, index, static_cast<i16>(value.as_i32()));
return {};
case TypedArrayBase::Kind::Int32Array:
fast_integer_indexed_element_set<i32>(typed_array, index, value.as_i32());
fast_typed_array_set_element<i32>(typed_array, index, value.as_i32());
return {};
case TypedArrayBase::Kind::Uint8ClampedArray:
fast_integer_indexed_element_set<u8>(typed_array, index, clamp(value.as_i32(), 0, 255));
fast_typed_array_set_element<u8>(typed_array, index, clamp(value.as_i32(), 0, 255));
return {};
default:
// FIXME: Support more TypedArray kinds.
@ -428,7 +427,7 @@ ThrowCompletionOr<void> put_by_value(VM& vm, Value base, Value property_key_valu
switch (typed_array.kind()) {
#define __JS_ENUMERATE(ClassName, snake_name, PrototypeName, ConstructorName, Type) \
case TypedArrayBase::Kind::ClassName: \
return integer_indexed_element_set<Type>(typed_array, canonical_index, value);
return typed_array_set_element<Type>(typed_array, canonical_index, value);
JS_ENUMERATE_TYPED_ARRAYS
#undef __JS_ENUMERATE
}