1
Fork 0
mirror of https://github.com/RGBCube/serenity synced 2025-05-31 12:48:10 +00:00

LibJS+LibWeb: Track SharedArrayBuffers' shared state

ArrayBuffer no longer stores a plain ByteBuffer internally, but a
DataBlock instead, which encapsulated the ByteBuffer together with
information if it is shared or not.
This commit is contained in:
Tobias Soppa 2023-09-11 10:35:03 +02:00 committed by Andrew Kaster
parent 67e07fa4e2
commit 9267e24741
6 changed files with 81 additions and 35 deletions

View file

@ -309,7 +309,7 @@ private:
auto data_copy = TRY(JS::create_byte_data_block(m_vm, size));
// 4. Perform CopyDataBlockBytes(dataCopy, 0, value.[[ArrayBufferData]], 0, size).
JS::copy_data_block_bytes(data_copy, 0, array_buffer.buffer(), 0, size);
JS::copy_data_block_bytes(data_copy.buffer(), 0, array_buffer.buffer(), 0, size);
// FIXME: 5. If value has an [[ArrayBufferMaxByteLength]] internal slot, then set serialized to { [[Type]]: "ResizableArrayBuffer",
// [[ArrayBufferData]]: dataCopy, [[ArrayBufferByteLength]]: size, [[ArrayBufferMaxByteLength]]: value.[[ArrayBufferMaxByteLength]] }.
@ -318,7 +318,7 @@ private:
// 6. Otherwise, set serialized to { [[Type]]: "ArrayBuffer", [[ArrayBufferData]]: dataCopy, [[ArrayBufferByteLength]]: size }.
else {
vector.append(ValueTag::ArrayBuffer);
TRY(serialize_bytes(vector, data_copy.bytes()));
TRY(serialize_bytes(vector, data_copy.buffer().bytes()));
}
}
return {};