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