use crate::polkavm::context::pointer::Pointer;
#[derive(Debug, Clone, Copy)]
pub enum Return<'ctx> {
None,
Primitive {
pointer: Pointer<'ctx>,
},
Compound {
pointer: Pointer<'ctx>,
size: usize,
},
}
impl<'ctx> Return<'ctx> {
pub fn none() -> Self {
Self::None
}
pub fn primitive(pointer: Pointer<'ctx>) -> Self {
Self::Primitive { pointer }
}
pub fn compound(pointer: Pointer<'ctx>, size: usize) -> Self {
Self::Compound { pointer, size }
}
pub fn return_pointer(&self) -> Option<Pointer<'ctx>> {
match self {
Return::None => None,
Return::Primitive { pointer } => Some(pointer.to_owned()),
Return::Compound { pointer, .. } => Some(pointer.to_owned()),
}
}
pub fn return_data_size(&self) -> usize {
revive_common::BYTE_LENGTH_WORD
* match self {
Self::None => 0,
Self::Primitive { .. } => 1,
Self::Compound { size, .. } => *size,
}
}
}