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()) { |