src/share/vm/oops/instanceMirrorKlass.cpp

Print this page




 224     assert_nothing)
 225   return size;
 226 }
 227 
 228 #define InstanceMirrorKlass_SPECIALIZED_OOP_ITERATE_DEFN(T, nv_suffix)                \
 229   InstanceMirrorKlass_OOP_ITERATE(                                                    \
 230     start_of_static_fields(obj), java_lang_Class::static_oop_field_count(obj),        \
 231       (closure)->do_oop##nv_suffix(p),                                                \
 232     assert_is_in_closed_subset)                                                       \
 233   return oop_size(obj);                                                               \
 234 
 235 #define InstanceMirrorKlass_BOUNDED_SPECIALIZED_OOP_ITERATE(T, nv_suffix, mr)         \
 236   InstanceMirrorKlass_BOUNDED_OOP_ITERATE(                                            \
 237     start_of_static_fields(obj), java_lang_Class::static_oop_field_count(obj),        \
 238     mr.start(), mr.end(),                                                             \
 239       (closure)->do_oop##nv_suffix(p),                                                \
 240     assert_is_in_closed_subset)                                                       \
 241   return oop_size(obj);                                                               \
 242 
 243 
 244 #define if_do_metadata_checked(closure, nv_suffix)                    \
 245   /* Make sure the non-virtual and the virtual versions match. */     \
 246   assert(closure->do_metadata##nv_suffix() == closure->do_metadata(), \
 247       "Inconsistency in do_metadata");                                \
 248   if (closure->do_metadata##nv_suffix())
 249 
 250 // Macro to define InstanceMirrorKlass::oop_oop_iterate for virtual/nonvirtual for
 251 // all closures.  Macros calling macros above for each oop size.
 252 
 253 #define InstanceMirrorKlass_OOP_OOP_ITERATE_DEFN(OopClosureType, nv_suffix)           \
 254                                                                                       \
 255 int InstanceMirrorKlass::                                                             \
 256 oop_oop_iterate##nv_suffix(oop obj, OopClosureType* closure) {                        \
 257   /* Get size before changing pointers */                                             \
 258   SpecializationStats::record_iterate_call##nv_suffix(SpecializationStats::irk);      \
 259                                                                                       \
 260   InstanceKlass::oop_oop_iterate##nv_suffix(obj, closure);                            \
 261                                                                                       \
 262   if_do_metadata_checked(closure, nv_suffix) {                                        \
 263     Klass* klass = java_lang_Class::as_Klass(obj);                                    \
 264     /* We'll get NULL for primitive mirrors. */                                       \
 265     if (klass != NULL) {                                                              \
 266       closure->do_klass##nv_suffix(klass);                                            \
 267     }                                                                                 \
 268   }                                                                                   \
 269                                                                                       \




 224     assert_nothing)
 225   return size;
 226 }
 227 
 228 #define InstanceMirrorKlass_SPECIALIZED_OOP_ITERATE_DEFN(T, nv_suffix)                \
 229   InstanceMirrorKlass_OOP_ITERATE(                                                    \
 230     start_of_static_fields(obj), java_lang_Class::static_oop_field_count(obj),        \
 231       (closure)->do_oop##nv_suffix(p),                                                \
 232     assert_is_in_closed_subset)                                                       \
 233   return oop_size(obj);                                                               \
 234 
 235 #define InstanceMirrorKlass_BOUNDED_SPECIALIZED_OOP_ITERATE(T, nv_suffix, mr)         \
 236   InstanceMirrorKlass_BOUNDED_OOP_ITERATE(                                            \
 237     start_of_static_fields(obj), java_lang_Class::static_oop_field_count(obj),        \
 238     mr.start(), mr.end(),                                                             \
 239       (closure)->do_oop##nv_suffix(p),                                                \
 240     assert_is_in_closed_subset)                                                       \
 241   return oop_size(obj);                                                               \
 242 
 243 






 244 // Macro to define InstanceMirrorKlass::oop_oop_iterate for virtual/nonvirtual for
 245 // all closures.  Macros calling macros above for each oop size.
 246 
 247 #define InstanceMirrorKlass_OOP_OOP_ITERATE_DEFN(OopClosureType, nv_suffix)           \
 248                                                                                       \
 249 int InstanceMirrorKlass::                                                             \
 250 oop_oop_iterate##nv_suffix(oop obj, OopClosureType* closure) {                        \
 251   /* Get size before changing pointers */                                             \
 252   SpecializationStats::record_iterate_call##nv_suffix(SpecializationStats::irk);      \
 253                                                                                       \
 254   InstanceKlass::oop_oop_iterate##nv_suffix(obj, closure);                            \
 255                                                                                       \
 256   if_do_metadata_checked(closure, nv_suffix) {                                        \
 257     Klass* klass = java_lang_Class::as_Klass(obj);                                    \
 258     /* We'll get NULL for primitive mirrors. */                                       \
 259     if (klass != NULL) {                                                              \
 260       closure->do_klass##nv_suffix(klass);                                            \
 261     }                                                                                 \
 262   }                                                                                   \
 263                                                                                       \