@@ -282,17 +282,20 @@ pub(crate) fn op_set_tabup(
282282 meta = table. meta_ptr ( ) ;
283283 if meta. is_null ( ) || meta. as_mut_ref ( ) . data . no_tm ( TmKind :: NewIndex . into ( ) ) {
284284 let ( new_key, delta, is_collectable) = if instr. get_k ( ) {
285- let rc = * k_val ( constants, c) ;
286- let pset_result = table. impl_table . pset_shortstr ( key, rc) ;
287- let ( new_key, delta) = table. impl_table . finish_shortstr_set ( key, rc, pset_result) ;
288- ( new_key, delta, rc. is_collectable ( ) )
285+ let rc_value = k_val ( constants, c) ;
286+ let pset_result = table. impl_table . pset_shortstr ( key, rc_value) ;
287+ let ( new_key, delta) =
288+ table
289+ . impl_table
290+ . finish_shortstr_set ( key, rc_value, pset_result) ;
291+ ( new_key, delta, rc_value. is_collectable ( ) )
289292 } else {
290293 let rc = ( * base_stk) . offset ( c as usize ) ;
291- let pset_result = table. impl_table . pset_shortstr ( key, rc. get ( ) ) ;
294+ let pset_result = table. impl_table . pset_shortstr ( key, rc. get_ref ( ) ) ;
292295 let ( new_key, delta) =
293296 table
294297 . impl_table
295- . finish_shortstr_set ( key, rc. get ( ) , pset_result) ;
298+ . finish_shortstr_set ( key, rc. get_ref ( ) , pset_result) ;
296299 ( new_key, delta, rc. is_collectable ( ) )
297300 } ;
298301 if new_key {
@@ -446,17 +449,25 @@ pub(crate) fn op_set_table(
446449 {
447450 let key = rb. get_ref ( ) ;
448451 let ( new_key, delta, needs_barrier) = if instr. get_k ( ) {
449- let rc = * k_val ( constants, c) ;
450- let pset_result = table. impl_table . pset_shortstr ( key, rc) ;
451- let ( new_key, delta) = table. impl_table . finish_shortstr_set ( key, rc, pset_result) ;
452- ( new_key, delta, rc. is_collectable ( ) || key. is_collectable ( ) )
452+ let rc_value = k_val ( constants, c) ;
453+ let pset_result = table. impl_table . pset_shortstr ( key, rc_value) ;
454+ let ( new_key, delta) =
455+ table
456+ . impl_table
457+ . finish_shortstr_set ( key, rc_value, pset_result) ;
458+ (
459+ new_key,
460+ delta,
461+ rc_value. is_collectable ( ) || key. is_collectable ( ) ,
462+ )
453463 } else {
454464 let rc = base. offset ( c as usize ) ;
455- let pset_result = table. impl_table . pset_shortstr ( key, rc. get ( ) ) ;
465+
466+ let pset_result = table. impl_table . pset_shortstr ( key, rc. get_ref ( ) ) ;
456467 let ( new_key, delta) =
457468 table
458469 . impl_table
459- . finish_shortstr_set ( key, rc. get ( ) , pset_result) ;
470+ . finish_shortstr_set ( key, rc. get_ref ( ) , pset_result) ;
460471 ( new_key, delta, ( rc. is_collectable ( ) || rb. is_collectable ( ) ) )
461472 } ;
462473 if new_key {
@@ -645,17 +656,20 @@ pub(crate) fn op_set_field(
645656 meta = table. meta_ptr ( ) ;
646657 if meta. is_null ( ) || meta. as_mut_ref ( ) . data . no_tm ( TmKind :: NewIndex . into ( ) ) {
647658 let ( new_key, delta, is_collectable) = if instr. get_k ( ) {
648- let rc = * k_val ( constants, c) ;
649- let pset_result = table. impl_table . pset_shortstr ( key, rc) ;
650- let ( new_key, delta) = table. impl_table . finish_shortstr_set ( key, rc, pset_result) ;
651- ( new_key, delta, rc. is_collectable ( ) )
659+ let rc_value = k_val ( constants, c) ;
660+ let pset_result = table. impl_table . pset_shortstr ( key, rc_value) ;
661+ let ( new_key, delta) =
662+ table
663+ . impl_table
664+ . finish_shortstr_set ( key, rc_value, pset_result) ;
665+ ( new_key, delta, rc_value. is_collectable ( ) )
652666 } else {
653667 let rc = ( * base_stk) . offset ( c as usize ) ;
654- let pset_result = table. impl_table . pset_shortstr ( key, rc. get ( ) ) ;
668+ let pset_result = table. impl_table . pset_shortstr ( key, rc. get_ref ( ) ) ;
655669 let ( new_key, delta) =
656670 table
657671 . impl_table
658- . finish_shortstr_set ( key, rc. get ( ) , pset_result) ;
672+ . finish_shortstr_set ( key, rc. get_ref ( ) , pset_result) ;
659673 ( new_key, delta, rc. is_collectable ( ) )
660674 } ;
661675 if new_key {
0 commit comments