mirror of
https://github.com/RGBCube/serenity
synced 2025-06-01 08:28:11 +00:00
LibWeb: Set a detach key for ArrayBuffers returned from WASM
As required by the specification: `Set buffer.[[ArrayBufferDetachKey]] to "WebAssembly.Memory".`
This commit is contained in:
parent
a64089092f
commit
f5a978c1aa
3 changed files with 13 additions and 1 deletions
|
@ -37,4 +37,10 @@ ArrayBuffer::~ArrayBuffer()
|
|||
{
|
||||
}
|
||||
|
||||
void ArrayBuffer::visit_edges(Cell::Visitor& visitor)
|
||||
{
|
||||
Object::visit_edges(visitor);
|
||||
visitor.visit(m_detach_key);
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -28,10 +28,14 @@ public:
|
|||
const ByteBuffer& buffer() const { return buffer_impl(); }
|
||||
|
||||
Value detach_key() const { return m_detach_key; }
|
||||
void set_detach_key(Value detach_key) { m_detach_key = detach_key; }
|
||||
|
||||
void detach_buffer() { m_buffer = Empty {}; }
|
||||
bool is_detached() const { return m_buffer.has<Empty>(); }
|
||||
|
||||
private:
|
||||
virtual void visit_edges(Visitor&) override;
|
||||
|
||||
ByteBuffer& buffer_impl()
|
||||
{
|
||||
ByteBuffer* ptr { nullptr };
|
||||
|
|
|
@ -441,7 +441,9 @@ JS_DEFINE_NATIVE_GETTER(WebAssemblyMemoryObject::buffer)
|
|||
if (!memory)
|
||||
return JS::js_undefined();
|
||||
|
||||
return JS::ArrayBuffer::create(global_object, &memory->data());
|
||||
auto array_buffer = JS::ArrayBuffer::create(global_object, &memory->data());
|
||||
array_buffer->set_detach_key(JS::js_string(vm, "WebAssembly.Memory"));
|
||||
return array_buffer;
|
||||
}
|
||||
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue