Mercurial > hg > release > icedtea7-forest-2.1 > hotspot
changeset 2992:2c4981784101 icedtea-2.1.8
8009699: Methodhandle lookup
Reviewed-by: ahgross, jrose, jdn
author | kvn |
---|---|
date | Fri, 15 Mar 2013 09:33:37 -0700 |
parents | a5d3a94e327f |
children | 2e9917f8c2b2 |
files | src/share/vm/prims/methodHandles.cpp |
diffstat | 1 files changed, 8 insertions(+), 0 deletions(-) [+] |
line wrap: on
line diff
--- 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");