< prev index next >

src/share/vm/oops/klass.hpp

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


 634 #endif
 635 
 636   virtual void oop_verify_on(oop obj, outputStream* st);
 637 
 638   static bool is_null(narrowKlass obj);
 639   static bool is_null(Klass* obj);
 640 
 641   // klass encoding for klass pointer in objects.
 642   static narrowKlass encode_klass_not_null(Klass* v);
 643   static narrowKlass encode_klass(Klass* v);
 644 
 645   static Klass* decode_klass_not_null(narrowKlass v);
 646   static Klass* decode_klass(narrowKlass v);
 647 
 648  private:
 649   // barriers used by klass_oop_store
 650   void klass_update_barrier_set(oop v);
 651   void klass_update_barrier_set_pre(oop* p, oop v);
 652 };
 653 



































 654 #endif // SHARE_VM_OOPS_KLASS_HPP


 634 #endif
 635 
 636   virtual void oop_verify_on(oop obj, outputStream* st);
 637 
 638   static bool is_null(narrowKlass obj);
 639   static bool is_null(Klass* obj);
 640 
 641   // klass encoding for klass pointer in objects.
 642   static narrowKlass encode_klass_not_null(Klass* v);
 643   static narrowKlass encode_klass(Klass* v);
 644 
 645   static Klass* decode_klass_not_null(narrowKlass v);
 646   static Klass* decode_klass(narrowKlass v);
 647 
 648  private:
 649   // barriers used by klass_oop_store
 650   void klass_update_barrier_set(oop v);
 651   void klass_update_barrier_set_pre(oop* p, oop v);
 652 };
 653 
 654 // Helper to convert the oop iterate macro suffixes into bool values that can be used by template functions.
 655 #define nvs_nv_to_bool true
 656 #define nvs_v_to_bool  false
 657 #define nvs_to_bool(nv_suffix) nvs##nv_suffix##_to_bool
 658 
 659 // Oop iteration macros for declarations.
 660 #define OOP_OOP_ITERATE_DECL(OopClosureType, nv_suffix)                           \
 661   int oop_oop_iterate##nv_suffix(oop obj, OopClosureType* blk);                   \
 662   int oop_oop_iterate##nv_suffix##_m(oop obj, OopClosureType* blk, MemRegion mr);
 663 
 664 #if INCLUDE_ALL_GCS
 665 #define OOP_OOP_ITERATE_BACKWARDS_DECL(OopClosureType, nv_suffix) \
 666   int oop_oop_iterate_backwards##nv_suffix(oop obj, OopClosureType* blk);
 667 #endif // INCLUDE_ALL_GCS
 668 
 669 // Oop iteration macros for definitions.
 670 #define OOP_OOP_ITERATE_DEFN(KlassType, OopClosureType, nv_suffix)                 \
 671 int KlassType::oop_oop_iterate##nv_suffix(oop obj, OopClosureType* closure) {      \
 672   return oop_oop_iterate<nvs_to_bool(nv_suffix)>(obj, closure);                    \
 673 }
 674 
 675 #if INCLUDE_ALL_GCS
 676 #define OOP_OOP_ITERATE_BACKWARDS_DEFN(KlassType, OopClosureType, nv_suffix)             \
 677 int KlassType::oop_oop_iterate_backwards##nv_suffix(oop obj, OopClosureType* closure) {  \
 678   return oop_oop_iterate_reverse<nvs_to_bool(nv_suffix)>(obj, closure);                  \
 679 }
 680 #else
 681 #define OOP_OOP_ITERATE_BACKWARDS_DEFN(KlassType, OopClosureType, nv_suffix)
 682 #endif
 683 
 684 #define OOP_OOP_ITERATE_DEFN_m(KlassType, OopClosureType, nv_suffix)                             \
 685 int KlassType::oop_oop_iterate##nv_suffix##_m(oop obj, OopClosureType* closure, MemRegion mr) {  \
 686   return oop_oop_iterate_bounded<nvs_to_bool(nv_suffix)>(obj, closure, mr);                      \
 687 }
 688 
 689 #endif // SHARE_VM_OOPS_KLASS_HPP
< prev index next >