< prev index next >

src/hotspot/share/cds/aotConstantPoolResolver.cpp

Print this page

258     return;
259   }
260 
261   if (preresolve_list != nullptr && preresolve_list->at(cp_index) == false) {
262     // This field wasn't resolved during the trial run. Don't attempt to resolve it. Otherwise
263     // the compiler may generate less efficient code.
264     return;
265   }
266 
267   int klass_cp_index = cp->uncached_klass_ref_index_at(cp_index);
268   if (find_loaded_class(THREAD, cp(), klass_cp_index) == nullptr) {
269     // Do not resolve any field/methods from a class that has not been loaded yet.
270     return;
271   }
272 
273   Klass* resolved_klass = cp->klass_ref_at(raw_index, bc, CHECK);
274 
275   switch (bc) {
276   case Bytecodes::_getfield:
277   case Bytecodes::_putfield:
278     InterpreterRuntime::resolve_get_put(bc, raw_index, mh, cp, false /*initialize_holder*/, CHECK);
279     break;
280 
281   case Bytecodes::_invokevirtual:
282   case Bytecodes::_invokespecial:
283   case Bytecodes::_invokeinterface:
284     InterpreterRuntime::cds_resolve_invoke(bc, raw_index, cp, CHECK);
285     break;
286 
287   case Bytecodes::_invokehandle:
288     InterpreterRuntime::cds_resolve_invokehandle(raw_index, cp, CHECK);
289     break;
290 
291   default:
292     ShouldNotReachHere();
293   }
294 
295   if (log_is_enabled(Trace, cds, resolve)) {
296     ResourceMark rm(THREAD);
297     bool resolved = cp->is_resolved(raw_index, bc);
298     Symbol* name = cp->name_ref_at(raw_index, bc);

258     return;
259   }
260 
261   if (preresolve_list != nullptr && preresolve_list->at(cp_index) == false) {
262     // This field wasn't resolved during the trial run. Don't attempt to resolve it. Otherwise
263     // the compiler may generate less efficient code.
264     return;
265   }
266 
267   int klass_cp_index = cp->uncached_klass_ref_index_at(cp_index);
268   if (find_loaded_class(THREAD, cp(), klass_cp_index) == nullptr) {
269     // Do not resolve any field/methods from a class that has not been loaded yet.
270     return;
271   }
272 
273   Klass* resolved_klass = cp->klass_ref_at(raw_index, bc, CHECK);
274 
275   switch (bc) {
276   case Bytecodes::_getfield:
277   case Bytecodes::_putfield:
278     InterpreterRuntime::resolve_get_put(bc, raw_index, mh, cp, StaticMode::dont_initialize_klass, CHECK);
279     break;
280 
281   case Bytecodes::_invokevirtual:
282   case Bytecodes::_invokespecial:
283   case Bytecodes::_invokeinterface:
284     InterpreterRuntime::cds_resolve_invoke(bc, raw_index, cp, CHECK);
285     break;
286 
287   case Bytecodes::_invokehandle:
288     InterpreterRuntime::cds_resolve_invokehandle(raw_index, cp, CHECK);
289     break;
290 
291   default:
292     ShouldNotReachHere();
293   }
294 
295   if (log_is_enabled(Trace, cds, resolve)) {
296     ResourceMark rm(THREAD);
297     bool resolved = cp->is_resolved(raw_index, bc);
298     Symbol* name = cp->name_ref_at(raw_index, bc);
< prev index next >