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