< 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:

@@ -649,6 +649,41 @@
   // barriers used by klass_oop_store
   void klass_update_barrier_set(oop v);
   void klass_update_barrier_set_pre(oop* p, oop v);
 };
 
+// Helper to convert the oop iterate macro suffixes into bool values that can be used by template functions.
+#define nvs_nv_to_bool true
+#define nvs_v_to_bool  false
+#define nvs_to_bool(nv_suffix) nvs##nv_suffix##_to_bool
+
+// Oop iteration macros for declarations.
+#define OOP_OOP_ITERATE_DECL(OopClosureType, nv_suffix)                           \
+  int oop_oop_iterate##nv_suffix(oop obj, OopClosureType* blk);                   \
+  int oop_oop_iterate##nv_suffix##_m(oop obj, OopClosureType* blk, MemRegion mr);
+
+#if INCLUDE_ALL_GCS
+#define OOP_OOP_ITERATE_BACKWARDS_DECL(OopClosureType, nv_suffix) \
+  int oop_oop_iterate_backwards##nv_suffix(oop obj, OopClosureType* blk);
+#endif // INCLUDE_ALL_GCS
+
+// Oop iteration macros for definitions.
+#define OOP_OOP_ITERATE_DEFN(KlassType, OopClosureType, nv_suffix)                 \
+int KlassType::oop_oop_iterate##nv_suffix(oop obj, OopClosureType* closure) {      \
+  return oop_oop_iterate<nvs_to_bool(nv_suffix)>(obj, closure);                    \
+}
+
+#if INCLUDE_ALL_GCS
+#define OOP_OOP_ITERATE_BACKWARDS_DEFN(KlassType, OopClosureType, nv_suffix)             \
+int KlassType::oop_oop_iterate_backwards##nv_suffix(oop obj, OopClosureType* closure) {  \
+  return oop_oop_iterate_reverse<nvs_to_bool(nv_suffix)>(obj, closure);                  \
+}
+#else
+#define OOP_OOP_ITERATE_BACKWARDS_DEFN(KlassType, OopClosureType, nv_suffix)
+#endif
+
+#define OOP_OOP_ITERATE_DEFN_m(KlassType, OopClosureType, nv_suffix)                             \
+int KlassType::oop_oop_iterate##nv_suffix##_m(oop obj, OopClosureType* closure, MemRegion mr) {  \
+  return oop_oop_iterate_bounded<nvs_to_bool(nv_suffix)>(obj, closure, mr);                      \
+}
+
 #endif // SHARE_VM_OOPS_KLASS_HPP
< prev index next >