#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
#include <memory>
#include "src/common/globals.h"
#include "src/wasm/wasm-features.h"
namespace v8 {
class Value;
template <typename T>
class FunctionCallbackInfo;
class WasmStreaming;
}
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
}
class WasmJs {
public:
V8_EXPORT_PRIVATE static void PrepareForSnapshot(Isolate* isolate);
V8_EXPORT_PRIVATE static void Install(Isolate* isolate);
V8_EXPORT_PRIVATE static void InstallConditionalFeatures(
Isolate* isolate, DirectHandle<NativeContext> context);
V8_EXPORT_PRIVATE static wasm::CompileTimeImports
CompileTimeImportsFromArgument(DirectHandle<Object> arg, Isolate*,
wasm::WasmEnabledFeatures);
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);
};
}
#endif