src/share/vm/interpreter/linkResolver.cpp
Index Unified diffs Context diffs Sdiffs Wdiffs Patch New Old Previous File Next File hotspot Cdiff src/share/vm/interpreter/linkResolver.cpp

src/share/vm/interpreter/linkResolver.cpp

Print this page

        

*** 96,106 **** methodHandle resolved_method, methodHandle selected_method, CallKind kind, int index, TRAPS) { ! assert(resolved_method->signature() == selected_method->signature(), "signatures must correspond"); _resolved_klass = resolved_klass; _selected_klass = selected_klass; _resolved_method = resolved_method; _selected_method = selected_method; _call_kind = kind; --- 96,106 ---- methodHandle resolved_method, methodHandle selected_method, CallKind kind, int index, TRAPS) { ! assert(resolved_method->signature()->equals(selected_method->signature()), "signatures must correspond"); _resolved_klass = resolved_klass; _selected_klass = selected_klass; _resolved_method = resolved_method; _selected_method = selected_method; _call_kind = kind;
*** 166,179 **** #ifdef ASSERT // Ensure that this is really the case. KlassHandle object_klass = SystemDictionary::Object_klass(); Method * object_resolved_method = object_klass()->vtable()->method_at(index); ! assert(object_resolved_method->name() == resolved_method->name(), err_msg("Object and interface method names should match at vtable index %d, %s != %s", index, object_resolved_method->name()->as_C_string(), resolved_method->name()->as_C_string())); ! assert(object_resolved_method->signature() == resolved_method->signature(), err_msg("Object and interface method signatures should match at vtable index %d, %s != %s", index, object_resolved_method->signature()->as_C_string(), resolved_method->signature()->as_C_string())); #endif // ASSERT kind = CallInfo::vtable_call; --- 166,179 ---- #ifdef ASSERT // Ensure that this is really the case. KlassHandle object_klass = SystemDictionary::Object_klass(); Method * object_resolved_method = object_klass()->vtable()->method_at(index); ! assert(object_resolved_method->name()->equals(resolved_method->name()), err_msg("Object and interface method names should match at vtable index %d, %s != %s", index, object_resolved_method->name()->as_C_string(), resolved_method->name()->as_C_string())); ! assert(object_resolved_method->signature()->equals(resolved_method->signature()), err_msg("Object and interface method signatures should match at vtable index %d, %s != %s", index, object_resolved_method->signature()->as_C_string(), resolved_method->signature()->as_C_string())); #endif // ASSERT kind = CallInfo::vtable_call;
*** 460,470 **** // is java.lang.Object and the method is "clone", set the flags // to public. // // We'll check for the method name first, as that's most likely // to be false (so we'll short-circuit out of these tests). ! if (sel_method->name() == vmSymbols::clone_name() && sel_klass() == SystemDictionary::Object_klass() && resolved_klass->oop_is_array()) { // We need to change "protected" to "public". assert(flags.is_protected(), "clone not protected?"); jint new_flags = flags.as_int(); --- 460,470 ---- // is java.lang.Object and the method is "clone", set the flags // to public. // // We'll check for the method name first, as that's most likely // to be false (so we'll short-circuit out of these tests). ! if (sel_method->name()->equals(vmSymbols::clone_name()) && sel_klass() == SystemDictionary::Object_klass() && resolved_klass->oop_is_array()) { // We need to change "protected" to "public". assert(flags.is_protected(), "clone not protected?"); jint new_flags = flags.as_int();
*** 898,908 **** if (!resolved_klass->is_interface()) { resolve_method(resolved_method, resolved_klass, method_name, method_signature, current_klass, check_access, false, CHECK); } else { resolve_interface_method(resolved_method, resolved_klass, method_name, method_signature, current_klass, check_access, false, CHECK); } ! assert(resolved_method->name() != vmSymbols::class_initializer_name(), "should have been checked in verifier"); // check if static if (!resolved_method->is_static()) { ResourceMark rm(THREAD); char buf[200]; --- 898,908 ---- if (!resolved_klass->is_interface()) { resolve_method(resolved_method, resolved_klass, method_name, method_signature, current_klass, check_access, false, CHECK); } else { resolve_interface_method(resolved_method, resolved_klass, method_name, method_signature, current_klass, check_access, false, CHECK); } ! assert(resolved_method->name()->not_equals(vmSymbols::class_initializer_name()), "should have been checked in verifier"); // check if static if (!resolved_method->is_static()) { ResourceMark rm(THREAD); char buf[200];
*** 938,948 **** } else { resolve_interface_method(resolved_method, resolved_klass, method_name, method_signature, current_klass, check_access, true, CHECK); } // check if method name is <init>, that it is found in same klass as static type ! if (resolved_method->name() == vmSymbols::object_initializer_name() && resolved_method->method_holder() != resolved_klass()) { ResourceMark rm(THREAD); Exceptions::fthrow( THREAD_AND_LOCATION, vmSymbols::java_lang_NoSuchMethodError(), --- 938,948 ---- } else { resolve_interface_method(resolved_method, resolved_klass, method_name, method_signature, current_klass, check_access, true, CHECK); } // check if method name is <init>, that it is found in same klass as static type ! if (resolved_method->name()->equals(vmSymbols::object_initializer_name()) && resolved_method->method_holder() != resolved_klass()) { ResourceMark rm(THREAD); Exceptions::fthrow( THREAD_AND_LOCATION, vmSymbols::java_lang_NoSuchMethodError(),
*** 1032,1042 **** // This check is not performed for super.invoke for interface methods // in super interfaces. current_klass->is_subclass_of(resolved_klass()) && current_klass() != resolved_klass() && // c) check if the method is not <init> ! resolved_method->name() != vmSymbols::object_initializer_name()) { // Lookup super method KlassHandle super_klass(THREAD, current_klass->super()); lookup_instance_method_in_klasses(sel_method, super_klass, resolved_method->name(), resolved_method->signature(), CHECK); --- 1032,1042 ---- // This check is not performed for super.invoke for interface methods // in super interfaces. current_klass->is_subclass_of(resolved_klass()) && current_klass() != resolved_klass() && // c) check if the method is not <init> ! resolved_method->name()->not_equals(vmSymbols::object_initializer_name())) { // Lookup super method KlassHandle super_klass(THREAD, current_klass->super()); lookup_instance_method_in_klasses(sel_method, super_klass, resolved_method->name(), resolved_method->signature(), CHECK);
*** 1106,1117 **** Symbol* method_name, Symbol* method_signature, KlassHandle current_klass, bool check_access, TRAPS) { // normal method resolution resolve_method(resolved_method, resolved_klass, method_name, method_signature, current_klass, check_access, true, CHECK); ! assert(resolved_method->name() != vmSymbols::object_initializer_name(), "should have been checked in verifier"); ! assert(resolved_method->name() != vmSymbols::class_initializer_name (), "should have been checked in verifier"); // check if private interface method if (resolved_klass->is_interface() && resolved_method->is_private()) { ResourceMark rm(THREAD); char buf[200]; --- 1106,1117 ---- Symbol* method_name, Symbol* method_signature, KlassHandle current_klass, bool check_access, TRAPS) { // normal method resolution resolve_method(resolved_method, resolved_klass, method_name, method_signature, current_klass, check_access, true, CHECK); ! assert(resolved_method->name()->not_equals(vmSymbols::object_initializer_name()), "should have been checked in verifier"); ! assert(resolved_method->name()->not_equals(vmSymbols::class_initializer_name ()), "should have been checked in verifier"); // check if private interface method if (resolved_klass->is_interface() && resolved_method->is_private()) { ResourceMark rm(THREAD); char buf[200];
*** 1262,1273 **** void LinkResolver::linktime_resolve_interface_method(methodHandle& resolved_method, KlassHandle resolved_klass, Symbol* method_name, Symbol* method_signature, KlassHandle current_klass, bool check_access, TRAPS) { // normal interface method resolution resolve_interface_method(resolved_method, resolved_klass, method_name, method_signature, current_klass, check_access, true, CHECK); ! assert(resolved_method->name() != vmSymbols::object_initializer_name(), "should have been checked in verifier"); ! assert(resolved_method->name() != vmSymbols::class_initializer_name (), "should have been checked in verifier"); } // throws runtime exceptions void LinkResolver::runtime_resolve_interface_method(CallInfo& result, methodHandle resolved_method, KlassHandle resolved_klass, Handle recv, KlassHandle recv_klass, bool check_null_and_abstract, TRAPS) { --- 1262,1273 ---- void LinkResolver::linktime_resolve_interface_method(methodHandle& resolved_method, KlassHandle resolved_klass, Symbol* method_name, Symbol* method_signature, KlassHandle current_klass, bool check_access, TRAPS) { // normal interface method resolution resolve_interface_method(resolved_method, resolved_klass, method_name, method_signature, current_klass, check_access, true, CHECK); ! assert(resolved_method->name()->not_equals(vmSymbols::object_initializer_name()), "should have been checked in verifier"); ! assert(resolved_method->name()->not_equals(vmSymbols::class_initializer_name ()), "should have been checked in verifier"); } // throws runtime exceptions void LinkResolver::runtime_resolve_interface_method(CallInfo& result, methodHandle resolved_method, KlassHandle resolved_klass, Handle recv, KlassHandle recv_klass, bool check_null_and_abstract, TRAPS) {
src/share/vm/interpreter/linkResolver.cpp
Index Unified diffs Context diffs Sdiffs Wdiffs Patch New Old Previous File Next File