Add memory index support in analysis
This commit is contained in:
parent
460363bff1
commit
5622aa661e
@ -1,7 +1,10 @@
|
|||||||
use std::collections::BTreeSet;
|
use std::collections::BTreeSet;
|
||||||
|
|
||||||
use wasm_ast::{
|
use wasm_ast::{
|
||||||
node::{BinOp, CmpOp, FuncData, LoadAt, MemoryGrow, MemorySize, StoreAt, UnOp},
|
node::{
|
||||||
|
BinOp, CmpOp, FuncData, LoadAt, MemoryCopy, MemoryFill, MemoryGrow, MemorySize, StoreAt,
|
||||||
|
UnOp,
|
||||||
|
},
|
||||||
visit::{Driver, Visitor},
|
visit::{Driver, Visitor},
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -16,14 +19,14 @@ impl Visitor for Visit {
|
|||||||
fn visit_load_at(&mut self, v: &LoadAt) {
|
fn visit_load_at(&mut self, v: &LoadAt) {
|
||||||
let name = v.load_type().as_name();
|
let name = v.load_type().as_name();
|
||||||
|
|
||||||
self.memory_set.insert(0);
|
self.memory_set.insert(v.memory());
|
||||||
self.local_set.insert(("load", name));
|
self.local_set.insert(("load", name));
|
||||||
}
|
}
|
||||||
|
|
||||||
fn visit_store_at(&mut self, v: &StoreAt) {
|
fn visit_store_at(&mut self, v: &StoreAt) {
|
||||||
let name = v.store_type().as_name();
|
let name = v.store_type().as_name();
|
||||||
|
|
||||||
self.memory_set.insert(0);
|
self.memory_set.insert(v.memory());
|
||||||
self.local_set.insert(("store", name));
|
self.local_set.insert(("store", name));
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -60,6 +63,15 @@ impl Visitor for Visit {
|
|||||||
fn visit_memory_grow(&mut self, m: &MemoryGrow) {
|
fn visit_memory_grow(&mut self, m: &MemoryGrow) {
|
||||||
self.memory_set.insert(m.memory());
|
self.memory_set.insert(m.memory());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fn visit_memory_copy(&mut self, m: &MemoryCopy) {
|
||||||
|
self.memory_set.insert(m.destination().memory());
|
||||||
|
self.memory_set.insert(m.source().memory());
|
||||||
|
}
|
||||||
|
|
||||||
|
fn visit_memory_fill(&mut self, m: &MemoryFill) {
|
||||||
|
self.memory_set.insert(m.destination().memory());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn visit(ast: &FuncData) -> (BTreeSet<(&'static str, &'static str)>, BTreeSet<usize>) {
|
pub fn visit(ast: &FuncData) -> (BTreeSet<(&'static str, &'static str)>, BTreeSet<usize>) {
|
||||||
|
@ -1,7 +1,10 @@
|
|||||||
use std::collections::BTreeSet;
|
use std::collections::BTreeSet;
|
||||||
|
|
||||||
use wasm_ast::{
|
use wasm_ast::{
|
||||||
node::{BinOp, CmpOp, FuncData, LoadAt, MemoryGrow, MemorySize, StoreAt, UnOp, Value},
|
node::{
|
||||||
|
BinOp, CmpOp, FuncData, LoadAt, MemoryCopy, MemoryFill, MemoryGrow, MemorySize, StoreAt,
|
||||||
|
UnOp, Value,
|
||||||
|
},
|
||||||
visit::{Driver, Visitor},
|
visit::{Driver, Visitor},
|
||||||
};
|
};
|
||||||
use wasmparser::ValType;
|
use wasmparser::ValType;
|
||||||
@ -17,14 +20,14 @@ impl Visitor for Visit {
|
|||||||
fn visit_load_at(&mut self, v: &LoadAt) {
|
fn visit_load_at(&mut self, v: &LoadAt) {
|
||||||
let name = v.load_type().as_name();
|
let name = v.load_type().as_name();
|
||||||
|
|
||||||
self.memory_set.insert(0);
|
self.memory_set.insert(v.memory());
|
||||||
self.local_set.insert(("load", name));
|
self.local_set.insert(("load", name));
|
||||||
}
|
}
|
||||||
|
|
||||||
fn visit_store_at(&mut self, v: &StoreAt) {
|
fn visit_store_at(&mut self, v: &StoreAt) {
|
||||||
let name = v.store_type().as_name();
|
let name = v.store_type().as_name();
|
||||||
|
|
||||||
self.memory_set.insert(0);
|
self.memory_set.insert(v.memory());
|
||||||
self.local_set.insert(("store", name));
|
self.local_set.insert(("store", name));
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -72,6 +75,15 @@ impl Visitor for Visit {
|
|||||||
fn visit_memory_grow(&mut self, m: &MemoryGrow) {
|
fn visit_memory_grow(&mut self, m: &MemoryGrow) {
|
||||||
self.memory_set.insert(m.memory());
|
self.memory_set.insert(m.memory());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fn visit_memory_copy(&mut self, m: &MemoryCopy) {
|
||||||
|
self.memory_set.insert(m.destination().memory());
|
||||||
|
self.memory_set.insert(m.source().memory());
|
||||||
|
}
|
||||||
|
|
||||||
|
fn visit_memory_fill(&mut self, m: &MemoryFill) {
|
||||||
|
self.memory_set.insert(m.destination().memory());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn visit(ast: &FuncData) -> (BTreeSet<(&'static str, &'static str)>, BTreeSet<usize>) {
|
pub fn visit(ast: &FuncData) -> (BTreeSet<(&'static str, &'static str)>, BTreeSet<usize>) {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user