hotspot/src/share/vm/prims/methodHandles.cpp
changeset 33105 294e48b4f704
parent 31620 53be635ad49c
child 33198 b37ad9fbf681
equal deleted inserted replaced
33104:a7c0f60a1294 33105:294e48b4f704
   226         m_klass_non_interface = SystemDictionary::Object_klass();
   226         m_klass_non_interface = SystemDictionary::Object_klass();
   227 #ifdef ASSERT
   227 #ifdef ASSERT
   228         { ResourceMark rm;
   228         { ResourceMark rm;
   229           Method* m2 = m_klass_non_interface->vtable()->method_at(vmindex);
   229           Method* m2 = m_klass_non_interface->vtable()->method_at(vmindex);
   230           assert(m->name() == m2->name() && m->signature() == m2->signature(),
   230           assert(m->name() == m2->name() && m->signature() == m2->signature(),
   231                  err_msg("at %d, %s != %s", vmindex,
   231                  "at %d, %s != %s", vmindex,
   232                          m->name_and_sig_as_C_string(), m2->name_and_sig_as_C_string()));
   232                  m->name_and_sig_as_C_string(), m2->name_and_sig_as_C_string());
   233         }
   233         }
   234 #endif //ASSERT
   234 #endif //ASSERT
   235       }
   235       }
   236       if (!m->is_public()) {
   236       if (!m->is_public()) {
   237         assert(m->is_public(), "virtual call must be to public interface method");
   237         assert(m->is_public(), "virtual call must be to public interface method");
   343   return (flags & required) == required;
   343   return (flags & required) == required;
   344 }
   344 }
   345 
   345 
   346 
   346 
   347 Symbol* MethodHandles::signature_polymorphic_intrinsic_name(vmIntrinsics::ID iid) {
   347 Symbol* MethodHandles::signature_polymorphic_intrinsic_name(vmIntrinsics::ID iid) {
   348   assert(is_signature_polymorphic_intrinsic(iid), err_msg("iid=%d", iid));
   348   assert(is_signature_polymorphic_intrinsic(iid), "iid=%d", iid);
   349   switch (iid) {
   349   switch (iid) {
   350   case vmIntrinsics::_invokeBasic:      return vmSymbols::invokeBasic_name();
   350   case vmIntrinsics::_invokeBasic:      return vmSymbols::invokeBasic_name();
   351   case vmIntrinsics::_linkToVirtual:    return vmSymbols::linkToVirtual_name();
   351   case vmIntrinsics::_linkToVirtual:    return vmSymbols::linkToVirtual_name();
   352   case vmIntrinsics::_linkToStatic:     return vmSymbols::linkToStatic_name();
   352   case vmIntrinsics::_linkToStatic:     return vmSymbols::linkToStatic_name();
   353   case vmIntrinsics::_linkToSpecial:    return vmSymbols::linkToSpecial_name();
   353   case vmIntrinsics::_linkToSpecial:    return vmSymbols::linkToSpecial_name();
   363   case vmIntrinsics::_linkToVirtual:    return JVM_REF_invokeVirtual;
   363   case vmIntrinsics::_linkToVirtual:    return JVM_REF_invokeVirtual;
   364   case vmIntrinsics::_linkToStatic:     return JVM_REF_invokeStatic;
   364   case vmIntrinsics::_linkToStatic:     return JVM_REF_invokeStatic;
   365   case vmIntrinsics::_linkToSpecial:    return JVM_REF_invokeSpecial;
   365   case vmIntrinsics::_linkToSpecial:    return JVM_REF_invokeSpecial;
   366   case vmIntrinsics::_linkToInterface:  return JVM_REF_invokeInterface;
   366   case vmIntrinsics::_linkToInterface:  return JVM_REF_invokeInterface;
   367   }
   367   }
   368   assert(false, err_msg("iid=%d", iid));
   368   assert(false, "iid=%d", iid);
   369   return 0;
   369   return 0;
   370 }
   370 }
   371 
   371 
   372 vmIntrinsics::ID MethodHandles::signature_polymorphic_name_id(Symbol* name) {
   372 vmIntrinsics::ID MethodHandles::signature_polymorphic_name_id(Symbol* name) {
   373   vmSymbols::SID name_id = vmSymbols::find_sid(name);
   373   vmSymbols::SID name_id = vmSymbols::find_sid(name);
   696                         link_info, THREAD);
   696                         link_info, THREAD);
   697         } else if (ref_kind == JVM_REF_invokeVirtual) {
   697         } else if (ref_kind == JVM_REF_invokeVirtual) {
   698           LinkResolver::resolve_virtual_call(result, Handle(), defc,
   698           LinkResolver::resolve_virtual_call(result, Handle(), defc,
   699                         link_info, false, THREAD);
   699                         link_info, false, THREAD);
   700         } else {
   700         } else {
   701           assert(false, err_msg("ref_kind=%d", ref_kind));
   701           assert(false, "ref_kind=%d", ref_kind);
   702         }
   702         }
   703         if (HAS_PENDING_EXCEPTION) {
   703         if (HAS_PENDING_EXCEPTION) {
   704           return empty;
   704           return empty;
   705         }
   705         }
   706       }
   706       }