Re-structure and decouple AST from generator

This commit is contained in:
Rerumu
2022-02-08 17:39:14 -05:00
parent 9d2d8aa69b
commit 22ea8910ad
32 changed files with 753 additions and 481 deletions
+60
View File
@@ -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
}
+38
View File
@@ -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
}
+2
View File
@@ -0,0 +1,2 @@
pub mod localize;
pub mod memory;