11use super :: abi:: * ;
2- use super :: UPCALLS ;
2+ use super :: { OpenJDKEdge , UPCALLS } ;
33use mmtk:: util:: constants:: * ;
44use mmtk:: util:: opaque_pointer:: * ;
55use mmtk:: util:: { Address , 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 ) ;
@@ -23,7 +23,7 @@ impl OopIterate for OopMapBlock {
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);
@@ -74,7 +74,7 @@ impl OopIterate for InstanceMirrorKlass {
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,7 +88,7 @@ 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 ) } {
9494 closure. visit_edge ( Address :: from_ref ( oop as & Oop ) ) ;
@@ -98,15 +98,15 @@ impl OopIterate for ObjArrayKlass {
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,7 +139,7 @@ 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) ;
144144 closure. visit_edge ( referent_addr) ;
145145 let discovered_addr = Self :: discovered_address ( oop) ;
@@ -148,14 +148,14 @@ impl InstanceRefKlass {
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,11 @@ 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 (
196+ object : ObjectReference ,
197+ closure : & mut impl EdgeVisitor < OpenJDKEdge > ,
198+ _tls : VMWorkerThread ,
199+ ) {
196200 // println!("*****scan_object(0x{:x}) -> \n 0x{:x}, 0x{:x} \n",
197201 // object,
198202 // unsafe { *(object.value() as *const usize) },
0 commit comments