Skip to content

Commit 66d028f

Browse files
committed
fixup! fixup! [6/n][vm-rewrite][sui-execution] Update object runtime to use type tags instead of runtime VM types.
1 parent 4d9c952 commit 66d028f

File tree

7 files changed

+68
-67
lines changed

7 files changed

+68
-67
lines changed

sui-execution/latest/sui-move-natives/src/config.rs

Lines changed: 20 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,6 @@ use move_vm_runtime::{
1919
pop_arg,
2020
};
2121
use smallvec::smallvec;
22-
use std::cell::RefMut;
2322
use std::collections::VecDeque;
2423
use sui_types::{base_types::MoveObjectType, TypeTag};
2524
use tracing::{error, instrument};
@@ -87,22 +86,25 @@ pub fn read_setting_impl(
8786
E_BCS_SERIALIZATION_FAILURE,
8887
));
8988
};
90-
let object_runtime: RefMut<ObjectRuntime> = context
91-
.extensions_mut()
92-
.get::<NativeContextMut<ObjectRuntime>>()
93-
.get_mut();
94-
95-
let read_value_opt = consistent_value_before_current_epoch(
96-
object_runtime,
97-
field_setting_tag,
98-
&field_setting_layout,
99-
&setting_value_ty,
100-
&setting_data_value_ty,
101-
&value_ty,
102-
config_addr,
103-
name_df_addr,
104-
current_epoch,
105-
)?;
89+
90+
let read_value_opt = {
91+
let object_runtime: &mut ObjectRuntime = &mut context
92+
.extensions_mut()
93+
.get::<NativeContextMut<ObjectRuntime>>()
94+
.borrow_mut();
95+
96+
consistent_value_before_current_epoch(
97+
object_runtime,
98+
field_setting_tag,
99+
&field_setting_layout,
100+
&setting_value_ty,
101+
&setting_data_value_ty,
102+
&value_ty,
103+
config_addr,
104+
name_df_addr,
105+
current_epoch,
106+
)?
107+
};
106108

