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
|