Rename Intermediate
to FuncData
This commit is contained in:
parent
78aa47cdd6
commit
b8e40fe740
@ -1,7 +1,7 @@
|
|||||||
use std::collections::BTreeSet;
|
use std::collections::BTreeSet;
|
||||||
|
|
||||||
use wasm_ast::{
|
use wasm_ast::{
|
||||||
node::{BinOp, CmpOp, Intermediate, LoadAt, StoreAt, UnOp},
|
node::{BinOp, CmpOp, FuncData, LoadAt, StoreAt, UnOp},
|
||||||
visit::{Driver, Visitor},
|
visit::{Driver, Visitor},
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -51,12 +51,12 @@ impl Visitor for Visit {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn visit(ir: &Intermediate) -> BTreeSet<(&'static str, &'static str)> {
|
pub fn visit(ast: &FuncData) -> BTreeSet<(&'static str, &'static str)> {
|
||||||
let mut visit = Visit {
|
let mut visit = Visit {
|
||||||
result: BTreeSet::new(),
|
result: BTreeSet::new(),
|
||||||
};
|
};
|
||||||
|
|
||||||
ir.accept(&mut visit);
|
ast.accept(&mut visit);
|
||||||
|
|
||||||
visit.result
|
visit.result
|
||||||
}
|
}
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
use std::collections::BTreeSet;
|
use std::collections::BTreeSet;
|
||||||
|
|
||||||
use wasm_ast::{
|
use wasm_ast::{
|
||||||
node::{Intermediate, LoadAt, MemoryGrow, MemorySize, StoreAt},
|
node::{FuncData, LoadAt, MemoryGrow, MemorySize, StoreAt},
|
||||||
visit::{Driver, Visitor},
|
visit::{Driver, Visitor},
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -27,12 +27,12 @@ impl Visitor for Visit {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn visit(ir: &Intermediate) -> BTreeSet<usize> {
|
pub fn visit(ast: &FuncData) -> BTreeSet<usize> {
|
||||||
let mut visit = Visit {
|
let mut visit = Visit {
|
||||||
result: BTreeSet::new(),
|
result: BTreeSet::new(),
|
||||||
};
|
};
|
||||||
|
|
||||||
ir.accept(&mut visit);
|
ast.accept(&mut visit);
|
||||||
|
|
||||||
visit.result
|
visit.result
|
||||||
}
|
}
|
||||||
|
@ -5,7 +5,7 @@ use std::{
|
|||||||
|
|
||||||
use parity_wasm::elements::ValueType;
|
use parity_wasm::elements::ValueType;
|
||||||
use wasm_ast::node::{
|
use wasm_ast::node::{
|
||||||
Backward, Br, BrIf, BrTable, Call, CallIndirect, Forward, If, Intermediate, Return, SetGlobal,
|
Backward, Br, BrIf, BrTable, Call, CallIndirect, Forward, FuncData, If, Return, SetGlobal,
|
||||||
SetLocal, SetTemporary, Statement, StoreAt, Terminator,
|
SetLocal, SetTemporary, Statement, StoreAt, Terminator,
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -256,16 +256,16 @@ impl Driver for Statement {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fn write_parameter_list(ir: &Intermediate, w: &mut dyn Write) -> Result<()> {
|
fn write_parameter_list(ast: &FuncData, w: &mut dyn Write) -> Result<()> {
|
||||||
write!(w, "function(")?;
|
write!(w, "function(")?;
|
||||||
write_ascending("param", 0..ir.num_param, w)?;
|
write_ascending("param", 0..ast.num_param, w)?;
|
||||||
write!(w, ")")
|
write!(w, ")")
|
||||||
}
|
}
|
||||||
|
|
||||||
fn write_variable_list(ir: &Intermediate, w: &mut dyn Write) -> Result<()> {
|
fn write_variable_list(ast: &FuncData, w: &mut dyn Write) -> Result<()> {
|
||||||
let mut total = 0;
|
let mut total = 0;
|
||||||
|
|
||||||
for data in &ir.local_data {
|
for data in &ast.local_data {
|
||||||
let range = total..total + usize::try_from(data.count()).unwrap();
|
let range = total..total + usize::try_from(data.count()).unwrap();
|
||||||
let typed = if data.value_type() == ValueType::I64 {
|
let typed = if data.value_type() == ValueType::I64 {
|
||||||
"0LL"
|
"0LL"
|
||||||
@ -283,16 +283,16 @@ fn write_variable_list(ir: &Intermediate, w: &mut dyn Write) -> Result<()> {
|
|||||||
write!(w, " ")?;
|
write!(w, " ")?;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ir.num_stack != 0 {
|
if ast.num_stack != 0 {
|
||||||
write!(w, "local ")?;
|
write!(w, "local ")?;
|
||||||
write_ascending("reg", 0..ir.num_stack, w)?;
|
write_ascending("reg", 0..ast.num_stack, w)?;
|
||||||
write!(w, " ")?;
|
write!(w, " ")?;
|
||||||
}
|
}
|
||||||
|
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
|
||||||
impl Driver for Intermediate {
|
impl Driver for FuncData {
|
||||||
fn write(&self, mng: &mut Manager, w: &mut dyn Write) -> Result<()> {
|
fn write(&self, mng: &mut Manager, w: &mut dyn Write) -> Result<()> {
|
||||||
write_parameter_list(self, w)?;
|
write_parameter_list(self, w)?;
|
||||||
write_variable_list(self, w)?;
|
write_variable_list(self, w)?;
|
||||||
|
@ -9,7 +9,7 @@ use parity_wasm::elements::{
|
|||||||
|
|
||||||
use wasm_ast::{
|
use wasm_ast::{
|
||||||
builder::{Builder, TypeInfo},
|
builder::{Builder, TypeInfo},
|
||||||
node::Intermediate,
|
node::FuncData,
|
||||||
};
|
};
|
||||||
|
|
||||||
use crate::{
|
use crate::{
|
||||||
@ -218,7 +218,7 @@ fn write_data_list(wasm: &Module, type_info: &TypeInfo, w: &mut dyn Write) -> Re
|
|||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
|
||||||
fn build_func_list(wasm: &Module, type_info: &TypeInfo) -> Vec<Intermediate> {
|
fn build_func_list(wasm: &Module, type_info: &TypeInfo) -> Vec<FuncData> {
|
||||||
let list = match wasm.code_section() {
|
let list = match wasm.code_section() {
|
||||||
Some(v) => v.bodies(),
|
Some(v) => v.bodies(),
|
||||||
None => return Vec::new(),
|
None => return Vec::new(),
|
||||||
@ -243,7 +243,7 @@ fn write_local_operation(head: &str, tail: &str, w: &mut dyn Write) -> Result<()
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fn write_localize_used(func_list: &[Intermediate], w: &mut dyn Write) -> Result<()> {
|
fn write_localize_used(func_list: &[FuncData], w: &mut dyn Write) -> Result<()> {
|
||||||
let loc_set: BTreeSet<_> = func_list.iter().flat_map(localize::visit).collect();
|
let loc_set: BTreeSet<_> = func_list.iter().flat_map(localize::visit).collect();
|
||||||
|
|
||||||
loc_set
|
loc_set
|
||||||
@ -251,7 +251,7 @@ fn write_localize_used(func_list: &[Intermediate], w: &mut dyn Write) -> Result<
|
|||||||
.try_for_each(|(a, b)| write_local_operation(a, b, w))
|
.try_for_each(|(a, b)| write_local_operation(a, b, w))
|
||||||
}
|
}
|
||||||
|
|
||||||
fn write_memory_used(func_list: &[Intermediate], w: &mut dyn Write) -> Result<Vec<usize>> {
|
fn write_memory_used(func_list: &[FuncData], w: &mut dyn Write) -> Result<Vec<usize>> {
|
||||||
let mem_set: BTreeSet<_> = func_list.iter().flat_map(memory::visit).collect();
|
let mem_set: BTreeSet<_> = func_list.iter().flat_map(memory::visit).collect();
|
||||||
let list: Vec<_> = mem_set.into_iter().collect();
|
let list: Vec<_> = mem_set.into_iter().collect();
|
||||||
|
|
||||||
@ -280,7 +280,7 @@ fn write_func_start(wasm: &Module, index: u32, offset: u32, w: &mut dyn Write) -
|
|||||||
fn write_func_list(
|
fn write_func_list(
|
||||||
wasm: &Module,
|
wasm: &Module,
|
||||||
type_info: &TypeInfo,
|
type_info: &TypeInfo,
|
||||||
func_list: &[Intermediate],
|
func_list: &[FuncData],
|
||||||
w: &mut dyn Write,
|
w: &mut dyn Write,
|
||||||
) -> Result<()> {
|
) -> Result<()> {
|
||||||
let offset = type_info.len_ex().try_into().unwrap();
|
let offset = type_info.len_ex().try_into().unwrap();
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
use std::collections::BTreeSet;
|
use std::collections::BTreeSet;
|
||||||
|
|
||||||
use wasm_ast::{
|
use wasm_ast::{
|
||||||
node::{BinOp, CmpOp, Intermediate, LoadAt, StoreAt, UnOp, Value},
|
node::{BinOp, CmpOp, FuncData, LoadAt, StoreAt, UnOp, Value},
|
||||||
visit::{Driver, Visitor},
|
visit::{Driver, Visitor},
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -62,12 +62,12 @@ impl Visitor for Visit {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn visit(ir: &Intermediate) -> BTreeSet<(&'static str, &'static str)> {
|
pub fn visit(ast: &FuncData) -> BTreeSet<(&'static str, &'static str)> {
|
||||||
let mut visit = Visit {
|
let mut visit = Visit {
|
||||||
result: BTreeSet::new(),
|
result: BTreeSet::new(),
|
||||||
};
|
};
|
||||||
|
|
||||||
ir.accept(&mut visit);
|
ast.accept(&mut visit);
|
||||||
|
|
||||||
visit.result
|
visit.result
|
||||||
}
|
}
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
use std::collections::BTreeSet;
|
use std::collections::BTreeSet;
|
||||||
|
|
||||||
use wasm_ast::{
|
use wasm_ast::{
|
||||||
node::{Intermediate, LoadAt, MemoryGrow, MemorySize, StoreAt},
|
node::{FuncData, LoadAt, MemoryGrow, MemorySize, StoreAt},
|
||||||
visit::{Driver, Visitor},
|
visit::{Driver, Visitor},
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -27,12 +27,12 @@ impl Visitor for Visit {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn visit(ir: &Intermediate) -> BTreeSet<usize> {
|
pub fn visit(ast: &FuncData) -> BTreeSet<usize> {
|
||||||
let mut visit = Visit {
|
let mut visit = Visit {
|
||||||
result: BTreeSet::new(),
|
result: BTreeSet::new(),
|
||||||
};
|
};
|
||||||
|
|
||||||
ir.accept(&mut visit);
|
ast.accept(&mut visit);
|
||||||
|
|
||||||
visit.result
|
visit.result
|
||||||
}
|
}
|
||||||
|
@ -5,7 +5,7 @@ use std::{
|
|||||||
|
|
||||||
use parity_wasm::elements::ValueType;
|
use parity_wasm::elements::ValueType;
|
||||||
use wasm_ast::node::{
|
use wasm_ast::node::{
|
||||||
Backward, Br, BrIf, BrTable, Call, CallIndirect, Forward, If, Intermediate, Return, SetGlobal,
|
Backward, Br, BrIf, BrTable, Call, CallIndirect, Forward, FuncData, If, Return, SetGlobal,
|
||||||
SetLocal, SetTemporary, Statement, StoreAt, Terminator,
|
SetLocal, SetTemporary, Statement, StoreAt, Terminator,
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -263,16 +263,16 @@ impl Driver for Statement {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fn write_parameter_list(ir: &Intermediate, w: &mut dyn Write) -> Result<()> {
|
fn write_parameter_list(ast: &FuncData, w: &mut dyn Write) -> Result<()> {
|
||||||
write!(w, "function(")?;
|
write!(w, "function(")?;
|
||||||
write_ascending("param", 0..ir.num_param, w)?;
|
write_ascending("param", 0..ast.num_param, w)?;
|
||||||
write!(w, ")")
|
write!(w, ")")
|
||||||
}
|
}
|
||||||
|
|
||||||
fn write_variable_list(ir: &Intermediate, w: &mut dyn Write) -> Result<()> {
|
fn write_variable_list(ast: &FuncData, w: &mut dyn Write) -> Result<()> {
|
||||||
let mut total = 0;
|
let mut total = 0;
|
||||||
|
|
||||||
for data in &ir.local_data {
|
for data in &ast.local_data {
|
||||||
let range = total..total + usize::try_from(data.count()).unwrap();
|
let range = total..total + usize::try_from(data.count()).unwrap();
|
||||||
let zero = if data.value_type() == ValueType::I64 {
|
let zero = if data.value_type() == ValueType::I64 {
|
||||||
"num_K_ZERO "
|
"num_K_ZERO "
|
||||||
@ -289,16 +289,16 @@ fn write_variable_list(ir: &Intermediate, w: &mut dyn Write) -> Result<()> {
|
|||||||
write!(w, " ")?;
|
write!(w, " ")?;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ir.num_stack != 0 {
|
if ast.num_stack != 0 {
|
||||||
write!(w, "local ")?;
|
write!(w, "local ")?;
|
||||||
write_ascending("reg", 0..ir.num_stack, w)?;
|
write_ascending("reg", 0..ast.num_stack, w)?;
|
||||||
write!(w, " ")?;
|
write!(w, " ")?;
|
||||||
}
|
}
|
||||||
|
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
|
||||||
impl Driver for Intermediate {
|
impl Driver for FuncData {
|
||||||
fn write(&self, mng: &mut Manager, w: &mut dyn Write) -> Result<()> {
|
fn write(&self, mng: &mut Manager, w: &mut dyn Write) -> Result<()> {
|
||||||
write_parameter_list(self, w)?;
|
write_parameter_list(self, w)?;
|
||||||
write_variable_list(self, w)?;
|
write_variable_list(self, w)?;
|
||||||
|
@ -9,7 +9,7 @@ use parity_wasm::elements::{
|
|||||||
|
|
||||||
use wasm_ast::{
|
use wasm_ast::{
|
||||||
builder::{Builder, TypeInfo},
|
builder::{Builder, TypeInfo},
|
||||||
node::Intermediate,
|
node::FuncData,
|
||||||
};
|
};
|
||||||
|
|
||||||
use crate::{
|
use crate::{
|
||||||
@ -217,7 +217,7 @@ fn write_data_list(wasm: &Module, type_info: &TypeInfo, w: &mut dyn Write) -> Re
|
|||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
|
||||||
fn build_func_list(wasm: &Module, type_info: &TypeInfo) -> Vec<Intermediate> {
|
fn build_func_list(wasm: &Module, type_info: &TypeInfo) -> Vec<FuncData> {
|
||||||
let list = match wasm.code_section() {
|
let list = match wasm.code_section() {
|
||||||
Some(v) => v.bodies(),
|
Some(v) => v.bodies(),
|
||||||
None => return Vec::new(),
|
None => return Vec::new(),
|
||||||
@ -241,7 +241,7 @@ fn write_local_operation(head: &str, tail: &str, w: &mut dyn Write) -> Result<()
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fn write_localize_used(func_list: &[Intermediate], w: &mut dyn Write) -> Result<()> {
|
fn write_localize_used(func_list: &[FuncData], w: &mut dyn Write) -> Result<()> {
|
||||||
let loc_set: BTreeSet<_> = func_list.iter().flat_map(localize::visit).collect();
|
let loc_set: BTreeSet<_> = func_list.iter().flat_map(localize::visit).collect();
|
||||||
|
|
||||||
loc_set
|
loc_set
|
||||||
@ -249,7 +249,7 @@ fn write_localize_used(func_list: &[Intermediate], w: &mut dyn Write) -> Result<
|
|||||||
.try_for_each(|(a, b)| write_local_operation(a, b, w))
|
.try_for_each(|(a, b)| write_local_operation(a, b, w))
|
||||||
}
|
}
|
||||||
|
|
||||||
fn write_memory_used(func_list: &[Intermediate], w: &mut dyn Write) -> Result<Vec<usize>> {
|
fn write_memory_used(func_list: &[FuncData], w: &mut dyn Write) -> Result<Vec<usize>> {
|
||||||
let mem_set: BTreeSet<_> = func_list.iter().flat_map(memory::visit).collect();
|
let mem_set: BTreeSet<_> = func_list.iter().flat_map(memory::visit).collect();
|
||||||
let list: Vec<_> = mem_set.into_iter().collect();
|
let list: Vec<_> = mem_set.into_iter().collect();
|
||||||
|
|
||||||
@ -278,7 +278,7 @@ fn write_func_start(wasm: &Module, index: u32, offset: u32, w: &mut dyn Write) -
|
|||||||
fn write_func_list(
|
fn write_func_list(
|
||||||
wasm: &Module,
|
wasm: &Module,
|
||||||
type_info: &TypeInfo,
|
type_info: &TypeInfo,
|
||||||
func_list: &[Intermediate],
|
func_list: &[FuncData],
|
||||||
w: &mut dyn Write,
|
w: &mut dyn Write,
|
||||||
) -> Result<()> {
|
) -> Result<()> {
|
||||||
let offset = type_info.len_ex().try_into().unwrap();
|
let offset = type_info.len_ex().try_into().unwrap();
|
||||||
|
@ -5,7 +5,7 @@ use parity_wasm::elements::{
|
|||||||
|
|
||||||
use crate::node::{
|
use crate::node::{
|
||||||
Backward, BinOp, BinOpType, Br, BrIf, BrTable, Call, CallIndirect, CmpOp, CmpOpType,
|
Backward, BinOp, BinOpType, Br, BrIf, BrTable, Call, CallIndirect, CmpOp, CmpOpType,
|
||||||
Expression, Forward, GetGlobal, GetLocal, GetTemporary, If, Intermediate, LoadAt, LoadType,
|
Expression, Forward, FuncData, GetGlobal, GetLocal, GetTemporary, If, LoadAt, LoadType,
|
||||||
MemoryGrow, MemorySize, Return, Select, SetGlobal, SetLocal, SetTemporary, Statement, StoreAt,
|
MemoryGrow, MemorySize, Return, Select, SetGlobal, SetLocal, SetTemporary, Statement, StoreAt,
|
||||||
StoreType, Terminator, UnOp, UnOpType, Value,
|
StoreType, Terminator, UnOp, UnOpType, Value,
|
||||||
};
|
};
|
||||||
@ -328,10 +328,10 @@ impl<'a> Builder<'a> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
#[must_use]
|
#[must_use]
|
||||||
pub fn build_anonymous(mut self, list: &[Instruction]) -> Intermediate {
|
pub fn build_anonymous(mut self, list: &[Instruction]) -> FuncData {
|
||||||
let data = self.build_stat_list(list, 1);
|
let data = self.build_stat_list(list, 1);
|
||||||
|
|
||||||
Intermediate {
|
FuncData {
|
||||||
local_data: Vec::new(),
|
local_data: Vec::new(),
|
||||||
num_param: 0,
|
num_param: 0,
|
||||||
num_stack: data.num_stack,
|
num_stack: data.num_stack,
|
||||||
@ -340,11 +340,11 @@ impl<'a> Builder<'a> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
#[must_use]
|
#[must_use]
|
||||||
pub fn build_indexed(mut self, index: usize, func: &FuncBody) -> Intermediate {
|
pub fn build_indexed(mut self, index: usize, func: &FuncBody) -> FuncData {
|
||||||
let arity = &self.type_info.rel_arity_of(self.type_info.len_ex() + index);
|
let arity = &self.type_info.rel_arity_of(self.type_info.len_ex() + index);
|
||||||
let data = self.build_stat_list(func.code().elements(), arity.num_result);
|
let data = self.build_stat_list(func.code().elements(), arity.num_result);
|
||||||
|
|
||||||
Intermediate {
|
FuncData {
|
||||||
local_data: func.locals().to_vec(),
|
local_data: func.locals().to_vec(),
|
||||||
num_param: arity.num_param,
|
num_param: arity.num_param,
|
||||||
num_stack: data.num_stack,
|
num_stack: data.num_stack,
|
||||||
|
@ -751,7 +751,7 @@ pub enum Statement {
|
|||||||
StoreAt(StoreAt),
|
StoreAt(StoreAt),
|
||||||
}
|
}
|
||||||
|
|
||||||
pub struct Intermediate {
|
pub struct FuncData {
|
||||||
pub local_data: Vec<Local>,
|
pub local_data: Vec<Local>,
|
||||||
pub num_param: usize,
|
pub num_param: usize,
|
||||||
pub num_stack: usize,
|
pub num_stack: usize,
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
use crate::node::{
|
use crate::node::{
|
||||||
Backward, BinOp, Br, BrIf, BrTable, Call, CallIndirect, CmpOp, Expression, Forward, GetGlobal,
|
Backward, BinOp, Br, BrIf, BrTable, Call, CallIndirect, CmpOp, Expression, Forward, FuncData,
|
||||||
GetLocal, GetTemporary, If, Intermediate, LoadAt, MemoryGrow, MemorySize, Return, Select,
|
GetGlobal, GetLocal, GetTemporary, If, LoadAt, MemoryGrow, MemorySize, Return, Select,
|
||||||
SetGlobal, SetLocal, SetTemporary, Statement, StoreAt, Terminator, UnOp, Value,
|
SetGlobal, SetLocal, SetTemporary, Statement, StoreAt, Terminator, UnOp, Value,
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -328,7 +328,7 @@ impl<T: Visitor> Driver<T> for Statement {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
impl<T: Visitor> Driver<T> for Intermediate {
|
impl<T: Visitor> Driver<T> for FuncData {
|
||||||
fn accept(&self, visitor: &mut T) {
|
fn accept(&self, visitor: &mut T) {
|
||||||
self.code.accept(visitor);
|
self.code.accept(visitor);
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user