Re-structure and decouple AST from generator
This commit is contained in:
@@ -0,0 +1,60 @@
|
||||
use std::collections::BTreeSet;
|
||||
|
||||
use wasm_ast::{
|
||||
node::{AnyBinOp, AnyCmpOp, AnyLoad, AnyStore, AnyUnOp, Function},
|
||||
visit::{Driver, Visitor},
|
||||
};
|
||||
|
||||
struct Visit {
|
||||
result: BTreeSet<(&'static str, &'static str)>,
|
||||
}
|
||||
|
||||
impl Visitor for Visit {
|
||||
fn visit_any_load(&mut self, v: &AnyLoad) {
|
||||
let name = v.op.as_name();
|
||||
|
||||
self.result.insert(("load", name));
|
||||
}
|
||||
|
||||
fn visit_any_store(&mut self, v: &AnyStore) {
|
||||
let name = v.op.as_name();
|
||||
|
||||
self.result.insert(("store", name));
|
||||
}
|
||||
|
||||
fn visit_any_unop(&mut self, v: &AnyUnOp) {
|
||||
let name = v.op.as_name();
|
||||
|
||||
self.result.insert(name);
|
||||
}
|
||||
|
||||
fn visit_any_binop(&mut self, v: &AnyBinOp) {
|
||||
if v.op.as_operator().is_some() {
|
||||
return;
|
||||
}
|
||||
|
||||
let name = v.op.as_name();
|
||||
|
||||
self.result.insert(name);
|
||||
}
|
||||
|
||||
fn visit_any_cmpop(&mut self, v: &AnyCmpOp) {
|
||||
if v.op.as_operator().is_some() {
|
||||
return;
|
||||
}
|
||||
|
||||
let name = v.op.as_name();
|
||||
|
||||
self.result.insert(name);
|
||||
}
|
||||
}
|
||||
|
||||
pub fn visit(func: &Function) -> BTreeSet<(&'static str, &'static str)> {
|
||||
let mut visit = Visit {
|
||||
result: BTreeSet::new(),
|
||||
};
|
||||
|
||||
func.accept(&mut visit);
|
||||
|
||||
visit.result
|
||||
}
|
||||
@@ -0,0 +1,38 @@
|
||||
use std::collections::BTreeSet;
|
||||
|
||||
use wasm_ast::{
|
||||
node::{AnyLoad, AnyStore, Function, MemoryGrow, MemorySize},
|
||||
visit::{Driver, Visitor},
|
||||
};
|
||||
|
||||
struct Visit {
|
||||
result: BTreeSet<u8>,
|
||||
}
|
||||
|
||||
impl Visitor for Visit {
|
||||
fn visit_any_store(&mut self, _: &AnyStore) {
|
||||
self.result.insert(0);
|
||||
}
|
||||
|
||||
fn visit_any_load(&mut self, _: &AnyLoad) {
|
||||
self.result.insert(0);
|
||||
}
|
||||
|
||||
fn visit_memory_size(&mut self, m: &MemorySize) {
|
||||
self.result.insert(m.memory);
|
||||
}
|
||||
|
||||
fn visit_memory_grow(&mut self, m: &MemoryGrow) {
|
||||
self.result.insert(m.memory);
|
||||
}
|
||||
}
|
||||
|
||||
pub fn visit(func: &Function) -> BTreeSet<u8> {
|
||||
let mut visit = Visit {
|
||||
result: BTreeSet::new(),
|
||||
};
|
||||
|
||||
func.accept(&mut visit);
|
||||
|
||||
visit.result
|
||||
}
|
||||
@@ -0,0 +1,2 @@
|
||||
pub mod localize;
|
||||
pub mod memory;
|
||||
Reference in New Issue
Block a user