Loading...
Searching...
No Matches
v8-wasm.h
Go to the documentation of this file.
1// Copyright 2021 the V8 project authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5#ifndef INCLUDE_V8_WASM_H_
6#define INCLUDE_V8_WASM_H_
7
8#include <functional>
9#include <memory>
10#include <string>
11
12#include "v8-internal.h" // NOLINT(build/include_directory)
13#include "v8-local-handle.h" // NOLINT(build/include_directory)
14#include "v8-memory-span.h" // NOLINT(build/include_directory)
15#include "v8-object.h" // NOLINT(build/include_directory)
16#include "v8config.h" // NOLINT(build/include_directory)
17
18namespace v8 {
19
20class ArrayBuffer;
21class Promise;
22
23namespace internal {
24namespace wasm {
25class NativeModule;
26class StreamingDecoder;
27} // namespace wasm
28} // namespace internal
29
34 std::unique_ptr<const uint8_t[]> buffer;
35 size_t size = 0;
36 OwnedBuffer(std::unique_ptr<const uint8_t[]> buffer, size_t size)
37 : buffer(std::move(buffer)), size(size) {}
38 OwnedBuffer() = default;
39};
40
41// Wrapper around a compiled WebAssembly module, which is potentially shared by
42// different WasmModuleObjects.
44 public:
50
55
56 const std::string& source_url() const { return source_url_; }
57
58 private:
59 friend class WasmModuleObject;
60 friend class WasmStreaming;
61
62 explicit CompiledWasmModule(std::shared_ptr<internal::wasm::NativeModule>,
63 const char* source_url, size_t url_length);
64
65 const std::shared_ptr<internal::wasm::NativeModule> native_module_;
66 const std::string source_url_;
67};
68
69// An instance of WebAssembly.Memory.
71 public:
72 WasmMemoryObject() = delete;
73
78
80#ifdef V8_ENABLE_CHECKS
81 CheckCast(value);
82#endif
83 return static_cast<WasmMemoryObject*>(value);
84 }
85
86 private:
87 static void CheckCast(Value* object);
88};
89
90// An instance of WebAssembly.Module.
92 public:
93 WasmModuleObject() = delete;
94
100 Isolate* isolate, const CompiledWasmModule&);
101
107
112 Isolate* isolate, MemorySpan<const uint8_t> wire_bytes);
113
115#ifdef V8_ENABLE_CHECKS
116 CheckCast(value);
117#endif
118 return static_cast<WasmModuleObject*>(value);
119 }
120
121 private:
122 static void CheckCast(Value* obj);
123};
124
132 public:
133 static constexpr internal::ExternalPointerTag kManagedTag =
134 internal::kWasmWasmStreamingTag;
135 class WasmStreamingImpl;
136
137 explicit WasmStreaming(std::unique_ptr<WasmStreamingImpl> impl);
138
140
145 void OnBytesReceived(const uint8_t* bytes, size_t size);
146
156 void Finish(bool can_use_compiled_module = true);
157
164 void Abort(MaybeLocal<Value> exception);
165
175 bool SetCompiledModuleBytes(const uint8_t* bytes, size_t size);
176
182 std::function<void(CompiledWasmModule)>);
183
184 /*
185 * Sets the UTF-8 encoded source URL for the {Script} object. This must be
186 * called before {Finish}.
187 */
188 void SetUrl(const char* url, size_t length);
189
195 static std::shared_ptr<WasmStreaming> Unpack(Isolate* isolate,
196 Local<Value> value);
197
198 private:
199 std::unique_ptr<WasmStreamingImpl> impl_;
200};
201
208 public:
210
212#ifdef V8_ENABLE_CHECKS
213 CheckCast(value);
214#endif
215 return static_cast<WasmMemoryMapDescriptor*>(value);
216 }
217
218 using WasmFileDescriptor = int32_t;
219
222
223 private:
224 static void CheckCast(Value* object);
225};
226} // namespace v8
227
228#endif // INCLUDE_V8_WASM_H_
Definition: v8-wasm.h:43
OwnedBuffer Serialize()
MemorySpan< const uint8_t > GetWireBytesRef()
const std::string & source_url() const
Definition: v8-wasm.h:56
Definition: v8-isolate.h:261
Definition: v8-local-handle.h:266
Definition: v8-local-handle.h:632
Definition: v8-memory-span.h:64
Definition: v8-object.h:233
Definition: v8-value.h:32
Definition: v8-wasm.h:207
int32_t WasmFileDescriptor
Definition: v8-wasm.h:218
static Local< WasmMemoryMapDescriptor > New(Isolate *isolate, WasmFileDescriptor fd)
static WasmMemoryMapDescriptor * Cast(Value *value)
Definition: v8-wasm.h:211
Definition: v8-wasm.h:70
static WasmMemoryObject * Cast(Value *value)
Definition: v8-wasm.h:79
Local< ArrayBuffer > Buffer()
Definition: v8-wasm.h:91
static MaybeLocal< WasmModuleObject > Compile(Isolate *isolate, MemorySpan< const uint8_t > wire_bytes)
static MaybeLocal< WasmModuleObject > FromCompiledModule(Isolate *isolate, const CompiledWasmModule &)
CompiledWasmModule GetCompiledModule()
static WasmModuleObject * Cast(Value *value)
Definition: v8-wasm.h:114
Definition: v8-wasm.h:131
WasmStreaming(std::unique_ptr< WasmStreamingImpl > impl)
void Finish(bool can_use_compiled_module=true)
bool SetCompiledModuleBytes(const uint8_t *bytes, size_t size)
static std::shared_ptr< WasmStreaming > Unpack(Isolate *isolate, Local< Value > value)
void SetUrl(const char *url, size_t length)
void SetMoreFunctionsCanBeSerializedCallback(std::function< void(CompiledWasmModule)>)
void Abort(MaybeLocal< Value > exception)
void OnBytesReceived(const uint8_t *bytes, size_t size)
ExternalPointerTag
Definition: v8-internal.h:598
Definition: libplatform.h:15
Definition: v8-wasm.h:33
OwnedBuffer()=default
size_t size
Definition: v8-wasm.h:35
std::unique_ptr< const uint8_t[]> buffer
Definition: v8-wasm.h:34
OwnedBuffer(std::unique_ptr< const uint8_t[]> buffer, size_t size)
Definition: v8-wasm.h:36
#define V8_EXPORT
Definition: v8config.h:793
#define V8_INLINE
Definition: v8config.h:499