# HG changeset patch # User kvn # Date 1363365217 25200 # Node ID 2c49817841014cca32279dc90a61654415a3391c # Parent a5d3a94e327f4bbcac002e094387373075e762fb 8009699: Methodhandle lookup Reviewed-by: ahgross, jrose, jdn diff -r a5d3a94e327f -r 2c4981784101 src/share/vm/prims/methodHandles.cpp --- a/src/share/vm/prims/methodHandles.cpp Wed Mar 06 16:30:38 2013 -0800 +++ b/src/share/vm/prims/methodHandles.cpp Fri Mar 15 09:33:37 2013 -0700 @@ -674,6 +674,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()) { @@ -694,6 +701,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");