use crate::component::{ComponentTranslation, ComponentTypesBuilder, UnsafeIntrinsic};
use crate::error::Result;
use crate::{Abi, CompiledFunctionBody, FuncKey, Tunables};
pub trait ComponentCompiler: Send + Sync {
fn compile_trampoline(
&self,
component: &ComponentTranslation,
types: &ComponentTypesBuilder,
key: FuncKey,
abi: Abi,
tunables: &Tunables,
symbol: &str,
) -> Result<CompiledFunctionBody>;
fn compile_intrinsic(
&self,
tunables: &Tunables,
component: &ComponentTranslation,
types: &ComponentTypesBuilder,
intrinsic: UnsafeIntrinsic,
abi: Abi,
symbol: &str,
) -> Result<CompiledFunctionBody>;
}