mirror of
https://github.com/LadybirdBrowser/ladybird
synced 2026-05-11 09:27:00 +02:00
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.
57 lines
1.8 KiB
C++
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;
|
|
};
|
|
|
|
}
|