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);
|