changeset 6277:dddcdb7ae209

removed klass::is_leaf_class() and replaced it's usage in Graal (the only usage) with an explicit test to ignore interface classes
author Doug Simon <doug.simon@oracle.com>
date Wed, 22 Aug 2012 11:00:31 +0200
parents 03c4c25ae726
children 4f9574b2893e
files graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/meta/HotSpotResolvedJavaType.java src/share/vm/graal/graalCompilerToVM.cpp src/share/vm/oops/instanceKlass.hpp src/share/vm/oops/klass.hpp src/share/vm/oops/klassKlass.hpp
diffstat 5 files changed, 4 insertions(+), 7 deletions(-) [+]
line wrap: on
line diff
--- a/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/meta/HotSpotResolvedJavaType.java	Tue Aug 21 11:53:04 2012 +0200
+++ b/graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/meta/HotSpotResolvedJavaType.java	Wed Aug 22 11:00:31 2012 +0200
@@ -88,7 +88,9 @@
         if (isArrayClass()) {
             return Modifier.isFinal(componentType().accessFlags()) ? this : null;
         } else {
-            return (ResolvedJavaType) HotSpotGraalRuntime.getInstance().getCompilerToVM().JavaType_uniqueConcreteSubtype(this);
+            ResolvedJavaType subtype = (ResolvedJavaType) HotSpotGraalRuntime.getInstance().getCompilerToVM().JavaType_uniqueConcreteSubtype(this);
+            assert subtype == null || !subtype.isInterface();
+            return subtype;
         }
     }
 
--- a/src/share/vm/graal/graalCompilerToVM.cpp	Tue Aug 21 11:53:04 2012 +0200
+++ b/src/share/vm/graal/graalCompilerToVM.cpp	Wed Aug 22 11:00:31 2012 +0200
@@ -640,7 +640,7 @@
   VM_ENTRY_MARK;
   KlassHandle klass_handle(java_lang_Class::as_klassOop(HotSpotResolvedJavaType::javaMirror(klass)));
   Klass *up_cast = klass_handle->up_cast_abstract();
-  if (up_cast->is_leaf_class()) {
+  if (!up_cast->is_interface() && up_cast->subklass() == NULL) {
     return JNIHandles::make_local(GraalCompiler::get_JavaType(up_cast, THREAD)());
   }
   return NULL;
--- a/src/share/vm/oops/instanceKlass.hpp	Tue Aug 21 11:53:04 2012 +0200
+++ b/src/share/vm/oops/instanceKlass.hpp	Wed Aug 22 11:00:31 2012 +0200
@@ -739,7 +739,6 @@
   void process_interfaces(Thread *thread);
 
   // virtual operations from Klass
-  bool is_leaf_class() const               { return _subklass == NULL; }
   objArrayOop compute_secondary_supers(int num_extra_slots, TRAPS);
   bool compute_is_subtype_of(klassOop k);
   bool can_be_primary_super_slow() const;
--- a/src/share/vm/oops/klass.hpp	Tue Aug 21 11:53:04 2012 +0200
+++ b/src/share/vm/oops/klass.hpp	Wed Aug 22 11:00:31 2012 +0200
@@ -554,9 +554,6 @@
   // computes the subtype relationship
   virtual bool compute_is_subtype_of(klassOop k);
  public:
-  // subclass accessor (here for convenience; undefined for non-klass objects)
-  virtual bool is_leaf_class() const { fatal("not a class"); return false; }
- public:
   // ALL FUNCTIONS BELOW THIS POINT ARE DISPATCHED FROM AN OOP
   // These functions describe behavior for the oop not the KLASS.
 
--- a/src/share/vm/oops/klassKlass.hpp	Tue Aug 21 11:53:04 2012 +0200
+++ b/src/share/vm/oops/klassKlass.hpp	Wed Aug 22 11:00:31 2012 +0200
@@ -39,7 +39,6 @@
  public:
   // Testing
   bool oop_is_klass()  const { return true; }
-  bool is_leaf_class() const { return true; }
 
   // Sizing
   int oop_size(oop obj) const;