src/share/vm/oops/klass.inline.hpp

Print this page
rev 6796 : [mq]: templateOopIterate
rev 6797 : [mq]: vaTests
rev 6798 : [mq]: oneSwitch
rev 6799 : [mq]: latestChanges
rev 6800 : [mq]: replaceTemplateDispatchWithMacroDispatch
rev 6802 : [mq]: encodeKlassFixes

@@ -24,12 +24,18 @@
 
 #ifndef SHARE_VM_OOPS_KLASS_INLINE_HPP
 #define SHARE_VM_OOPS_KLASS_INLINE_HPP
 
 #include "memory/universe.hpp"
+#include "oops/instanceClassLoaderKlass.inline.hpp"
+#include "oops/instanceKlass.inline.hpp"
+#include "oops/instanceMirrorKlass.inline.hpp"
+#include "oops/instanceRefKlass.inline.hpp"
 #include "oops/klass.hpp"
 #include "oops/markOop.hpp"
+#include "oops/objArrayKlass.inline.hpp"
+#include "oops/typeArrayKlass.inline.hpp"
 
 inline void Klass::set_prototype_header(markOop header) {
   assert(!header->has_bias_pattern() || oop_is_instance(), "biased locking currently only supported for Java instances");
   _prototype_header = header;
 }

@@ -69,6 +75,19 @@
 
 inline Klass* Klass::decode_klass(narrowKlass v) {
   return is_null(v) ? (Klass*)NULL : decode_klass_not_null(v);
 }
 
+#define CONCRETE_KLASS_DO_AND_RETURN(the_klass, todo) \
+  do { \
+    switch ((the_klass)->dispatch_tag()) { \
+    case Klass::_instance:                         return InstanceKlass::cast(the_klass)->todo; \
+    case Klass::_instance_ref:                  return InstanceRefKlass::cast(the_klass)->todo; \
+    case Klass::_instance_mirror:            return InstanceMirrorKlass::cast(the_klass)->todo; \
+    case Klass::_instance_class_loader: return InstanceClassLoaderKlass::cast(the_klass)->todo; \
+    case Klass::_obj_array:                        return ObjArrayKlass::cast(the_klass)->todo; \
+    case Klass::_type_array:                      return TypeArrayKlass::cast(the_klass)->todo; \
+    default: fatal("Incorrect dispatch index"); return 0; \
+    }   \
+  } while (false)
+
 #endif // SHARE_VM_OOPS_KLASS_INLINE_HPP