< prev index next >

src/hotspot/share/cds/aotConstantPoolResolver.cpp

Print this page

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

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