@@ -554,28 +554,26 @@ impl ValueStack {
554554 #[ inline( always) ]
555555 fn replace (
556556 & mut self ,
557- start : usize ,
558- len_slots : usize ,
557+ callee_start : usize ,
558+ callee_size : usize ,
559559 callee_params : BoundedSlotSpan ,
560560 ) -> Result < Sp , TrapCode > {
561- let params_len = callee_params. len ( ) ;
562- let params_offset = usize:: from ( u16:: from ( callee_params. span ( ) . head ( ) ) ) ;
563- debug_assert ! ( usize :: from ( params_len ) <= len_slots ) ;
564- if len_slots == 0 {
561+ let params_len = usize :: from ( callee_params. len ( ) ) ;
562+ let params_start = usize:: from ( u16:: from ( callee_params. span ( ) . head ( ) ) ) ;
563+ let params_end = params_start . wrapping_add ( params_len ) ;
564+ if callee_size == 0 {
565565 return Ok ( Sp :: dangling ( ) ) ;
566566 }
567- let Some ( end ) = start . checked_add ( len_slots ) else {
567+ let Some ( callee_end ) = callee_start . checked_add ( callee_size ) else {
568568 return Err ( TrapCode :: StackOverflow ) ;
569569 } ;
570- self . grow_if_needed ( end) ?;
571- let params_len = usize:: from ( params_len) ;
572- let params_end = params_offset. wrapping_add ( params_len) ;
573- let Some ( cells) = self . cells . get_mut ( start..params_end) else {
574- unsafe { unreachable_unchecked ! ( ) }
570+ self . grow_if_needed ( callee_end) ?;
571+ let Some ( callee_cells) = self . cells . get_mut ( callee_start..) else {
572+ unsafe { unreachable_unchecked ! ( "ValueStack::replace: out of bounds callee cells" ) }
575573 } ;
576- cells . copy_within ( params_offset ..params_end, 0 ) ;
577- cells [ params_len..] . fill_with ( UntypedVal :: default) ;
578- let sp = self . sp ( start ) ;
574+ callee_cells . copy_within ( params_start ..params_end, 0 ) ;
575+ callee_cells [ params_len..callee_size ] . fill_with ( UntypedVal :: default) ;
576+ let sp = self . sp ( callee_start ) ;
579577 Ok ( sp)
580578 }
581579}
0 commit comments