Files
ladybird/Libraries/LibWeb/WebAssembly/Memory.h
Shannon Booth 5adfd1c43a LibWeb/Bindings: Generate struct definitions from IDL dictionaries
Previously we were inconsistent by generating code for enum definitions
but not generating code for dictionaries. With future changes to the
IDL generator to expose helpers to convert to and from IDL values
this produced circular depdendencies. To solve this problem, also
generate the dictionary definitions in bindings headers.
2026-05-09 10:49:49 +02:00

57 lines
1.8 KiB
C++

/*
* Copyright (c) 2021, Ali Mohammad Pur <mpfard@serenityos.org>
* Copyright (c) 2023, Tim Flynn <trflynn89@serenityos.org>
*
* SPDX-License-Identifier: BSD-2-Clause
*/
#pragma once
#include <AK/Optional.h>
#include <LibGC/Ptr.h>
#include <LibJS/Forward.h>
#include <LibJS/Runtime/ArrayBuffer.h>
#include <LibWasm/AbstractMachine/AbstractMachine.h>
#include <LibWeb/Bindings/ExceptionOrUtils.h>
#include <LibWeb/Bindings/PlatformObject.h>
namespace Web::WebAssembly {
class Memory : public Bindings::PlatformObject {
WEB_PLATFORM_OBJECT(Memory, Bindings::PlatformObject);
GC_DECLARE_ALLOCATOR(Memory);
enum class Shared {
No,
Yes,
};
public:
static WebIDL::ExceptionOr<GC::Ref<Memory>> construct_impl(JS::Realm&, Bindings::MemoryDescriptor& descriptor);
JS::ThrowCompletionOr<u32> grow(u32 delta);
WebIDL::ExceptionOr<GC::Ref<JS::ArrayBuffer>> to_fixed_length_buffer();
WebIDL::ExceptionOr<GC::Ref<JS::ArrayBuffer>> to_resizable_buffer();
WebIDL::ExceptionOr<GC::Ref<JS::ArrayBuffer>> buffer() const;
Wasm::MemoryAddress address() const { return m_address; }
GC::Ptr<JS::ArrayBuffer> buffer_object() const { return m_buffer; }
private:
Memory(JS::Realm&, Wasm::MemoryAddress, Shared shared);
virtual void initialize(JS::Realm&) override;
virtual void visit_edges(Visitor&) override;
static void refresh_the_memory_buffer(JS::VM&, JS::Realm&, Wasm::MemoryAddress);
static GC::Ref<JS::ArrayBuffer> create_a_fixed_length_memory_buffer(JS::VM&, JS::Realm&, Wasm::MemoryAddress, Shared shared);
static JS::ThrowCompletionOr<GC::Ref<JS::ArrayBuffer>> create_a_resizable_memory_buffer(JS::VM&, JS::Realm&, Wasm::MemoryAddress, Shared shared, size_t max_size);
Wasm::MemoryAddress m_address;
Shared m_shared { Shared::No };
mutable GC::Ptr<JS::ArrayBuffer> m_buffer;
};
}