diff --git a/wasm-ast/src/factory.rs b/wasm-ast/src/factory.rs index 778f84b..232cb84 100644 --- a/wasm-ast/src/factory.rs +++ b/wasm-ast/src/factory.rs @@ -280,7 +280,7 @@ impl<'a> Factory<'a> { } }; - self.target.stack = old.stack.split_last(num_param); + self.target.stack = old.stack.split_last(num_param, num_result); old.stack.push_temporary(num_result); diff --git a/wasm-ast/src/stack.rs b/wasm-ast/src/stack.rs index d76b734..dfe97f1 100644 --- a/wasm-ast/src/stack.rs +++ b/wasm-ast/src/stack.rs @@ -46,13 +46,13 @@ impl Stack { self.var_list.len() } - pub fn split_last(&mut self, len: usize) -> Self { - let desired = self.len() - len; + pub fn split_last(&mut self, num_param: usize, num_result: usize) -> Self { + let desired = self.len() - num_param; let var_list = self.var_list.split_off(desired); Self { var_list, - capacity: self.capacity, + capacity: self.capacity.max(desired + num_result), previous: self.previous + desired, } }