--- old/src/hotspot/share/oops/oop.inline.hpp 2018-06-20 11:50:37.452139075 +0200 +++ new/src/hotspot/share/oops/oop.inline.hpp 2018-06-20 11:50:37.232139083 +0200 @@ -432,35 +432,40 @@ } #endif // INCLUDE_PARALLELGC -#define OOP_ITERATE_DEFN(OopClosureType, nv_suffix) \ - \ -void oopDesc::oop_iterate(OopClosureType* blk) { \ - klass()->oop_oop_iterate##nv_suffix(this, blk); \ -} \ - \ -void oopDesc::oop_iterate(OopClosureType* blk, MemRegion mr) { \ - klass()->oop_oop_iterate_bounded##nv_suffix(this, blk, mr); \ -} - -#define OOP_ITERATE_SIZE_DEFN(OopClosureType, nv_suffix) \ - \ -int oopDesc::oop_iterate_size(OopClosureType* blk) { \ - Klass* k = klass(); \ - int size = size_given_klass(k); \ - k->oop_oop_iterate##nv_suffix(this, blk); \ - return size; \ -} \ - \ -int oopDesc::oop_iterate_size(OopClosureType* blk, MemRegion mr) { \ - Klass* k = klass(); \ - int size = size_given_klass(k); \ - k->oop_oop_iterate_bounded##nv_suffix(this, blk, mr); \ - return size; \ +template +void oopDesc::oop_iterate(OopClosureType* cl) { + OopClosureDispatch::oop_oop_iterate(cl, this, klass()); +} + +template +void oopDesc::oop_iterate(OopClosureType* cl, MemRegion mr) { + OopClosureDispatch::oop_oop_iterate(cl, this, klass(), mr); +} + +template +int oopDesc::oop_iterate_size(OopClosureType* cl) { + Klass* k = klass(); + int size = size_given_klass(k); + OopClosureDispatch::oop_oop_iterate(cl, this, k); + return size; +} + +template +int oopDesc::oop_iterate_size(OopClosureType* cl, MemRegion mr) { + Klass* k = klass(); + int size = size_given_klass(k); + OopClosureDispatch::oop_oop_iterate(cl, this, k, mr); + return size; +} + +template +void oopDesc::oop_iterate_backwards(OopClosureType* cl) { + OopClosureDispatch::oop_oop_iterate_backwards(cl, this, klass()); } int oopDesc::oop_iterate_no_header(OopClosure* blk) { // The NoHeaderExtendedOopClosure wraps the OopClosure and proxies all - // the do_oop calls, but turns off all other features in ExtendedOopClosure. + // the do_oop calls, but turns off all other features in OopIterateClosure. NoHeaderExtendedOopClosure cl(blk); return oop_iterate_size(&cl); } @@ -470,24 +475,6 @@ return oop_iterate_size(&cl, mr); } -#if INCLUDE_OOP_OOP_ITERATE_BACKWARDS -#define OOP_ITERATE_BACKWARDS_DEFN(OopClosureType, nv_suffix) \ - \ -inline void oopDesc::oop_iterate_backwards(OopClosureType* blk) { \ - klass()->oop_oop_iterate_backwards##nv_suffix(this, blk); \ -} -#else -#define OOP_ITERATE_BACKWARDS_DEFN(OopClosureType, nv_suffix) -#endif - -#define ALL_OOPDESC_OOP_ITERATE(OopClosureType, nv_suffix) \ - OOP_ITERATE_DEFN(OopClosureType, nv_suffix) \ - OOP_ITERATE_SIZE_DEFN(OopClosureType, nv_suffix) \ - OOP_ITERATE_BACKWARDS_DEFN(OopClosureType, nv_suffix) - -ALL_OOP_OOP_ITERATE_CLOSURES_1(ALL_OOPDESC_OOP_ITERATE) -ALL_OOP_OOP_ITERATE_CLOSURES_2(ALL_OOPDESC_OOP_ITERATE) - bool oopDesc::is_instanceof_or_null(oop obj, Klass* klass) { return obj == NULL || obj->klass()->is_subtype_of(klass); }