| // Copyright 2015 the V8 project authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #ifndef V8_WASM_WASM_JS_H_ |
| #define V8_WASM_WASM_JS_H_ |
| |
| #if !V8_ENABLE_WEBASSEMBLY |
| #error This header should only be included if WebAssembly is enabled. |
| #endif // !V8_ENABLE_WEBASSEMBLY |
| |
| #include <memory> |
| |
| #include "src/common/globals.h" |
| |
| namespace v8 { |
| class Value; |
| template <typename T> |
| class FunctionCallbackInfo; |
| class WasmStreaming; |
| } // namespace v8 |
| |
| namespace v8::internal { |
| |
| namespace wasm { |
| class CompilationResultResolver; |
| class StreamingDecoder; |
| |
| V8_EXPORT_PRIVATE std::unique_ptr<WasmStreaming> StartStreamingForTesting( |
| Isolate*, std::shared_ptr<wasm::CompilationResultResolver>); |
| |
| #define WASM_JS_EXTERNAL_REFERENCE_LIST(V) \ |
| V(WebAssemblyCompile) \ |
| V(WebAssemblyException) \ |
| V(WebAssemblyExceptionGetArg) \ |
| V(WebAssemblyExceptionIs) \ |
| V(WebAssemblyGlobal) \ |
| V(WebAssemblyGlobalGetValue) \ |
| V(WebAssemblyGlobalSetValue) \ |
| V(WebAssemblyGlobalValueOf) \ |
| V(WebAssemblyInstance) \ |
| V(WebAssemblyInstanceGetExports) \ |
| V(WebAssemblyInstantiate) \ |
| V(WebAssemblyMemory) \ |
| V(WebAssemblyMemoryMapDescriptor) \ |
| V(WebAssemblyMemoryGetBuffer) \ |
| V(WebAssemblyMemoryGrow) \ |
| V(WebAssemblyMemoryMapDescriptorMap) \ |
| V(WebAssemblyMemoryMapDescriptorUnmap) \ |
| V(WebAssemblyMemoryToFixedLengthBuffer) \ |
| V(WebAssemblyMemoryToResizableBuffer) \ |
| V(WebAssemblyModule) \ |
| V(WebAssemblyModuleCustomSections) \ |
| V(WebAssemblyModuleExports) \ |
| V(WebAssemblyModuleImports) \ |
| V(WebAssemblyTable) \ |
| V(WebAssemblyTableGet) \ |
| V(WebAssemblyTableGetLength) \ |
| V(WebAssemblyTableGrow) \ |
| V(WebAssemblyTableSet) \ |
| V(WebAssemblyTag) \ |
| V(WebAssemblySuspending) \ |
| V(WebAssemblyValidate) |
| |
| #define DECL_WASM_JS_EXTERNAL_REFERENCE(Name) \ |
| V8_EXPORT_PRIVATE void Name(const v8::FunctionCallbackInfo<v8::Value>& info); |
| WASM_JS_EXTERNAL_REFERENCE_LIST(DECL_WASM_JS_EXTERNAL_REFERENCE) |
| #undef DECL_WASM_JS_EXTERNAL_REFERENCE |
| } // namespace wasm |
| |
| // Exposes a WebAssembly API to JavaScript through the V8 API. |
| class WasmJs { |
| public: |
| // Creates all API objects before the snapshot is serialized. |
| V8_EXPORT_PRIVATE static void PrepareForSnapshot(Isolate* isolate); |
| |
| // Finalizes API object setup: |
| // - installs the WebAssembly object on the global object (depending on |
| // flags), and |
| // - creates API objects and properties that depend on runtime-enabled flags. |
| V8_EXPORT_PRIVATE static void Install(Isolate* isolate); |
| |
| // Extend the API based on late-enabled features, mostly from origin trial. |
| V8_EXPORT_PRIVATE static void InstallConditionalFeatures( |
| Isolate* isolate, DirectHandle<NativeContext> context); |
| |
| private: |
| V8_EXPORT_PRIVATE static void InstallModule( |
| Isolate* isolate, DirectHandle<JSObject> webassembly); |
| |
| V8_EXPORT_PRIVATE static void InstallMemoryControl( |
| Isolate* isolate, DirectHandle<NativeContext> context, |
| DirectHandle<JSObject> webassembly); |
| |
| V8_EXPORT_PRIVATE static bool InstallTypeReflection( |
| Isolate* isolate, DirectHandle<NativeContext> context, |
| DirectHandle<JSObject> webassembly); |
| |
| V8_EXPORT_PRIVATE static bool InstallJSPromiseIntegration( |
| Isolate* isolate, DirectHandle<NativeContext> context, |
| DirectHandle<JSObject> webassembly); |
| |
| V8_EXPORT_PRIVATE static void InstallResizableBufferIntegration( |
| Isolate* isolate, DirectHandle<NativeContext> context, |
| DirectHandle<JSObject> webassembly); |
| }; |
| |
| } // namespace v8::internal |
| |
| #endif // V8_WASM_WASM_JS_H_ |