# HG changeset patch # User Thomas Wuerthinger # Date 1321486111 -3600 # Node ID 4123781869da513b65ac53549652955952136e4e # Parent 6aef50c6d9670a48e15cbb0c99720b7a7c8457f7 More handles, fixed broken cast. diff -r 6aef50c6d967 -r 4123781869da src/share/vm/graal/graalEnv.cpp --- 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; } // ------------------------------------------------------------------ diff -r 6aef50c6d967 -r 4123781869da src/share/vm/graal/graalEnv.hpp --- 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,