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 } |