hotspot/src/share/vm/interpreter/linkResolver.cpp
changeset 9967 9ddc1c490930
parent 9425 6da66b869573
child 10008 d84de97ad847
equal deleted inserted replaced
9966:b30a5eb9bcff 9967:9ddc1c490930
  1115 
  1115 
  1116   // JSR 292:  this must be an implicitly generated method MethodHandle.invokeExact(*...)
  1116   // JSR 292:  this must be an implicitly generated method MethodHandle.invokeExact(*...)
  1117   // The extra MH receiver will be inserted into the stack on every call.
  1117   // The extra MH receiver will be inserted into the stack on every call.
  1118   methodHandle resolved_method;
  1118   methodHandle resolved_method;
  1119   KlassHandle current_klass(THREAD, pool->pool_holder());
  1119   KlassHandle current_klass(THREAD, pool->pool_holder());
  1120   lookup_implicit_method(resolved_method, resolved_klass, method_name, method_signature, current_klass, CHECK);
  1120   lookup_implicit_method(resolved_method, resolved_klass, method_name, method_signature, current_klass, THREAD);
       
  1121   if (HAS_PENDING_EXCEPTION) {
       
  1122     if (PENDING_EXCEPTION->is_a(SystemDictionary::BootstrapMethodError_klass())) {
       
  1123       // throw these guys, since they are already wrapped
       
  1124       return;
       
  1125     }
       
  1126     if (!PENDING_EXCEPTION->is_a(SystemDictionary::LinkageError_klass())) {
       
  1127       // intercept only LinkageErrors which might have failed to wrap
       
  1128       return;
       
  1129     }
       
  1130     // See the "Linking Exceptions" section for the invokedynamic instruction in the JVMS.
       
  1131     Handle ex(THREAD, PENDING_EXCEPTION);
       
  1132     CLEAR_PENDING_EXCEPTION;
       
  1133     oop bsme = Klass::cast(SystemDictionary::BootstrapMethodError_klass())->java_mirror();
       
  1134     MethodHandles::raise_exception(Bytecodes::_athrow, ex(), bsme, CHECK);
       
  1135     // java code should not return, but if it does throw out anyway
       
  1136     THROW(vmSymbols::java_lang_InternalError());
       
  1137   }
  1121   if (resolved_method.is_null()) {
  1138   if (resolved_method.is_null()) {
  1122     THROW(vmSymbols::java_lang_InternalError());
  1139     THROW(vmSymbols::java_lang_InternalError());
  1123   }
  1140   }
  1124   result.set_dynamic(resolved_method, CHECK);
  1141   result.set_dynamic(resolved_method, CHECK);
  1125 }
  1142 }