< prev index next >

src/hotspot/share/prims/methodHandles.cpp

Print this page

*** 217,227 **** oop MethodHandles::init_method_MemberName(Handle mname, CallInfo& info) { assert(info.resolved_appendix().is_null(), "only normal methods here"); methodHandle m = info.resolved_method(); assert(m.not_null(), "null method handle"); ! Klass* m_klass = m->method_holder(); assert(m_klass != NULL, "null holder for method handle"); int flags = (jushort)( m->access_flags().as_short() & JVM_RECOGNIZED_METHOD_MODIFIERS ); int vmindex = Method::invalid_vtable_index; switch (info.call_kind()) { --- 217,227 ---- oop MethodHandles::init_method_MemberName(Handle mname, CallInfo& info) { assert(info.resolved_appendix().is_null(), "only normal methods here"); methodHandle m = info.resolved_method(); assert(m.not_null(), "null method handle"); ! InstanceKlass* m_klass = m->method_holder(); assert(m_klass != NULL, "null holder for method handle"); int flags = (jushort)( m->access_flags().as_short() & JVM_RECOGNIZED_METHOD_MODIFIERS ); int vmindex = Method::invalid_vtable_index; switch (info.call_kind()) {
*** 255,265 **** assert(info.resolved_klass()->is_subtype_of(m_klass), "virtual call must be type-safe"); if (m_klass->is_interface()) { // This is a vtable call to an interface method (abstract "miranda method" or default method). // The vtable index is meaningless without a class (not interface) receiver type, so get one. // (LinkResolver should help us figure this out.) ! Klass* m_klass_non_interface = info.resolved_klass(); if (m_klass_non_interface->is_interface()) { m_klass_non_interface = SystemDictionary::Object_klass(); #ifdef ASSERT { ResourceMark rm; Method* m2 = m_klass_non_interface->vtable().method_at(vmindex); --- 255,266 ---- assert(info.resolved_klass()->is_subtype_of(m_klass), "virtual call must be type-safe"); if (m_klass->is_interface()) { // This is a vtable call to an interface method (abstract "miranda method" or default method). // The vtable index is meaningless without a class (not interface) receiver type, so get one. // (LinkResolver should help us figure this out.) ! assert(info.resolved_klass()->is_instance_klass(), "subtype of interface must be an instance klass"); ! InstanceKlass* m_klass_non_interface = InstanceKlass::cast(info.resolved_klass()); if (m_klass_non_interface->is_interface()) { m_klass_non_interface = SystemDictionary::Object_klass(); #ifdef ASSERT { ResourceMark rm; Method* m2 = m_klass_non_interface->vtable().method_at(vmindex);
< prev index next >