Skip to content

Commit 2b9873e

Browse files
committed
Remove NULL ObjectReference
Parent PR: mmtk/mmtk-core#1064
1 parent 5a2b91c commit 2b9873e

File tree

5 files changed

+18
-12
lines changed

5 files changed

+18
-12
lines changed

mmtk/Cargo.lock

Lines changed: 2 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

mmtk/Cargo.toml

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -36,11 +36,11 @@ probe = "0.5"
3636
features = ["is_mmtk_object", "object_pinning"]
3737

3838
# Uncomment the following lines to use mmtk-core from the official repository.
39-
git = "https://github.com/mmtk/mmtk-core.git"
40-
rev = "5a01555b5aee984b634f81e9d137f1ae0410fd39"
39+
git = "https://github.com/wks/mmtk-core.git"
40+
rev = "6aa75cd72247d12b9568dc321c46feca6572a512"
4141

4242
# Uncomment the following line to use mmtk-core from a local repository.
43-
#path = "../../mmtk-core"
43+
# path = "../../mmtk-core"
4444

4545
[features]
4646
default = []

mmtk/src/api.rs

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ use mmtk::memory_manager;
1717
use mmtk::memory_manager::mmtk_init;
1818
use mmtk::util::alloc::AllocatorInfo;
1919
use mmtk::util::alloc::AllocatorSelector;
20+
use mmtk::util::apiutils::NullableObjectReference;
2021
use mmtk::util::constants::MIN_OBJECT_SIZE;
2122
use mmtk::util::options::GCTriggerSelector;
2223
use mmtk::util::options::PlanSelector;
@@ -208,10 +209,8 @@ pub extern "C" fn mmtk_is_live_object(object: ObjectReference) -> bool {
208209
}
209210

210211
#[no_mangle]
211-
pub extern "C" fn mmtk_get_forwarded_object(object: ObjectReference) -> ObjectReference {
212-
object
213-
.get_forwarded_object::<Ruby>()
214-
.unwrap_or(ObjectReference::NULL)
212+
pub extern "C" fn mmtk_get_forwarded_object(object: ObjectReference) -> NullableObjectReference {
213+
object.get_forwarded_object::<Ruby>().into()
215214
}
216215

217216
#[no_mangle]

mmtk/src/object_model.rs

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -51,11 +51,13 @@ impl ObjectModel<Ruby> for VMObjectModel {
5151
let from_start = from_acc.obj_start();
5252
let object_size = from_acc.object_size();
5353
let to_start = copy_context.alloc_copy(from, object_size, MIN_OBJ_ALIGN, 0, semantics);
54+
debug_assert!(!to_start.is_zero());
5455
let to_payload = to_start.add(OBJREF_OFFSET);
5556
unsafe {
5657
copy_nonoverlapping::<u8>(from_start.to_ptr(), to_start.to_mut_ptr(), object_size);
5758
}
58-
let to_obj = ObjectReference::from_raw_address(to_payload);
59+
// unsafe: `to_payload`` cannot be zero because `alloc_copy`` never returns zero.
60+
let to_obj = unsafe { ObjectReference::from_raw_address_unchecked(to_payload) };
5961
copy_context.post_copy(to_obj, object_size, semantics);
6062
trace!("Copied object from {} to {}", from, to_obj);
6163

@@ -123,7 +125,8 @@ impl ObjectModel<Ruby> for VMObjectModel {
123125
}
124126

125127
fn address_to_ref(addr: Address) -> ObjectReference {
126-
ObjectReference::from_raw_address(addr)
128+
debug_assert!(!addr.is_zero());
129+
unsafe { ObjectReference::from_raw_address_unchecked(addr) }
127130
}
128131

129132
fn get_size_when_copied(object: ObjectReference) -> usize {

mmtk/src/reference_glue.rs

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ pub struct VMReferenceGlue {}
88
impl ReferenceGlue<Ruby> for VMReferenceGlue {
99
type FinalizableType = ObjectReference;
1010

11-
fn get_referent(_object: ObjectReference) -> ObjectReference {
11+
fn get_referent(_object: ObjectReference) -> Option<ObjectReference> {
1212
unimplemented!()
1313
}
1414

@@ -19,4 +19,8 @@ impl ReferenceGlue<Ruby> for VMReferenceGlue {
1919
fn enqueue_references(_references: &[ObjectReference], _tls: VMWorkerThread) {
2020
unimplemented!()
2121
}
22+
23+
fn clear_referent(_new_reference: ObjectReference) {
24+
unimplemented!()
25+
}
2226
}

0 commit comments

Comments
 (0)