wasmi/src/types.rs

60 lines
1.3 KiB
Rust
Raw Normal View History

2018-01-18 13:39:14 +00:00
use parity_wasm::elements::{FunctionType, ValueType as EValueType};
2018-01-18 12:54:31 +00:00
#[derive(Debug, Clone, PartialEq)]
pub struct Signature {
2018-01-18 13:39:14 +00:00
params: Vec<ValueType>,
return_type: Option<ValueType>,
2018-01-18 12:54:31 +00:00
}
impl Signature {
pub fn new(params: &[ValueType], return_type: Option<ValueType>) -> Signature {
Signature {
2018-01-18 13:39:14 +00:00
params: params.to_vec(),
return_type: return_type,
2018-01-18 12:54:31 +00:00
}
}
pub fn params(&self) -> &[ValueType] {
2018-01-18 13:39:14 +00:00
&self.params
2018-01-18 12:54:31 +00:00
}
pub fn return_type(&self) -> Option<ValueType> {
2018-01-18 13:39:14 +00:00
self.return_type
2018-01-18 12:54:31 +00:00
}
2018-01-18 13:39:14 +00:00
pub(crate) fn from_elements(func_type: FunctionType) -> Signature {
Signature {
params: func_type.params().iter().cloned().map(ValueType::from_elements).collect(),
return_type: func_type.return_type().map(ValueType::from_elements),
}
}
}
#[derive(Copy, Clone, Debug, PartialEq, Eq)]
pub enum ValueType {
I32,
I64,
F32,
F64,
2018-01-18 12:54:31 +00:00
}
2018-01-18 13:39:14 +00:00
impl ValueType {
pub(crate) fn from_elements(value_type: EValueType) -> ValueType {
match value_type {
EValueType::I32 => ValueType::I32,
EValueType::I64 => ValueType::I64,
EValueType::F32 => ValueType::F32,
EValueType::F64 => ValueType::F64,
}
}
pub(crate) fn into_elements(self) -> EValueType {
match self {
ValueType::I32 => EValueType::I32,
ValueType::I64 => EValueType::I64,
ValueType::F32 => EValueType::F32,
ValueType::F64 => EValueType::F64,
}
2018-01-18 12:54:31 +00:00
}
}