use wasmtime_environ::WasmType;
#[derive(Clone, Eq, PartialEq)]
enum Base {
FP,
SP,
}
#[derive(Clone)]
pub(crate) struct LocalSlot {
pub offset: u32,
pub ty: WasmType,
base: Base,
}
impl LocalSlot {
pub fn new(ty: WasmType, offset: u32) -> Self {
Self {
ty,
offset,
base: Base::SP,
}
}
pub fn i32(offset: u32) -> Self {
Self {
ty: WasmType::I32,
offset,
base: Base::SP,
}
}
pub fn i64(offset: u32) -> Self {
Self {
ty: WasmType::I64,
offset,
base: Base::SP,
}
}
pub fn stack_arg(ty: WasmType, offset: u32) -> Self {
Self {
ty,
offset,
base: Base::FP,
}
}
pub fn addressed_from_sp(&self) -> bool {
self.base == Base::SP
}
}