mmtk/util/
is_mmtk_object.rs1pub const VO_BIT_REGION_SIZE: usize =
4 1usize << crate::util::metadata::vo_bit::VO_BIT_SIDE_METADATA_SPEC.log_bytes_in_region;
5
6use crate::util::{Address, ObjectReference};
7
8pub(crate) fn check_object_reference(addr: Address) -> Option<ObjectReference> {
9 use crate::mmtk::SFT_MAP;
10 debug_assert_ne!(addr, Address::ZERO, "Address is zero");
11 debug_assert!(
12 addr.is_aligned_to(ObjectReference::ALIGNMENT),
13 "Address is not aligned to word size: {addr}"
14 );
15 SFT_MAP.get_checked(addr).is_mmtk_object(addr)
16}
17
18pub(crate) fn check_internal_reference(
19 addr: Address,
20 max_search_bytes: usize,
21) -> Option<ObjectReference> {
22 use crate::mmtk::SFT_MAP;
23 let ret = SFT_MAP
24 .get_checked(addr)
25 .find_object_from_internal_pointer(addr, max_search_bytes);
26 #[cfg(debug_assertions)]
27 if let Some(obj) = ret {
28 let obj = check_object_reference(obj.to_raw_address());
29 debug_assert_eq!(obj, ret);
30 }
31 ret
32}