#if !V8_ENABLE_WEBASSEMBLY
#error This header should only be included if WebAssembly is enabled.
#endif
#ifndef V8_WASM_MODULE_DECODER_H_
#define V8_WASM_MODULE_DECODER_H_
#include <memory>
#include "src/common/globals.h"
#include "src/logging/metrics.h"
#include "src/wasm/function-body-decoder.h"
#include "src/wasm/wasm-constants.h"
#include "src/wasm/wasm-features.h"
#include "src/wasm/wasm-module.h"
#include "src/wasm/wasm-result.h"
namespace v8 {
namespace internal {
class Counters;
namespace wasm {
struct CompilationEnv;
inline bool IsValidSectionCode(uint8_t byte) { … }
V8_EXPORT_PRIVATE const char* SectionName(SectionCode code);
ModuleResult;
using FunctionResult = Result<std::unique_ptr<WasmFunction>>;
using FunctionOffsets = std::vector<std::pair<int, int>>;
using FunctionOffsetsResult = Result<FunctionOffsets>;
struct AsmJsOffsetEntry { … };
struct AsmJsOffsetFunctionEntries { … };
struct AsmJsOffsets { … };
AsmJsOffsetsResult;
class DecodedNameSection { … };
enum class DecodingMethod { … };
V8_EXPORT_PRIVATE ModuleResult DecodeWasmModule(
WasmEnabledFeatures enabled_features,
base::Vector<const uint8_t> wire_bytes, bool validate_functions,
ModuleOrigin origin, Counters* counters,
std::shared_ptr<metrics::Recorder> metrics_recorder,
v8::metrics::Recorder::ContextId context_id,
DecodingMethod decoding_method);
V8_EXPORT_PRIVATE ModuleResult
DecodeWasmModule(WasmEnabledFeatures enabled_features,
base::Vector<const uint8_t> wire_bytes,
bool validate_functions, ModuleOrigin origin);
V8_EXPORT_PRIVATE ModuleResult DecodeWasmModuleForDisassembler(
base::Vector<const uint8_t> wire_bytes, ITracer* tracer);
V8_EXPORT_PRIVATE Result<const FunctionSig*> DecodeWasmSignatureForTesting(
WasmEnabledFeatures enabled_features, Zone* zone,
base::Vector<const uint8_t> bytes);
V8_EXPORT_PRIVATE FunctionResult DecodeWasmFunctionForTesting(
WasmEnabledFeatures enabled, Zone* zone, ModuleWireBytes wire_bytes,
const WasmModule* module, base::Vector<const uint8_t> function_bytes);
V8_EXPORT_PRIVATE ConstantExpression DecodeWasmInitExprForTesting(
WasmEnabledFeatures enabled_features, base::Vector<const uint8_t> bytes,
ValueType expected);
struct CustomSectionOffset { … };
V8_EXPORT_PRIVATE std::vector<CustomSectionOffset> DecodeCustomSections(
base::Vector<const uint8_t> wire_bytes);
AsmJsOffsetsResult DecodeAsmJsOffsets(
base::Vector<const uint8_t> encoded_offsets);
void DecodeFunctionNames(base::Vector<const uint8_t> wire_bytes,
NameMap& names);
V8_EXPORT_PRIVATE WasmError ValidateFunctions(
const WasmModule*, WasmEnabledFeatures enabled_features,
base::Vector<const uint8_t> wire_bytes, std::function<bool(int)> filter);
WasmError GetWasmErrorWithName(base::Vector<const uint8_t> wire_bytes,
int func_index, const WasmModule* module,
WasmError error);
class ModuleDecoderImpl;
class ModuleDecoder { … };
}
}
}
#endif