< prev index next > src/hotspot/share/interpreter/linkResolver.cpp
Print this page
return false;
}
}
void LinkResolver::resolve_invokehandle(CallInfo& result, const constantPoolHandle& pool, int index, TRAPS) {
-
PerfTraceTimedEvent timer(ClassLoader::perf_resolve_invokehandle_time(),
! ClassLoader::perf_resolve_invokehandle_count());
LinkInfo link_info(pool, index, Bytecodes::_invokehandle, CHECK);
if (log_is_enabled(Info, methodhandles)) {
ResourceMark rm(THREAD);
log_info(methodhandles)("resolve_invokehandle %s %s", link_info.name()->as_C_string(),
link_info.signature()->as_C_string());
}
- { // Check if the call site has been bound already, and short circuit:
- bool is_done = resolve_previously_linked_invokehandle(result, link_info, pool, index, CHECK);
- if (is_done) return;
- }
resolve_handle_call(result, link_info, CHECK);
}
void LinkResolver::resolve_handle_call(CallInfo& result,
const LinkInfo& link_info,
return false;
}
}
void LinkResolver::resolve_invokehandle(CallInfo& result, const constantPoolHandle& pool, int index, TRAPS) {
PerfTraceTimedEvent timer(ClassLoader::perf_resolve_invokehandle_time(),
! ClassLoader::perf_resolve_invokehandle_count(),
+ THREAD->class_being_initialized() == nullptr);
LinkInfo link_info(pool, index, Bytecodes::_invokehandle, CHECK);
+ { // Check if the call site has been bound already, and short circuit:
+ bool is_done = resolve_previously_linked_invokehandle(result, link_info, pool, index, CHECK);
+ if (is_done) return;
+ }
if (log_is_enabled(Info, methodhandles)) {
ResourceMark rm(THREAD);
log_info(methodhandles)("resolve_invokehandle %s %s", link_info.name()->as_C_string(),
link_info.signature()->as_C_string());
}
resolve_handle_call(result, link_info, CHECK);
}
void LinkResolver::resolve_handle_call(CallInfo& result,
const LinkInfo& link_info,
JFR_ONLY(Jfr::on_resolution(result, CHECK);)
}
void LinkResolver::resolve_invokedynamic(CallInfo& result, const constantPoolHandle& pool, int indy_index, TRAPS) {
PerfTraceTimedEvent timer(ClassLoader::perf_resolve_invokedynamic_time(),
! ClassLoader::perf_resolve_invokedynamic_count());
!
int pool_index = pool->resolved_indy_entry_at(indy_index)->constant_pool_index();
// Resolve the bootstrap specifier (BSM + optional arguments).
BootstrapInfo bootstrap_specifier(pool, pool_index, indy_index);
JFR_ONLY(Jfr::on_resolution(result, CHECK);)
}
void LinkResolver::resolve_invokedynamic(CallInfo& result, const constantPoolHandle& pool, int indy_index, TRAPS) {
PerfTraceTimedEvent timer(ClassLoader::perf_resolve_invokedynamic_time(),
! ClassLoader::perf_resolve_invokedynamic_count(),
! THREAD->class_being_initialized() == nullptr);
int pool_index = pool->resolved_indy_entry_at(indy_index)->constant_pool_index();
// Resolve the bootstrap specifier (BSM + optional arguments).
BootstrapInfo bootstrap_specifier(pool, pool_index, indy_index);
< prev index next >