Factor out operator analysis and simplify output
This commit is contained in:
@@ -5,6 +5,8 @@ use wasm_ast::{
|
||||
visit::{Driver, Visitor},
|
||||
};
|
||||
|
||||
use super::operator::{bin_symbol_of, cmp_symbol_of};
|
||||
|
||||
struct Visit {
|
||||
result: BTreeSet<(&'static str, &'static str)>,
|
||||
}
|
||||
@@ -29,7 +31,7 @@ impl Visitor for Visit {
|
||||
}
|
||||
|
||||
fn visit_bin_op(&mut self, v: &BinOp) {
|
||||
if v.op.as_operator().is_some() {
|
||||
if bin_symbol_of(v.op).is_some() {
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -39,7 +41,7 @@ impl Visitor for Visit {
|
||||
}
|
||||
|
||||
fn visit_cmp_op(&mut self, v: &CmpOp) {
|
||||
if v.op.as_operator().is_some() {
|
||||
if cmp_symbol_of(v.op).is_some() {
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
@@ -1,2 +1,3 @@
|
||||
pub mod localize;
|
||||
pub mod memory;
|
||||
pub mod operator;
|
||||
|
||||
@@ -0,0 +1,30 @@
|
||||
use wasm_ast::node::{BinOpType, CmpOpType};
|
||||
|
||||
pub fn bin_symbol_of(op: BinOpType) -> Option<&'static str> {
|
||||
let result = match op {
|
||||
BinOpType::Add_I32 | BinOpType::Add_I64 | BinOpType::Add_FN => "+",
|
||||
BinOpType::Sub_I32 | BinOpType::Sub_I64 | BinOpType::Sub_FN => "-",
|
||||
BinOpType::Mul_I32 | BinOpType::Mul_I64 | BinOpType::Mul_FN => "*",
|
||||
BinOpType::DivS_I32 | BinOpType::DivS_I64 | BinOpType::Div_FN => "/",
|
||||
BinOpType::RemS_I32 | BinOpType::RemU_I32 | BinOpType::RemS_I64 | BinOpType::RemU_I64 => {
|
||||
"%"
|
||||
}
|
||||
_ => return None,
|
||||
};
|
||||
|
||||
Some(result)
|
||||
}
|
||||
|
||||
pub fn cmp_symbol_of(op: CmpOpType) -> Option<&'static str> {
|
||||
let result = match op {
|
||||
CmpOpType::Eq_I32 | CmpOpType::Eq_I64 | CmpOpType::Eq_FN => "==",
|
||||
CmpOpType::Ne_I32 | CmpOpType::Ne_I64 | CmpOpType::Ne_FN => "~=",
|
||||
CmpOpType::LtS_I32 | CmpOpType::LtS_I64 | CmpOpType::Lt_FN => "<",
|
||||
CmpOpType::GtS_I32 | CmpOpType::GtS_I64 | CmpOpType::Gt_FN => ">",
|
||||
CmpOpType::LeS_I32 | CmpOpType::LeS_I64 | CmpOpType::Le_FN => "<=",
|
||||
CmpOpType::GeS_I32 | CmpOpType::GeS_I64 | CmpOpType::Ge_FN => ">=",
|
||||
_ => return None,
|
||||
};
|
||||
|
||||
Some(result)
|
||||
}
|
||||
Reference in New Issue
Block a user