< prev index next >

src/share/vm/oops/instanceRefKlass.inline.hpp

Print this page
rev 8366 : 8080746: Refactor oop iteration macros to be more general
Reviewed-by:


 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_m(        InstanceRefKlass, OopClosureType, nv_suffix)   \
 147   OOP_OOP_ITERATE_BACKWARDS_DEFN(InstanceRefKlass, OopClosureType, nv_suffix)

 148 
 149 #endif // SHARE_VM_OOPS_INSTANCEREFKLASS_INLINE_HPP
< prev index next >