2022-06-26 01:51:52 -04:00

37 lines
942 B
Rust

use wasm_ast::node::{BinOpType, CmpOpType};
pub trait AsSymbol {
fn as_symbol(&self) -> Option<&'static str>;
}
impl AsSymbol for BinOpType {
fn as_symbol(&self) -> Option<&'static str> {
let result = match self {
Self::Add_F32 | Self::Add_F64 => "+",
Self::Sub_F32 | Self::Sub_F64 => "-",
Self::Mul_F32 | Self::Mul_F64 => "*",
Self::Div_F32 | Self::Div_F64 => "/",
Self::RemU_I32 => "%",
_ => return None,
};
Some(result)
}
}
impl AsSymbol for CmpOpType {
fn as_symbol(&self) -> Option<&'static str> {
let result = match self {
Self::Eq_I32 | Self::Eq_F32 | Self::Eq_F64 => "==",
Self::Ne_I32 | Self::Ne_F32 | Self::Ne_F64 => "~=",
Self::LtU_I32 | Self::Lt_F32 | Self::Lt_F64 => "<",
Self::GtU_I32 | Self::Gt_F32 | Self::Gt_F64 => ">",
Self::LeU_I32 | Self::Le_F32 | Self::Le_F64 => "<=",
Self::GeU_I32 | Self::Ge_F32 | Self::Ge_F64 => ">=",
_ => return None,
};
Some(result)
}
}