< prev index next >

src/hotspot/share/cds/aotConstantPoolResolver.cpp

Print this page

289     return;
290   }
291 
292   if (preresolve_list != nullptr && preresolve_list->at(cp_index) == false) {
293     // This field wasn't resolved during the trial run. Don't attempt to resolve it. Otherwise
294     // the compiler may generate less efficient code.
295     return;
296   }
297 
298   int klass_cp_index = cp->uncached_klass_ref_index_at(cp_index);
299   if (find_loaded_class(THREAD, cp(), klass_cp_index) == nullptr) {
300     // Do not resolve any field/methods from a class that has not been loaded yet.
301     return;
302   }
303 
304   Klass* resolved_klass = cp->klass_ref_at(raw_index, bc, CHECK);
305 
306   switch (bc) {
307   case Bytecodes::_getfield:
308   case Bytecodes::_putfield:
309     InterpreterRuntime::resolve_get_put(bc, raw_index, mh, cp, false /*initialize_holder*/, CHECK);
310     break;
311 
312   case Bytecodes::_invokevirtual:
313   case Bytecodes::_invokespecial:
314   case Bytecodes::_invokeinterface:
315     InterpreterRuntime::cds_resolve_invoke(bc, raw_index, cp, CHECK);
316     break;
317 
318   case Bytecodes::_invokehandle:
319     InterpreterRuntime::cds_resolve_invokehandle(raw_index, cp, CHECK);
320     break;
321 
322   default:
323     ShouldNotReachHere();
324   }
325 
326   if (log_is_enabled(Trace, aot, resolve)) {
327     ResourceMark rm(THREAD);
328     bool resolved = cp->is_resolved(raw_index, bc);
329     Symbol* name = cp->name_ref_at(raw_index, bc);

289     return;
290   }
291 
292   if (preresolve_list != nullptr && preresolve_list->at(cp_index) == false) {
293     // This field wasn't resolved during the trial run. Don't attempt to resolve it. Otherwise
294     // the compiler may generate less efficient code.
295     return;
296   }
297 
298   int klass_cp_index = cp->uncached_klass_ref_index_at(cp_index);
299   if (find_loaded_class(THREAD, cp(), klass_cp_index) == nullptr) {
300     // Do not resolve any field/methods from a class that has not been loaded yet.
301     return;
302   }
303 
304   Klass* resolved_klass = cp->klass_ref_at(raw_index, bc, CHECK);
305 
306   switch (bc) {
307   case Bytecodes::_getfield:
308   case Bytecodes::_putfield:
309     InterpreterRuntime::resolve_get_put(bc, raw_index, mh, cp, StaticMode::dont_initialize_klass, CHECK);
310     break;
311 
312   case Bytecodes::_invokevirtual:
313   case Bytecodes::_invokespecial:
314   case Bytecodes::_invokeinterface:
315     InterpreterRuntime::cds_resolve_invoke(bc, raw_index, cp, CHECK);
316     break;
317 
318   case Bytecodes::_invokehandle:
319     InterpreterRuntime::cds_resolve_invokehandle(raw_index, cp, CHECK);
320     break;
321 
322   default:
323     ShouldNotReachHere();
324   }
325 
326   if (log_is_enabled(Trace, aot, resolve)) {
327     ResourceMark rm(THREAD);
328     bool resolved = cp->is_resolved(raw_index, bc);
329     Symbol* name = cp->name_ref_at(raw_index, bc);
< prev index next >