124 125 oop_oop_iterate_ref_processing<nv>(obj, closure); 126 127 return size; 128 } 129 #endif // INCLUDE_ALL_GCS 130 131 132 template <bool nv, class OopClosureType> 133 int InstanceRefKlass::oop_oop_iterate_bounded(oop obj, OopClosureType* closure, MemRegion mr) { 134 // Get size before changing pointers 135 int size = InstanceKlass::oop_oop_iterate_bounded<nv>(obj, closure, mr); 136 137 oop_oop_iterate_ref_processing_bounded<nv>(obj, closure, mr); 138 139 return size; 140 } 141 142 // Macro to define InstanceRefKlass::oop_oop_iterate for virtual/nonvirtual for 143 // all closures. Macros calling macros above for each oop size. 144 145 #define InstanceRefKlass_OOP_OOP_ITERATE_DEFN(OopClosureType, nv_suffix) \ 146 \ 147 int InstanceRefKlass::oop_oop_iterate##nv_suffix(oop obj, OopClosureType* closure) { \ 148 return oop_oop_iterate<nvs_to_bool(nv_suffix)>(obj, closure); \ 149 } 150 151 #if INCLUDE_ALL_GCS 152 #define InstanceRefKlass_OOP_OOP_ITERATE_BACKWARDS_DEFN(OopClosureType, nv_suffix) \ 153 \ 154 int InstanceRefKlass::oop_oop_iterate_backwards##nv_suffix(oop obj, OopClosureType* closure) { \ 155 return oop_oop_iterate_reverse<nvs_to_bool(nv_suffix)>(obj, closure); \ 156 } 157 #else 158 #define InstanceRefKlass_OOP_OOP_ITERATE_BACKWARDS_DEFN(OopClosureType, nv_suffix) 159 #endif 160 161 162 #define InstanceRefKlass_OOP_OOP_ITERATE_DEFN_m(OopClosureType, nv_suffix) \ 163 \ 164 int InstanceRefKlass::oop_oop_iterate##nv_suffix##_m(oop obj, OopClosureType* closure, MemRegion mr) { \ 165 return oop_oop_iterate_bounded<nvs_to_bool(nv_suffix)>(obj, closure, mr); \ 166 } 167 168 #define ALL_INSTANCE_REF_KLASS_OOP_OOP_ITERATE_DEFN(OopClosureType, nv_suffix) \ 169 InstanceRefKlass_OOP_OOP_ITERATE_DEFN( OopClosureType, nv_suffix) \ 170 InstanceRefKlass_OOP_OOP_ITERATE_DEFN_m( OopClosureType, nv_suffix) \ 171 InstanceRefKlass_OOP_OOP_ITERATE_BACKWARDS_DEFN(OopClosureType, nv_suffix) 172 173 174 #endif // SHARE_VM_OOPS_INSTANCEREFKLASS_INLINE_HPP | 124 125 oop_oop_iterate_ref_processing<nv>(obj, closure); 126 127 return size; 128 } 129 #endif // INCLUDE_ALL_GCS 130 131 132 template <bool nv, class OopClosureType> 133 int InstanceRefKlass::oop_oop_iterate_bounded(oop obj, OopClosureType* closure, MemRegion mr) { 134 // Get size before changing pointers 135 int size = InstanceKlass::oop_oop_iterate_bounded<nv>(obj, closure, mr); 136 137 oop_oop_iterate_ref_processing_bounded<nv>(obj, closure, mr); 138 139 return size; 140 } 141 142 // Macro to define InstanceRefKlass::oop_oop_iterate for virtual/nonvirtual for 143 // all closures. Macros calling macros above for each oop size. 144 #define ALL_INSTANCE_REF_KLASS_OOP_OOP_ITERATE_DEFN(OopClosureType, nv_suffix) \ 145 OOP_OOP_ITERATE_DEFN( InstanceRefKlass, OopClosureType, nv_suffix) \ 146 OOP_OOP_ITERATE_DEFN_BOUNDED( InstanceRefKlass, OopClosureType, nv_suffix) \ 147 OOP_OOP_ITERATE_DEFN_BACKWARDS(InstanceRefKlass, OopClosureType, nv_suffix) 148 149 #endif // SHARE_VM_OOPS_INSTANCEREFKLASS_INLINE_HPP |