comparison src/share/vm/prims/methodHandles.cpp @ 12823:ac9cb1d5a202

8009130: Lambda: Fix access controls, loader constraints. Summary: New default methods list with inherited superinterface methods Reviewed-by: minqi, sspitsyn, coleenp
author acorn
date Mon, 07 Oct 2013 12:20:28 -0400
parents b2e698d2276c
children d95eca175eff
comparison
equal deleted inserted replaced
12822:cc4f5f8d885e 12823:ac9cb1d5a202
185 vmindex = info.itable_index(); 185 vmindex = info.itable_index();
186 // More importantly, the itable index only works with the method holder. 186 // More importantly, the itable index only works with the method holder.
187 receiver_limit = m->method_holder(); 187 receiver_limit = m->method_holder();
188 assert(receiver_limit->verify_itable_index(vmindex), ""); 188 assert(receiver_limit->verify_itable_index(vmindex), "");
189 flags |= IS_METHOD | (JVM_REF_invokeInterface << REFERENCE_KIND_SHIFT); 189 flags |= IS_METHOD | (JVM_REF_invokeInterface << REFERENCE_KIND_SHIFT);
190 if (TraceInvokeDynamic) {
191 ResourceMark rm;
192 tty->print_cr("memberName: invokeinterface method_holder::method: %s, receiver: %s, itableindex: %d, access_flags:",
193 Method::name_and_sig_as_C_string(receiver_limit(), m->name(), m->signature()),
194 receiver_limit()->internal_name(), vmindex);
195 m->access_flags().print_on(tty);
196 if (!m->is_abstract()) {
197 tty->print("default");
198 }
199 tty->cr();
200 }
190 break; 201 break;
191 202
192 case CallInfo::vtable_call: 203 case CallInfo::vtable_call:
193 vmindex = info.vtable_index(); 204 vmindex = info.vtable_index();
194 flags |= IS_METHOD | (JVM_REF_invokeVirtual << REFERENCE_KIND_SHIFT); 205 flags |= IS_METHOD | (JVM_REF_invokeVirtual << REFERENCE_KIND_SHIFT);
195 assert(receiver_limit->is_subtype_of(m->method_holder()), "virtual call must be type-safe"); 206 assert(receiver_limit->is_subtype_of(m->method_holder()), "virtual call must be type-safe");
207 if (TraceInvokeDynamic) {
208 ResourceMark rm;
209 tty->print_cr("memberName: invokevirtual method_holder::method: %s, receiver: %s, vtableindex: %d, access_flags:",
210 Method::name_and_sig_as_C_string(receiver_limit(), m->name(), m->signature()),
211 receiver_limit()->internal_name(), vmindex);
212 m->access_flags().print_on(tty);
213 if (m->is_default_method()) {
214 tty->print("default");
215 }
216 tty->cr();
217 }
196 break; 218 break;
197 219
198 case CallInfo::direct_call: 220 case CallInfo::direct_call:
199 vmindex = Method::nonvirtual_vtable_index; 221 vmindex = Method::nonvirtual_vtable_index;
200 if (m->is_static()) { 222 if (m->is_static()) {