@@ -148,11 +148,8 @@ impl<'store, const BUDGETED: bool> Executor<'store, BUDGETED> {
148148 JumpIfZero ( ip) => if self . exec_jump_if_zero ( * ip) { continue ; } ,
149149 JumpIfNonZero ( ip) => if self . exec_jump_if_non_zero ( * ip) { continue ; } ,
150150 DropKeepSmall { base32, keep32, base64, keep64, base128, keep128, base_ref, keep_ref } => {
151- let stack_base = self . cf . stack_base ( ) ;
152- self . store . stack . values . stack_32 . truncate_keep ( ( stack_base. s32 + * base32 as u32 ) as usize , * keep32 as usize ) ;
153- self . store . stack . values . stack_64 . truncate_keep ( ( stack_base. s64 + * base64 as u32 ) as usize , * keep64 as usize ) ;
154- self . store . stack . values . stack_128 . truncate_keep ( ( stack_base. s128 + * base128 as u32 ) as usize , * keep128 as usize ) ;
155- self . store . stack . values . stack_ref . truncate_keep ( ( stack_base. sref + * base_ref as u32 ) as usize , * keep_ref as usize ) ;
151+ let mut base = self . cf . stack_base ( ) ; base. s32 += * base32 as u32 ; base. s64 += * base64 as u32 ; base. s128 += * base128 as u32 ; base. sref += * base_ref as u32 ;
152+ self . store . stack . values . truncate_keep_counts ( base, ValueCounts { c32 : * keep32 as u16 , c64 : * keep64 as u16 , c128 : * keep128 as u16 , cref : * keep_ref as u16 } ) ;
156153 }
157154 DropKeep32 ( base, keep) => self . store . stack . values . stack_32 . truncate_keep ( ( self . cf . stack_base ( ) . s32 + * base as u32 ) as usize , * keep as usize ) ,
158155 DropKeep64 ( base, keep) => self . store . stack . values . stack_64 . truncate_keep ( ( self . cf . stack_base ( ) . s64 + * base as u32 ) as usize , * keep as usize ) ,
@@ -822,9 +819,8 @@ impl<'store, const BUDGETED: bool> Executor<'store, BUDGETED> {
822819 }
823820
824821 fn exec_return ( & mut self ) -> bool {
825- let result_counts = ValueCounts :: from ( self . func . ty . results . iter ( ) ) ;
826- self . store . stack . values . truncate_keep_counts ( self . cf . locals_base , result_counts) ;
827-
822+ let results = ValueCounts :: from_iter ( & self . func . ty . results ) ;
823+ self . store . stack . values . truncate_keep_counts ( self . cf . locals_base , results) ;
828824 let Some ( cf) = self . store . stack . call_stack . pop ( ) else { return true } ;
829825
830826 if cf. func_addr != self . cf . func_addr {
0 commit comments