blob: 73134148b0870a85698c2fad9742285481b8ccbc [file] [log] [blame] [edit]
// 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_