v8
V8 is Google’s open source high-performance JavaScript and WebAssembly engine, written in C++.
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:
49 OwnedBuffer Serialize();
50
54 MemorySpan<const uint8_t> GetWireBytesRef();
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
77 Local<ArrayBuffer> Buffer();
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
99 static MaybeLocal<WasmModuleObject> FromCompiledModule(
100 Isolate* isolate, const CompiledWasmModule&);
101
106 CompiledWasmModule GetCompiledModule();
107
111 static MaybeLocal<WasmModuleObject> Compile(
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
181 void SetMoreFunctionsCanBeSerializedCallback(
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
220 static Local<WasmMemoryMapDescriptor> New(Isolate* isolate,
222
223 private:
224 static void CheckCast(Value* object);
225};
226} // namespace v8
227
228#endif // INCLUDE_V8_WASM_H_
const std::shared_ptr< internal::wasm::NativeModule > native_module_
Definition v8-wasm.h:65
const std::string source_url_
Definition v8-wasm.h:66
const std::string & source_url() const
Definition v8-wasm.h:56
static V8_INLINE WasmMemoryMapDescriptor * Cast(Value *value)
Definition v8-wasm.h:211
static V8_INLINE WasmMemoryObject * Cast(Value *value)
Definition v8-wasm.h:79
static V8_INLINE WasmModuleObject * Cast(Value *value)
Definition v8-wasm.h:114
std::unique_ptr< WasmStreamingImpl > impl_
Definition v8-wasm.h:199
STL namespace.
Definition c-api.cc:87
OwnedBuffer()=default
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:800
#define V8_INLINE
Definition v8config.h:500
std::unique_ptr< ValueMirror > value
std::shared_ptr< const char[]> source_url_