# HG changeset patch # User kvn # Date 1363365217 25200 # Node ID 07119340f80f77dfcb03fa568641e80b43d4be74 # Parent 238f85fd3c98f3dbd4fb9e8bb2e1be968d988bb5 8009699: Methodhandle lookup Reviewed-by: ahgross, jrose, jdn diff -r 238f85fd3c98 -r 07119340f80f src/share/vm/prims/methodHandles.cpp --- a/src/share/vm/prims/methodHandles.cpp Tue Mar 12 14:45:11 2013 -0700 +++ b/src/share/vm/prims/methodHandles.cpp Fri Mar 15 09:33:37 2013 -0700 @@ -645,6 +645,13 @@ } } methodHandle m = result.resolved_method(); + KlassHandle mklass = m->method_holder(); + KlassHandle receiver_limit = result.resolved_klass(); + if (receiver_limit.is_null() || + // ignore passed-in limit; interfaces are interconvertible + receiver_limit->is_interface() && mklass->is_interface()) { + receiver_limit = mklass; + } oop vmtarget = NULL; int vmindex = methodOopDesc::nonvirtual_vtable_index; if (defc->is_interface()) { @@ -665,6 +672,7 @@ java_lang_invoke_MemberName::set_vmtarget(mname(), vmtarget); java_lang_invoke_MemberName::set_vmindex(mname(), vmindex); java_lang_invoke_MemberName::set_modifiers(mname(), mods); + java_lang_invoke_MemberName::set_clazz(mname(), receiver_limit->java_mirror()); DEBUG_ONLY(KlassHandle junk1; int junk2); assert(decode_MemberName(mname(), junk1, junk2) == result.resolved_method(), "properly stored for later decoding");