107109
native_charge_gas_early_exit!(
108110
context,
@@ -116,7 +118,7 @@ pub fn read_setting_impl(
116118
}
117119

118120
fn consistent_value_before_current_epoch(
119-
mut object_runtime: RefMut<ObjectRuntime>,
121+
object_runtime: &mut ObjectRuntime,
120122
field_setting_tag: StructTag,
121123
field_setting_layout: &R::MoveTypeLayout,
122124
_setting_value_ty: &Type,

sui-execution/latest/sui-move-natives/src/dynamic_field.rs

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ use move_vm_runtime::{
2424
};
2525
use move_vm_runtime::{native_charge_gas_early_exit, natives::extensions::NativeContextMut};
2626
use smallvec::smallvec;
27-
use std::{cell::RefMut, collections::VecDeque};
27+
use std::collections::VecDeque;
2828
use sui_types::{base_types::MoveObjectType, dynamic_field::derive_dynamic_field_id};
2929
use tracing::instrument;
3030

@@ -231,10 +231,10 @@ pub fn add_child_object(
231231
);
232232

233233
{
234-
let mut object_runtime: RefMut<ObjectRuntime> = context
234+
let object_runtime: &mut ObjectRuntime = &mut context
235235
.extensions_mut()
236236
.get::<NativeContextMut<ObjectRuntime>>()
237-
.get_mut();
237+
.borrow_mut();
238238
object_runtime.add_child_object(parent, child_id, MoveObjectType::from(tag), child)?;
239239
};
240240
Ok(NativeResult::ok(context.gas_used(), smallvec![]))
@@ -290,7 +290,7 @@ pub fn borrow_child_object(
290290
// `get_or_fetch_object` so that the lifetime of the returned object is tied to the lifetime of
291291
// the runtime reference we are creating here and the borrow checker will be happy with us.
292292
let object_runtime: &NativeContextMut<'_, ObjectRuntime<'_>> = context.extensions().get();
293-
let mut object_runtime_mut: RefMut<ObjectRuntime> = object_runtime.get_mut();
293+
let object_runtime_mut: &mut ObjectRuntime = &mut object_runtime.borrow_mut();
294294
let global_value_result = get_or_fetch_object!(
295295
context,
296296
object_runtime_mut,
@@ -364,7 +364,7 @@ pub fn remove_child_object(
364364
// `get_or_fetch_object` so that the lifetime of the returned object is tied to the lifetime of
365365
// the runtime reference we are creating here and the borrow checker will be happy with us.
366366
let object_runtime: &NativeContextMut<'_, ObjectRuntime<'_>> = context.extensions().get();
367-
let mut object_runtime_mut: RefMut<ObjectRuntime> = object_runtime.get_mut();
367+
let object_runtime_mut: &mut ObjectRuntime = &mut object_runtime.borrow_mut();
368368
let global_value_result = get_or_fetch_object!(
369369
context,
370370
object_runtime_mut,
@@ -429,7 +429,7 @@ pub fn has_child_object(
429429
let child_id = pop_arg!(args, AccountAddress).into();
430430
let parent = pop_arg!(args, AccountAddress).into();
431431
let has_child = {
432-
let mut object_runtime: RefMut<ObjectRuntime> = context.extensions().get::<NativeContextMut<ObjectRuntime>>().get_mut();
432+
let object_runtime: &mut ObjectRuntime = &mut context.extensions().get::<NativeContextMut<ObjectRuntime>>().borrow_mut();
433433
object_runtime.child_object_exists(parent, child_id)?
434434
};
435435

@@ -502,7 +502,7 @@ pub fn has_child_object_with_ty(
502502
);
503503

504504
let has_child = {
505-
let mut object_runtime: RefMut<ObjectRuntime> = context.extensions().get::<NativeContextMut<ObjectRuntime>>().get_mut();
505+
let object_runtime: &mut ObjectRuntime = &mut context.extensions().get::<NativeContextMut<ObjectRuntime>>().borrow_mut();
506506
object_runtime.child_object_exists_and_has_type(parent, child_id, &MoveObjectType::from(tag))?
507507
};
508508

sui-execution/latest/sui-move-natives/src/event.rs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ use move_vm_runtime::{
1010
};
1111
use move_vm_runtime::{native_charge_gas_early_exit, natives::functions::NativeContext};
1212
use smallvec::smallvec;
13-
use std::{cell::RefMut, collections::VecDeque};
13+
use std::collections::VecDeque;
1414
use sui_types::error::VMMemoryLimitExceededSubStatusCode;
1515

1616
#[derive(Clone, Debug)]
@@ -75,10 +75,10 @@ pub fn emit(
7575
* u64::from(tag_size).into()
7676
);
7777

78-
let mut obj_runtime: RefMut<ObjectRuntime> = context
78+
let obj_runtime: &mut ObjectRuntime = &mut context
7979
.extensions()
8080
.get::<NativeContextMut<ObjectRuntime>>()
81-
.get_mut();
81+
.borrow_mut();
8282
let max_event_emit_size = obj_runtime.protocol_config.max_event_emit_size();
8383
let ev_size = u64::from(tag_size + event_value_size);
8484
// Check if the event size is within the limit

sui-execution/latest/sui-move-natives/src/object.rs

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ use move_vm_runtime::{
1414
};
1515
use move_vm_runtime::{native_charge_gas_early_exit, natives::functions::NativeContext};
1616
use smallvec::smallvec;
17-
use std::{cell::RefMut, collections::VecDeque};
17+
use std::collections::VecDeque;
1818

1919
#[derive(Clone)]
2020
pub struct BorrowUidCostParams {
@@ -80,10 +80,10 @@ pub fn delete_impl(
8080
// unwrap safe because the interface of native function guarantees it.
8181
let uid_bytes = pop_arg!(args, AccountAddress);
8282

83-
let mut obj_runtime: RefMut<ObjectRuntime> = context
83+
let obj_runtime: &mut ObjectRuntime = &mut context
8484
.extensions()
8585
.get::<NativeContextMut<ObjectRuntime>>()
86-
.get_mut();
86+
.borrow_mut();
8787
obj_runtime.delete_id(uid_bytes.into())?;
8888
Ok(NativeResult::ok(context.gas_used(), smallvec![]))
8989
}
@@ -120,10 +120,10 @@ pub fn record_new_uid(
120120
// unwrap safe because the interface of native function guarantees it.
121121
let uid_bytes = pop_arg!(args, AccountAddress);
122122

123-
let mut obj_runtime: RefMut<ObjectRuntime> = context
123+
let obj_runtime: &mut ObjectRuntime = &mut context
124124
.extensions()
125125
.get::<NativeContextMut<ObjectRuntime>>()
126-
.get_mut();
126+
.borrow_mut();
127127
obj_runtime.new_id(uid_bytes.into())?;
128128
Ok(NativeResult::ok(context.gas_used(), smallvec![]))
129129
}

sui-execution/latest/sui-move-natives/src/test_scenario.rs

Lines changed: 26 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ use move_vm_runtime::{
2929
use smallvec::smallvec;
3030
use std::{
3131
borrow::Borrow,
32-
cell::{RefCell, RefMut},
32+
cell::RefCell,
3333
collections::{BTreeMap, BTreeSet, VecDeque},
3434
thread::LocalKey,
3535
};
@@ -100,10 +100,10 @@ pub fn end_transaction(
100100
) -> PartialVMResult<NativeResult> {
101101
assert!(ty_args.is_empty());
102102
assert!(args.is_empty());
103-
let mut object_runtime_ref: RefMut<ObjectRuntime> = context
103+
let object_runtime_ref: &mut ObjectRuntime = &mut context
104104
.extensions()
105105
.get::<NativeContextMut<ObjectRuntime>>()
106-
.get_mut();
106+
.borrow_mut();
107107
let taken_shared_or_imm: BTreeMap<_, _> = object_runtime_ref
108108
.test_inventories
109109
.taken
@@ -275,10 +275,10 @@ pub fn end_transaction(
275275
}
276276
// find all wrapped objects
277277
let mut all_wrapped = BTreeSet::new();
278-
let mut object_runtime_ref: RefMut<ObjectRuntime> = context
278+
let object_runtime_ref: &mut ObjectRuntime = &mut context
279279
.extensions()
280280
.get::<NativeContextMut<ObjectRuntime>>()
281-
.get_mut();
281+
.borrow_mut();
282282
find_all_wrapped_objects(
283283
context,
284284
&mut all_wrapped,
@@ -392,7 +392,7 @@ pub fn take_from_address_by_id(
392392
let object_runtime: &mut ObjectRuntime = &mut context
393393
.extensions()
394394
.get::<NativeContextMut<ObjectRuntime>>()
395-
.get_mut();
395+
.borrow_mut();
396396
let inventories = &mut object_runtime.test_inventories;
397397
let res = take_from_inventory(
398398
|x| {
@@ -425,10 +425,10 @@ pub fn ids_for_address(
425425
let account: SuiAddress = pop_arg!(args, AccountAddress).into();
426426
assert!(args.is_empty());
427427
let specified_obj_ty = context.type_to_type_tag(&specified_ty)?;
428-
let mut object_runtime: RefMut<ObjectRuntime> = context
428+
let object_runtime: &mut ObjectRuntime = &mut context
429429
.extensions()
430430
.get::<NativeContextMut<ObjectRuntime>>()
431-
.get_mut();
431+
.borrow_mut();
432432
let inventories = &mut object_runtime.test_inventories;
433433
let ids = inventories
434434
.address_inventories
@@ -450,10 +450,10 @@ pub fn most_recent_id_for_address(
450450
let account: SuiAddress = pop_arg!(args, AccountAddress).into();
451451
assert!(args.is_empty());
452452
let specified_obj_ty = context.type_to_type_tag(&specified_ty)?;
453-
let mut object_runtime: RefMut<ObjectRuntime> = context
453+
let object_runtime: &mut ObjectRuntime = &mut context
454454
.extensions()
455455
.get::<NativeContextMut<ObjectRuntime>>()
456-
.get_mut();
456+
.borrow_mut();
457457
let inventories = &mut object_runtime.test_inventories;
458458
let most_recent_id = match inventories.address_inventories.get(&account) {
459459
None => pack_option(None),
@@ -475,10 +475,10 @@ pub fn was_taken_from_address(
475475
let id = pop_id(&mut args)?;
476476
let account: SuiAddress = pop_arg!(args, AccountAddress).into();
477477
assert!(args.is_empty());
478-
let mut object_runtime: RefMut<ObjectRuntime> = context
478+
let object_runtime: &mut ObjectRuntime = &mut context
479479
.extensions()
480480
.get::<NativeContextMut<ObjectRuntime>>()
481-
.get_mut();
481+
.borrow_mut();
482482
let inventories = &mut object_runtime.test_inventories;
483483
let was_taken = inventories
484484
.taken
@@ -505,7 +505,7 @@ pub fn take_immutable_by_id(
505505
let object_runtime: &mut ObjectRuntime = &mut context
506506
.extensions()
507507
.get::<NativeContextMut<ObjectRuntime>>()
508-
.get_mut();
508+
.borrow_mut();
509509
let inventories = &mut object_runtime.test_inventories;
510510
let res = take_from_inventory(
511511
|x| {
@@ -543,10 +543,10 @@ pub fn most_recent_immutable_id(
543543
let specified_ty = get_specified_ty(ty_args);
544544
assert!(args.is_empty());
545545
let specified_obj_ty = context.type_to_type_tag(&specified_ty)?;
546-
let mut object_runtime: RefMut<ObjectRuntime> = context
546+
let object_runtime: &mut ObjectRuntime = &mut context
547547
.extensions()
548548
.get::<NativeContextMut<ObjectRuntime>>()
549-
.get_mut();
549+
.borrow_mut();
550550
let inventories = &mut object_runtime.test_inventories;
551551
let most_recent_id = most_recent_at_ty(
552552
&inventories.taken,
@@ -568,10 +568,10 @@ pub fn was_taken_immutable(
568568
assert!(ty_args.is_empty());
569569
let id = pop_id(&mut args)?;
570570
assert!(args.is_empty());
571-
let mut object_runtime: RefMut<ObjectRuntime> = context
571+
let object_runtime: &mut ObjectRuntime = &mut context
572572
.extensions()
573573
.get::<NativeContextMut<ObjectRuntime>>()
574-
.get_mut();
574+
.borrow_mut();
575575
let inventories = &mut object_runtime.test_inventories;
576576
let was_taken = inventories
577577
.taken
@@ -598,7 +598,7 @@ pub fn take_shared_by_id(
598598
let object_runtime: &mut ObjectRuntime = &mut context
599599
.extensions()
600600
.get::<NativeContextMut<ObjectRuntime>>()
601-
.get_mut();
601+
.borrow_mut();
602602
let inventories = &mut object_runtime.test_inventories;
603603
let res = take_from_inventory(
604604
|x| {
@@ -629,10 +629,10 @@ pub fn most_recent_id_shared(
629629
let specified_ty = get_specified_ty(ty_args);
630630
assert!(args.is_empty());
631631
let specified_obj_ty = context.type_to_type_tag(&specified_ty)?;
632-
let mut object_runtime: RefMut<ObjectRuntime> = context
632+
let object_runtime: &mut ObjectRuntime = &mut context
633633
.extensions()
634634
.get::<NativeContextMut<ObjectRuntime>>()
635-
.get_mut();
635+
.borrow_mut();
636636
let inventories = &mut object_runtime.test_inventories;
637637
let most_recent_id = most_recent_at_ty(
638638
&inventories.taken,
@@ -654,10 +654,10 @@ pub fn was_taken_shared(
654654
assert!(ty_args.is_empty());
655655
let id = pop_id(&mut args)?;
656656
assert!(args.is_empty());
657-
let mut object_runtime: RefMut<ObjectRuntime> = context
657+
let object_runtime: &mut ObjectRuntime = &mut context
658658
.extensions()
659659
.get::<NativeContextMut<ObjectRuntime>>()
660-
.get_mut();
660+
.borrow_mut();
661661
let inventories = &mut object_runtime.test_inventories;
662662
let was_taken = inventories
663663
.taken
@@ -685,10 +685,10 @@ pub fn allocate_receiving_ticket_for_object(
685685
E_UNABLE_TO_ALLOCATE_RECEIVING_TICKET,
686686
));
687687
};
688-
let mut object_runtime: RefMut<ObjectRuntime> = context
688+
let object_runtime: &mut ObjectRuntime = &mut context
689689
.extensions()
690690
.get::<NativeContextMut<ObjectRuntime>>()
691-
.get_mut();
691+
.borrow_mut();
692692
let object_version = SequenceNumber::new();
693693
let inventories = &mut object_runtime.test_inventories;
694694
if inventories.allocated_tickets.contains_key(&id) {
@@ -765,10 +765,10 @@ pub fn deallocate_receiving_ticket_for_object(
765765
) -> PartialVMResult<NativeResult> {
766766
let id = pop_id(&mut args)?;
767767

768-
let mut object_runtime: RefMut<ObjectRuntime> = context
768+
let object_runtime: &mut ObjectRuntime = &mut context
769769
.extensions()
770770
.get::<NativeContextMut<ObjectRuntime>>()
771-
.get_mut();
771+
.borrow_mut();
772772
let inventories = &mut object_runtime.test_inventories;
773773
// Deallocate the ticket -- we should never hit this scenario
774774
let Some((_, value)) = inventories.allocated_tickets.remove(&id) else {

sui-execution/latest/sui-move-natives/src/transfer.rs

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,6 @@ use move_vm_runtime::{
1717
};
1818
use move_vm_runtime::{native_charge_gas_early_exit, natives::functions::NativeContext};
1919
use smallvec::smallvec;
20-
use std::cell::RefMut;
2120
use std::collections::VecDeque;
2221
use sui_types::{
2322
base_types::{MoveObjectType, ObjectID, SequenceNumber},
@@ -76,10 +75,10 @@ pub fn receive_object_internal(
7675
));
7776
};
7877

79-
let mut object_runtime: RefMut<ObjectRuntime> = context
78+
let object_runtime: &mut ObjectRuntime = &mut context
8079
.extensions()
8180
.get::<NativeContextMut<ObjectRuntime>>()
82-
.get_mut();
81+
.borrow_mut();
8382
let child = match object_runtime.receive_object(
8483
parent,
8584
child_id,
@@ -248,9 +247,9 @@ fn object_runtime_transfer(
248247
}
249248
};
250249

251-
let mut obj_runtime: RefMut<ObjectRuntime> = context
250+
let obj_runtime: &mut ObjectRuntime = &mut context
252251
.extensions()
253252
.get::<NativeContextMut<ObjectRuntime>>()
254-
.get_mut();
253+
.borrow_mut();
255254
obj_runtime.transfer(owner, object_type, obj)
256255
}

0 commit comments

Comments
 (0)