@@ -2,28 +2,28 @@ use super::abi::*;
22use super :: UPCALLS ;
33use mmtk:: util:: constants:: * ;
44use mmtk:: util:: opaque_pointer:: * ;
5- use mmtk:: util:: { Address , ObjectReference } ;
5+ use mmtk:: util:: ObjectReference ;
66use mmtk:: vm:: EdgeVisitor ;
77use std:: { mem, slice} ;
88
99trait OopIterate : Sized {
10- fn oop_iterate ( & self , oop : Oop , closure : & mut impl EdgeVisitor ) ;
10+ fn oop_iterate ( & self , oop : Oop , closure : & mut impl EdgeVisitor < OpenJDKEdge > ) ;
1111}
1212
1313impl OopIterate for OopMapBlock {
1414 #[ inline]
15- fn oop_iterate ( & self , oop : Oop , closure : & mut impl EdgeVisitor ) {
15+ fn oop_iterate ( & self , oop : Oop , closure : & mut impl EdgeVisitor < OpenJDKEdge > ) {
1616 let start = oop. get_field_address ( self . offset ) ;
1717 for i in 0 ..self . count as usize {
1818 let edge = start + ( i << LOG_BYTES_IN_ADDRESS ) ;
19- closure. visit_edge ( edge) ;
19+ closure. visit_edge ( OpenJDKEdge :: simple_from_addr ( edge) ) ;
2020 }
2121 }
2222}
2323
2424impl OopIterate for InstanceKlass {
2525 #[ inline]
26- fn oop_iterate ( & self , oop : Oop , closure : & mut impl EdgeVisitor ) {
26+ fn oop_iterate ( & self , oop : Oop , closure : & mut impl EdgeVisitor < OpenJDKEdge > ) {
2727 let oop_maps = self . nonstatic_oop_maps ( ) ;
2828 for map in oop_maps {
2929 map. oop_iterate ( oop, closure)
@@ -33,7 +33,7 @@ impl OopIterate for InstanceKlass {
3333
3434impl OopIterate for InstanceMirrorKlass {
3535 #[ inline]
36- fn oop_iterate ( & self , oop : Oop , closure : & mut impl EdgeVisitor ) {
36+ fn oop_iterate ( & self , oop : Oop , closure : & mut impl EdgeVisitor < OpenJDKEdge > ) {
3737 self . instance_klass . oop_iterate ( oop, closure) ;
3838 // if (Devirtualizer::do_metadata(closure)) {
3939 // Klass* klass = java_lang_Class::as_Klass(obj);
@@ -67,14 +67,14 @@ impl OopIterate for InstanceMirrorKlass {
6767 let len = Self :: static_oop_field_count ( oop) ;
6868 let slice = unsafe { slice:: from_raw_parts ( start, len as _ ) } ;
6969 for oop in slice {
70- closure. visit_edge ( Address :: from_ref ( oop as & Oop ) ) ;
70+ closure. visit_edge ( OpenJDKEdge :: from_oop_ref ( oop) ) ;
7171 }
7272 }
7373}
7474
7575impl OopIterate for InstanceClassLoaderKlass {
7676 #[ inline]
77- fn oop_iterate ( & self , oop : Oop , closure : & mut impl EdgeVisitor ) {
77+ fn oop_iterate ( & self , oop : Oop , closure : & mut impl EdgeVisitor < OpenJDKEdge > ) {
7878 self . instance_klass . oop_iterate ( oop, closure) ;
7979 // if (Devirtualizer::do_metadata(closure)) {
8080 // ClassLoaderData* cld = java_lang_ClassLoader::loader_data(obj);
@@ -88,25 +88,25 @@ impl OopIterate for InstanceClassLoaderKlass {
8888
8989impl OopIterate for ObjArrayKlass {
9090 #[ inline]
91- fn oop_iterate ( & self , oop : Oop , closure : & mut impl EdgeVisitor ) {
91+ fn oop_iterate ( & self , oop : Oop , closure : & mut impl EdgeVisitor < OpenJDKEdge > ) {
9292 let array = unsafe { oop. as_array_oop ( ) } ;
9393 for oop in unsafe { array. data :: < Oop > ( BasicType :: T_OBJECT ) } {
94- closure. visit_edge ( Address :: from_ref ( oop as & Oop ) ) ;
94+ closure. visit_edge ( OpenJDKEdge :: from_oop_ref ( oop) ) ;
9595 }
9696 }
9797}
9898
9999impl OopIterate for TypeArrayKlass {
100100 #[ inline]
101- fn oop_iterate ( & self , _oop : Oop , _closure : & mut impl EdgeVisitor ) {
101+ fn oop_iterate ( & self , _oop : Oop , _closure : & mut impl EdgeVisitor < OpenJDKEdge > ) {
102102 // Performance tweak: We skip processing the klass pointer since all
103103 // TypeArrayKlasses are guaranteed processed via the null class loader.
104104 }
105105}
106106
107107impl OopIterate for InstanceRefKlass {
108108 #[ inline]
109- fn oop_iterate ( & self , oop : Oop , closure : & mut impl EdgeVisitor ) {
109+ fn oop_iterate ( & self , oop : Oop , closure : & mut impl EdgeVisitor < OpenJDKEdge > ) {
110110 use crate :: abi:: * ;
111111 use crate :: api:: { add_phantom_candidate, add_soft_candidate, add_weak_candidate} ;
112112 self . instance_klass . oop_iterate ( oop, closure) ;
@@ -139,23 +139,23 @@ impl InstanceRefKlass {
139139 !* SINGLETON . get_options ( ) . no_reference_types
140140 }
141141 #[ inline]
142- fn process_ref_as_strong ( oop : Oop , closure : & mut impl EdgeVisitor ) {
142+ fn process_ref_as_strong ( oop : Oop , closure : & mut impl EdgeVisitor < OpenJDKEdge > ) {
143143 let referent_addr = Self :: referent_address ( oop) ;
144- closure. visit_edge ( referent_addr) ;
144+ closure. visit_edge ( OpenJDKEdge :: simple_from_addr ( referent_addr) ) ;
145145 let discovered_addr = Self :: discovered_address ( oop) ;
146- closure. visit_edge ( discovered_addr) ;
146+ closure. visit_edge ( OpenJDKEdge :: simple_from_addr ( discovered_addr) ) ;
147147 }
148148}
149149
150150#[ allow( unused) ]
151- fn oop_iterate_slow ( oop : Oop , closure : & mut impl EdgeVisitor , tls : OpaquePointer ) {
151+ fn oop_iterate_slow ( oop : Oop , closure : & mut impl EdgeVisitor < OpenJDKEdge > , tls : OpaquePointer ) {
152152 unsafe {
153153 ( ( * UPCALLS ) . scan_object ) ( closure as * mut _ as _ , mem:: transmute ( oop) , tls) ;
154154 }
155155}
156156
157157#[ inline]
158- fn oop_iterate ( oop : Oop , closure : & mut impl EdgeVisitor ) {
158+ fn oop_iterate ( oop : Oop , closure : & mut impl EdgeVisitor < OpenJDKEdge > ) {
159159 let klass_id = oop. klass . id ;
160160 debug_assert ! (
161161 klass_id as i32 >= 0 && ( klass_id as i32 ) < 6 ,
@@ -192,7 +192,7 @@ fn oop_iterate(oop: Oop, closure: &mut impl EdgeVisitor) {
192192}
193193
194194#[ inline]
195- pub fn scan_object ( object : ObjectReference , closure : & mut impl EdgeVisitor , _tls : VMWorkerThread ) {
195+ pub fn scan_object ( object : ObjectReference , closure : & mut impl EdgeVisitor < OpenJDKEdge > , _tls : VMWorkerThread ) {
196196 // println!("*****scan_object(0x{:x}) -> \n 0x{:x}, 0x{:x} \n",
197197 // object,
198198 // unsafe { *(object.value() as *const usize) },
0 commit comments