582 virtual void oop_pc_update_pointers(oop obj) = 0; |
581 virtual void oop_pc_update_pointers(oop obj) = 0; |
583 #endif |
582 #endif |
584 |
583 |
585 // Iterators specialized to particular subtypes |
584 // Iterators specialized to particular subtypes |
586 // of ExtendedOopClosure, to avoid closure virtual calls. |
585 // of ExtendedOopClosure, to avoid closure virtual calls. |
587 #define Klass_OOP_OOP_ITERATE_DECL(OopClosureType, nv_suffix) \ |
586 #define Klass_OOP_OOP_ITERATE_DECL(OopClosureType, nv_suffix) \ |
588 virtual int oop_oop_iterate##nv_suffix(oop obj, OopClosureType* closure) = 0; \ |
587 virtual void oop_oop_iterate##nv_suffix(oop obj, OopClosureType* closure) = 0; \ |
589 /* Iterates "closure" over all the oops in "obj" (of type "this") within "mr". */ \ |
588 /* Iterates "closure" over all the oops in "obj" (of type "this") within "mr". */ \ |
590 virtual int oop_oop_iterate_bounded##nv_suffix(oop obj, OopClosureType* closure, MemRegion mr) = 0; |
589 virtual void oop_oop_iterate_bounded##nv_suffix(oop obj, OopClosureType* closure, MemRegion mr) = 0; |
591 |
590 |
592 ALL_OOP_OOP_ITERATE_CLOSURES_1(Klass_OOP_OOP_ITERATE_DECL) |
591 ALL_OOP_OOP_ITERATE_CLOSURES_1(Klass_OOP_OOP_ITERATE_DECL) |
593 ALL_OOP_OOP_ITERATE_CLOSURES_2(Klass_OOP_OOP_ITERATE_DECL) |
592 ALL_OOP_OOP_ITERATE_CLOSURES_2(Klass_OOP_OOP_ITERATE_DECL) |
594 |
593 |
595 #if INCLUDE_ALL_GCS |
594 #if INCLUDE_ALL_GCS |
596 #define Klass_OOP_OOP_ITERATE_DECL_BACKWARDS(OopClosureType, nv_suffix) \ |
595 #define Klass_OOP_OOP_ITERATE_DECL_BACKWARDS(OopClosureType, nv_suffix) \ |
597 virtual int oop_oop_iterate_backwards##nv_suffix(oop obj, OopClosureType* closure) = 0; |
596 virtual void oop_oop_iterate_backwards##nv_suffix(oop obj, OopClosureType* closure) = 0; |
598 |
597 |
599 ALL_OOP_OOP_ITERATE_CLOSURES_1(Klass_OOP_OOP_ITERATE_DECL_BACKWARDS) |
598 ALL_OOP_OOP_ITERATE_CLOSURES_1(Klass_OOP_OOP_ITERATE_DECL_BACKWARDS) |
600 ALL_OOP_OOP_ITERATE_CLOSURES_2(Klass_OOP_OOP_ITERATE_DECL_BACKWARDS) |
599 ALL_OOP_OOP_ITERATE_CLOSURES_2(Klass_OOP_OOP_ITERATE_DECL_BACKWARDS) |
601 #endif // INCLUDE_ALL_GCS |
600 #endif // INCLUDE_ALL_GCS |
602 |
601 |
659 |
658 |
660 // Oop iteration macros for declarations. |
659 // Oop iteration macros for declarations. |
661 // Used to generate declarations in the *Klass header files. |
660 // Used to generate declarations in the *Klass header files. |
662 |
661 |
663 #define OOP_OOP_ITERATE_DECL(OopClosureType, nv_suffix) \ |
662 #define OOP_OOP_ITERATE_DECL(OopClosureType, nv_suffix) \ |
664 int oop_oop_iterate##nv_suffix(oop obj, OopClosureType* closure); \ |
663 void oop_oop_iterate##nv_suffix(oop obj, OopClosureType* closure); \ |
665 int oop_oop_iterate_bounded##nv_suffix(oop obj, OopClosureType* closure, MemRegion mr); |
664 void oop_oop_iterate_bounded##nv_suffix(oop obj, OopClosureType* closure, MemRegion mr); |
666 |
665 |
667 #if INCLUDE_ALL_GCS |
666 #if INCLUDE_ALL_GCS |
668 #define OOP_OOP_ITERATE_DECL_BACKWARDS(OopClosureType, nv_suffix) \ |
667 #define OOP_OOP_ITERATE_DECL_BACKWARDS(OopClosureType, nv_suffix) \ |
669 int oop_oop_iterate_backwards##nv_suffix(oop obj, OopClosureType* closure); |
668 void oop_oop_iterate_backwards##nv_suffix(oop obj, OopClosureType* closure); |
670 #endif // INCLUDE_ALL_GCS |
669 #endif // INCLUDE_ALL_GCS |
671 |
670 |
672 |
671 |
673 // Oop iteration macros for definitions. |
672 // Oop iteration macros for definitions. |
674 // Used to generate definitions in the *Klass.inline.hpp files. |
673 // Used to generate definitions in the *Klass.inline.hpp files. |
675 |
674 |
676 #define OOP_OOP_ITERATE_DEFN(KlassType, OopClosureType, nv_suffix) \ |
675 #define OOP_OOP_ITERATE_DEFN(KlassType, OopClosureType, nv_suffix) \ |
677 int KlassType::oop_oop_iterate##nv_suffix(oop obj, OopClosureType* closure) { \ |
676 void KlassType::oop_oop_iterate##nv_suffix(oop obj, OopClosureType* closure) { \ |
678 return oop_oop_iterate<nvs_to_bool(nv_suffix)>(obj, closure); \ |
677 oop_oop_iterate<nvs_to_bool(nv_suffix)>(obj, closure); \ |
679 } |
678 } |
680 |
679 |
681 #if INCLUDE_ALL_GCS |
680 #if INCLUDE_ALL_GCS |
682 #define OOP_OOP_ITERATE_DEFN_BACKWARDS(KlassType, OopClosureType, nv_suffix) \ |
681 #define OOP_OOP_ITERATE_DEFN_BACKWARDS(KlassType, OopClosureType, nv_suffix) \ |
683 int KlassType::oop_oop_iterate_backwards##nv_suffix(oop obj, OopClosureType* closure) { \ |
682 void KlassType::oop_oop_iterate_backwards##nv_suffix(oop obj, OopClosureType* closure) { \ |
684 return oop_oop_iterate_reverse<nvs_to_bool(nv_suffix)>(obj, closure); \ |
683 oop_oop_iterate_reverse<nvs_to_bool(nv_suffix)>(obj, closure); \ |
685 } |
684 } |
686 #else |
685 #else |
687 #define OOP_OOP_ITERATE_DEFN_BACKWARDS(KlassType, OopClosureType, nv_suffix) |
686 #define OOP_OOP_ITERATE_DEFN_BACKWARDS(KlassType, OopClosureType, nv_suffix) |
688 #endif |
687 #endif |
689 |
688 |
690 #define OOP_OOP_ITERATE_DEFN_BOUNDED(KlassType, OopClosureType, nv_suffix) \ |
689 #define OOP_OOP_ITERATE_DEFN_BOUNDED(KlassType, OopClosureType, nv_suffix) \ |
691 int KlassType::oop_oop_iterate_bounded##nv_suffix(oop obj, OopClosureType* closure, MemRegion mr) { \ |
690 void KlassType::oop_oop_iterate_bounded##nv_suffix(oop obj, OopClosureType* closure, MemRegion mr) { \ |
692 return oop_oop_iterate_bounded<nvs_to_bool(nv_suffix)>(obj, closure, mr); \ |
691 oop_oop_iterate_bounded<nvs_to_bool(nv_suffix)>(obj, closure, mr); \ |
693 } |
692 } |
694 |
693 |
695 #endif // SHARE_VM_OOPS_KLASS_HPP |
694 #endif // SHARE_VM_OOPS_KLASS_HPP |