use crate::prelude::*;
use crate::{DefinedFuncIndex, FilePos, FuncIndex, Module, PrimaryMap, StackMap};
use core::fmt;
use core::ops::Range;
use core::str;
use serde_derive::{Deserialize, Serialize};
use wasmtime_types::ModuleInternedTypeIndex;
#[derive(Serialize, Deserialize)]
pub struct CompiledFunctionInfo {
pub wasm_func_info: WasmFunctionInfo,
pub wasm_func_loc: FunctionLoc,
pub array_to_wasm_trampoline: Option<FunctionLoc>,
}
#[derive(Serialize, Deserialize, Default)]
#[allow(missing_docs)]
pub struct WasmFunctionInfo {
pub start_srcloc: FilePos,
pub stack_maps: Box<[StackMapInformation]>,
}
#[derive(Copy, Clone, Debug, Serialize, Deserialize)]
pub struct FunctionLoc {
pub start: u32,
pub length: u32,
}
#[derive(Serialize, Deserialize, Debug)]
pub struct StackMapInformation {
pub code_offset: u32,
pub stack_map: StackMap,
}
#[derive(Serialize, Deserialize)]
pub struct CompiledModuleInfo {
pub module: Module,
pub funcs: PrimaryMap<DefinedFuncIndex, CompiledFunctionInfo>,
pub func_names: Vec<FunctionName>,
pub wasm_to_array_trampolines: Vec<(ModuleInternedTypeIndex, FunctionLoc)>,
pub meta: Metadata,
}
#[derive(Serialize, Deserialize)]
pub struct FunctionName {
pub idx: FuncIndex,
pub offset: u32,
pub len: u32,
}
#[derive(Serialize, Deserialize)]
pub struct Metadata {
pub native_debug_info_present: bool,
pub has_unparsed_debuginfo: bool,
pub code_section_offset: u64,
pub has_wasm_debuginfo: bool,
pub dwarf: Vec<(u8, Range<u64>)>,
}
#[derive(Serialize, Deserialize, Hash, Eq, PartialEq, Debug)]
pub enum FlagValue<'a> {
Enum(&'a str),
Num(u8),
Bool(bool),
}
impl fmt::Display for FlagValue<'_> {
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
match self {
Self::Enum(v) => v.fmt(f),
Self::Num(v) => v.fmt(f),
Self::Bool(v) => v.fmt(f),
}
}
}
pub enum ObjectKind {
Module,
Component,
}