changeset 3654:4123781869da

More handles, fixed broken cast.
author Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
date Thu, 17 Nov 2011 00:28:31 +0100
parents 6aef50c6d967
children 2a0cb564e470
files src/share/vm/graal/graalEnv.cpp src/share/vm/graal/graalEnv.hpp
diffstat 2 files changed, 20 insertions(+), 24 deletions(-) [+]
line wrap: on
line diff
--- a/src/share/vm/graal/graalEnv.cpp	Thu Nov 17 00:01:56 2011 +0100
+++ b/src/share/vm/graal/graalEnv.cpp	Thu Nov 17 00:28:31 2011 +0100
@@ -49,27 +49,27 @@
 //
 // Note: the logic of this method should mirror the logic of
 // constantPoolOopDesc::verify_constant_pool_resolve.
-bool GraalEnv::check_klass_accessibility(klassOop accessing_klass, klassOop resolved_klass) {
-  if (accessing_klass->klass_part()->oop_is_objArray()) {
-    accessing_klass = ((objArrayKlass*)accessing_klass)->bottom_klass();
+bool GraalEnv::check_klass_accessibility(KlassHandle accessing_klass, KlassHandle resolved_klass) {
+  if (accessing_klass->oop_is_objArray()) {
+    accessing_klass = objArrayKlass::cast(accessing_klass())->bottom_klass();
   }
-  if (!accessing_klass->klass_part()->oop_is_instance()) {
+  if (!accessing_klass->oop_is_instance()) {
     return true;
   }
 
-  if (resolved_klass->klass_part()->oop_is_objArray()) {
+  if (resolved_klass->oop_is_objArray()) {
     // Find the element klass, if this is an array.
-    resolved_klass = objArrayKlass::cast(resolved_klass)->bottom_klass();
+    resolved_klass = objArrayKlass::cast(resolved_klass())->bottom_klass();
   }
-  if (resolved_klass->klass_part()->oop_is_instance()) {
-    return Reflection::verify_class_access(accessing_klass, resolved_klass, true);
+  if (resolved_klass->oop_is_instance()) {
+    return Reflection::verify_class_access(accessing_klass(), resolved_klass(), true);
   }
   return true;
 }
 
 // ------------------------------------------------------------------
 // ciEnv::get_klass_by_name_impl
-klassOop GraalEnv::get_klass_by_name_impl(KlassHandle accessing_klass,
+KlassHandle GraalEnv::get_klass_by_name_impl(KlassHandle accessing_klass,
                                           constantPoolHandle cpool,
                                           Symbol* sym,
                                           bool require_local) {
@@ -82,7 +82,7 @@
     // Call recursive to keep scope of strippedsym.
     TempNewSymbol strippedsym = SymbolTable::new_symbol(sym->as_utf8()+1,
                     sym->utf8_length()-2,
-                    CHECK_NULL);
+                    CHECK_(KlassHandle()));
     return get_klass_by_name_impl(accessing_klass, cpool, strippedsym, require_local);
   }
 
@@ -99,9 +99,9 @@
     MutexLocker ml(Compile_lock);
     klassOop kls;
     if (!require_local) {
-      kls = SystemDictionary::find_constrained_instance_or_array_klass(sym, loader, CHECK_NULL);
+      kls = SystemDictionary::find_constrained_instance_or_array_klass(sym, loader, CHECK_(KlassHandle()));
     } else {
-      kls = SystemDictionary::find_instance_or_array_klass(sym, loader, domain, CHECK_NULL);
+      kls = SystemDictionary::find_instance_or_array_klass(sym, loader, domain, CHECK_(KlassHandle()));
     }
     found_klass = KlassHandle(THREAD, kls);
   }
@@ -118,7 +118,7 @@
     // Build it on the fly if the element class exists.
     TempNewSymbol elem_sym = SymbolTable::new_symbol(sym->as_utf8()+1,
                                                  sym->utf8_length()-1,
-                                                 CHECK_NULL);
+                                                 CHECK_(KlassHandle()));
 
     // Get element ciKlass recursively.
     KlassHandle elem_klass =
@@ -128,7 +128,7 @@
                              require_local);
     if (!elem_klass.is_null()) {
       // Now make an array for it
-      return elem_klass->array_klass(CHECK_NULL);
+      return elem_klass->array_klass(CHECK_(KlassHandle()));
     }
   }
 
@@ -163,7 +163,7 @@
 // ciEnv::get_klass_by_index_impl
 //
 // Implementation of get_klass_by_index.
-klassOop GraalEnv::get_klass_by_index_impl(constantPoolHandle cpool,
+KlassHandle GraalEnv::get_klass_by_index_impl(constantPoolHandle cpool,
                                         int index,
                                         bool& is_accessible,
                                         KlassHandle accessor) {
@@ -209,16 +209,12 @@
       // Linked locally, and we must also check public/private, etc.
       is_accessible = check_klass_accessibility(accessor(), k());
     }
-    return k();
+    return k;
   }
 
-  // Check for prior unloaded klass.  The SystemDictionary's answers
-  // can vary over time but the compiler needs consistency.
-  Symbol* name = klass()->klass_part()->name();
-
   // It is known to be accessible, since it was found in the constant pool.
   is_accessible = true;
-  return klass();
+  return klass;
 }
 
 // ------------------------------------------------------------------
--- a/src/share/vm/graal/graalEnv.hpp	Thu Nov 17 00:01:56 2011 +0100
+++ b/src/share/vm/graal/graalEnv.hpp	Thu Nov 17 00:28:31 2011 +0100
@@ -76,11 +76,11 @@
 private:
 
   // Implementation methods for loading and constant pool access.
-  static klassOop get_klass_by_name_impl(KlassHandle accessing_klass,
+  static KlassHandle get_klass_by_name_impl(KlassHandle accessing_klass,
                                   constantPoolHandle cpool,
                                   Symbol* klass_name,
                                   bool require_local);
-  static klassOop   get_klass_by_index_impl(constantPoolHandle cpool,
+  static KlassHandle   get_klass_by_index_impl(constantPoolHandle cpool,
                                      int klass_index,
                                      bool& is_accessible,
                                      KlassHandle loading_klass);
@@ -91,7 +91,7 @@
                                       instanceKlassHandle loading_klass);
 
   // Helper methods
-  static bool       check_klass_accessibility(klassOop accessing_klass, klassOop resolved_klassOop);
+  static bool       check_klass_accessibility(KlassHandle accessing_klass, KlassHandle resolved_klassOop);
   static methodHandle  lookup_method(instanceKlassHandle  accessor,
                            instanceKlassHandle  holder,
                            Symbol*         name,