use super::trap::TrapInformation;
use crate::entity::PrimaryMap;
use crate::lib::std::vec::Vec;
use crate::{CompiledFunctionUnwindInfo, FunctionAddressMap};
use crate::{
CustomSection, FunctionIndex, LocalFunctionIndex, Relocation, SectionIndex, SignatureIndex,
};
use rkyv::{Archive, Deserialize as RkyvDeserialize, Serialize as RkyvSerialize};
#[cfg(feature = "enable-serde")]
use serde::{Deserialize, Serialize};
#[cfg_attr(feature = "enable-serde", derive(Deserialize, Serialize))]
#[derive(RkyvSerialize, RkyvDeserialize, Archive, Debug, Clone, PartialEq, Eq, Default)]
#[archive_attr(derive(rkyv::CheckBytes))]
pub struct CompiledFunctionFrameInfo {
pub traps: Vec<TrapInformation>,
pub address_map: FunctionAddressMap,
}
#[cfg_attr(feature = "enable-serde", derive(Deserialize, Serialize))]
#[derive(RkyvSerialize, RkyvDeserialize, Archive, Debug, Clone, PartialEq, Eq)]
#[archive_attr(derive(rkyv::CheckBytes))]
pub struct FunctionBody {
#[cfg_attr(feature = "enable-serde", serde(with = "serde_bytes"))]
pub body: Vec<u8>,
pub unwind_info: Option<CompiledFunctionUnwindInfo>,
}
#[cfg_attr(feature = "enable-serde", derive(Deserialize, Serialize))]
#[derive(RkyvSerialize, RkyvDeserialize, Archive, Debug, Clone, PartialEq, Eq)]
#[archive_attr(derive(rkyv::CheckBytes))]
pub struct CompiledFunction {
pub body: FunctionBody,
pub relocations: Vec<Relocation>,
pub frame_info: CompiledFunctionFrameInfo,
}
pub type Functions = PrimaryMap<LocalFunctionIndex, CompiledFunction>;
pub type CustomSections = PrimaryMap<SectionIndex, CustomSection>;
#[cfg_attr(feature = "enable-serde", derive(Deserialize, Serialize))]
#[derive(
RkyvSerialize, RkyvDeserialize, Archive, rkyv::CheckBytes, Debug, PartialEq, Eq, Clone,
)]
#[archive(as = "Self")]
pub struct Dwarf {
pub eh_frame: SectionIndex,
}
impl Dwarf {
pub fn new(eh_frame: SectionIndex) -> Self {
Self { eh_frame }
}
}
#[cfg_attr(feature = "enable-serde", derive(Deserialize, Serialize))]
#[derive(Debug, PartialEq, Eq)]
pub struct Compilation {
pub functions: Functions,
pub custom_sections: CustomSections,
pub function_call_trampolines: PrimaryMap<SignatureIndex, FunctionBody>,
pub dynamic_function_trampolines: PrimaryMap<FunctionIndex, FunctionBody>,
pub debug: Option<Dwarf>,
}