Add pop_many
to reduce redundancy
This commit is contained in:
parent
5ad07b930c
commit
891851bcb8
@ -150,6 +150,10 @@ impl Stacked {
|
|||||||
self.stack.pop().unwrap()
|
self.stack.pop().unwrap()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fn pop_many(&mut self, len: usize) -> Vec<Expression> {
|
||||||
|
self.stack.split_off(self.stack.len() - len)
|
||||||
|
}
|
||||||
|
|
||||||
fn push(&mut self, value: Expression) {
|
fn push(&mut self, value: Expression) {
|
||||||
self.stack.push(value);
|
self.stack.push(value);
|
||||||
}
|
}
|
||||||
@ -342,7 +346,7 @@ impl<'a> Builder<'a> {
|
|||||||
|
|
||||||
fn gen_return(&mut self, stat: &mut Vec<Statement>) {
|
fn gen_return(&mut self, stat: &mut Vec<Statement>) {
|
||||||
let num = self.num_result as usize;
|
let num = self.num_result as usize;
|
||||||
let list = self.data.stack.split_off(self.data.stack.len() - num);
|
let list = self.data.pop_many(num);
|
||||||
|
|
||||||
self.data.gen_leak_pending(stat);
|
self.data.gen_leak_pending(stat);
|
||||||
|
|
||||||
@ -351,11 +355,10 @@ impl<'a> Builder<'a> {
|
|||||||
|
|
||||||
fn gen_call(&mut self, func: u32, stat: &mut Vec<Statement>) {
|
fn gen_call(&mut self, func: u32, stat: &mut Vec<Statement>) {
|
||||||
let arity = self.other.arity_of(func as usize);
|
let arity = self.other.arity_of(func as usize);
|
||||||
let len = self.data.stack.len();
|
let param_list = self.data.pop_many(arity.num_param as usize);
|
||||||
|
|
||||||
let first = u32::try_from(len).unwrap();
|
let first = u32::try_from(self.data.stack.len()).unwrap();
|
||||||
let result = first..first + arity.num_result;
|
let result = first..first + arity.num_result;
|
||||||
let param_list = self.data.stack.split_off(len - arity.num_param as usize);
|
|
||||||
|
|
||||||
self.data.push_recall(arity.num_result);
|
self.data.push_recall(arity.num_result);
|
||||||
self.data.gen_leak_pending(stat);
|
self.data.gen_leak_pending(stat);
|
||||||
@ -370,10 +373,9 @@ impl<'a> Builder<'a> {
|
|||||||
fn gen_call_indirect(&mut self, typ: u32, table: u8, stat: &mut Vec<Statement>) {
|
fn gen_call_indirect(&mut self, typ: u32, table: u8, stat: &mut Vec<Statement>) {
|
||||||
let arity = self.get_type_of(typ);
|
let arity = self.get_type_of(typ);
|
||||||
let index = self.data.pop();
|
let index = self.data.pop();
|
||||||
let len = self.data.stack.len();
|
let param_list = self.data.pop_many(arity.num_param as usize);
|
||||||
|
|
||||||
let param_list = self.data.stack.split_off(len - arity.num_param as usize);
|
let first = u32::try_from(self.data.stack.len()).unwrap();
|
||||||
let first = u32::try_from(len).unwrap();
|
|
||||||
let result = first..first + arity.num_result;
|
let result = first..first + arity.num_result;
|
||||||
|
|
||||||
self.data.push_recall(arity.num_result);
|
self.data.push_recall(arity.num_result);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user