mirror of
https://github.com/LadybirdBrowser/ladybird.git
synced 2026-06-28 12:10:28 +00:00
Represent BufferSource and ArrayBufferView as ordinary IDL typedefs over their underlying union types, instead of special casing in the IDL generator. This allows the union conversion/return machinery handle these types consistently with other typedefs, which removes buffer specific paths from the IDL generator. This necessitates changing the WebIDL::BufferSource and WebIDL::ArrayBufferView classes as views over these variants. This replaces the old GC backed BufferableObject wrapper structure and provide convenience helpers to determine things such as the byte length, byte offset, backing buffer, and typed-array APIs.
59 lines
1.7 KiB
C++
59 lines
1.7 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 <LibGC/Ptr.h>
|
|
#include <LibGC/Root.h>
|
|
#include <LibJS/Forward.h>
|
|
#include <LibJS/Runtime/Array.h>
|
|
#include <LibWasm/Types.h>
|
|
#include <LibWeb/Bindings/ExceptionOrUtils.h>
|
|
#include <LibWeb/Bindings/PlatformObject.h>
|
|
#include <LibWeb/WebAssembly/WebAssembly.h>
|
|
|
|
namespace Web::Bindings {
|
|
|
|
enum class ImportExportKind : u8;
|
|
|
|
}
|
|
|
|
namespace Web::WebAssembly {
|
|
|
|
// FIXME: This should really be generated by the IDL generator.
|
|
struct ModuleImportDescriptor {
|
|
String module;
|
|
String name;
|
|
Bindings::ImportExportKind kind;
|
|
};
|
|
|
|
struct ModuleExportDescriptor {
|
|
String name;
|
|
Bindings::ImportExportKind kind;
|
|
};
|
|
|
|
class Module : public Bindings::PlatformObject {
|
|
WEB_PLATFORM_OBJECT(Module, Bindings::PlatformObject);
|
|
GC_DECLARE_ALLOCATOR(Module);
|
|
|
|
public:
|
|
static WebIDL::ExceptionOr<GC::Ref<Module>> construct_impl(JS::Realm&, WebIDL::BufferSource bytes);
|
|
static WebIDL::ExceptionOr<Vector<ModuleImportDescriptor>> imports(JS::VM&, GC::Ref<Module>);
|
|
static WebIDL::ExceptionOr<Vector<ModuleExportDescriptor>> exports(JS::VM&, GC::Ref<Module>);
|
|
static WebIDL::ExceptionOr<GC::RootVector<GC::Ref<JS::ArrayBuffer>>> custom_sections(JS::VM&, GC::Ref<Module>, String section_name);
|
|
|
|
NonnullRefPtr<Detail::CompiledWebAssemblyModule> compiled_module() const { return m_compiled_module; }
|
|
|
|
private:
|
|
Module(JS::Realm&, NonnullRefPtr<Detail::CompiledWebAssemblyModule>);
|
|
|
|
virtual void initialize(JS::Realm&) override;
|
|
|
|
NonnullRefPtr<Detail::CompiledWebAssemblyModule> m_compiled_module;
|
|
};
|
|
|
|
}
|