279 static void resolve_invokehandle (CallInfo& result,
280 const constantPoolHandle& pool, int index, TRAPS);
281 public:
282 // constant pool resolving
283 static void check_klass_accessibility(Klass* ref_klass, Klass* sel_klass, TRAPS);
284
285 // static resolving calls (will not run any Java code);
286 // used only from Bytecode_invoke::static_target
287 static Method* resolve_method_statically(Bytecodes::Code code,
288 const constantPoolHandle& pool,
289 int index, TRAPS);
290
291 static void resolve_continuation_enter(CallInfo& callinfo, TRAPS);
292
293 static void resolve_field_access(fieldDescriptor& result,
294 const constantPoolHandle& pool,
295 int index,
296 const methodHandle& method,
297 Bytecodes::Code byte,
298 bool initialize_class, TRAPS);
299 static void resolve_field_access(fieldDescriptor& result,
300 const constantPoolHandle& pool,
301 int index,
302 const methodHandle& method,
303 Bytecodes::Code byte, TRAPS) {
304 resolve_field_access(result, pool, index, method, byte,
305 /* initialize_class*/true, THREAD);
306 }
307 static void resolve_field(fieldDescriptor& result, const LinkInfo& link_info,
308 Bytecodes::Code access_kind,
309 bool initialize_class, TRAPS);
310
311 static void resolve_static_call (CallInfo& result,
312 const LinkInfo& link_info,
313 bool initialize_klass, TRAPS);
314 static void resolve_special_call (CallInfo& result,
315 Handle recv,
316 const LinkInfo& link_info,
317 TRAPS);
318 static void resolve_virtual_call (CallInfo& result, Handle recv, Klass* recv_klass,
319 const LinkInfo& link_info,
320 bool check_null_and_abstract, TRAPS);
321 static void resolve_interface_call(CallInfo& result, Handle recv, Klass* recv_klass,
322 const LinkInfo& link_info,
323 bool check_null_and_abstract, TRAPS);
324 static void resolve_handle_call (CallInfo& result,
325 const LinkInfo& link_info, TRAPS);
326 static void resolve_dynamic_call (CallInfo& result,
327 BootstrapInfo& bootstrap_specifier, TRAPS);
328
329 static void cds_resolve_virtual_call (CallInfo& result, const LinkInfo& link_info, TRAPS);
330 static void cds_resolve_interface_call(CallInfo& result, const LinkInfo& link_info, TRAPS);
331 static void cds_resolve_special_call (CallInfo& result, const LinkInfo& link_info, TRAPS);
332
333 // same as above for compile-time resolution; but returns null handle instead of throwing
334 // an exception on error also, does not initialize klass (i.e., no side effects)
335 static Method* resolve_virtual_call_or_null(Klass* receiver_klass,
336 const LinkInfo& link_info);
337 static Method* resolve_interface_call_or_null(Klass* receiver_klass,
338 const LinkInfo& link_info);
339 static Method* resolve_static_call_or_null(const LinkInfo& link_info);
340 static Method* resolve_special_call_or_null(const LinkInfo& link_info);
341
342 static int vtable_index_of_interface_method(Klass* klass, const methodHandle& resolved_method);
343
344 // same as above for compile-time resolution; returns vtable_index if current_klass if linked
345 static int resolve_virtual_vtable_index (Klass* receiver_klass,
346 const LinkInfo& link_info);
347
348 // static resolving for compiler (does not throw exceptions, returns null handle if unsuccessful)
349 static Method* linktime_resolve_virtual_method_or_null (const LinkInfo& link_info);
350 static Method* linktime_resolve_interface_method_or_null(const LinkInfo& link_info);
|
279 static void resolve_invokehandle (CallInfo& result,
280 const constantPoolHandle& pool, int index, TRAPS);
281 public:
282 // constant pool resolving
283 static void check_klass_accessibility(Klass* ref_klass, Klass* sel_klass, TRAPS);
284
285 // static resolving calls (will not run any Java code);
286 // used only from Bytecode_invoke::static_target
287 static Method* resolve_method_statically(Bytecodes::Code code,
288 const constantPoolHandle& pool,
289 int index, TRAPS);
290
291 static void resolve_continuation_enter(CallInfo& callinfo, TRAPS);
292
293 static void resolve_field_access(fieldDescriptor& result,
294 const constantPoolHandle& pool,
295 int index,
296 const methodHandle& method,
297 Bytecodes::Code byte,
298 bool initialize_class, TRAPS);
299 static void resolve_field(fieldDescriptor& result, const LinkInfo& link_info,
300 Bytecodes::Code access_kind,
301 bool initialize_class, TRAPS);
302
303 static void resolve_static_call (CallInfo& result,
304 const LinkInfo& link_info,
305 bool initialize_klass, TRAPS);
306 static void resolve_special_call (CallInfo& result,
307 Handle recv,
308 const LinkInfo& link_info,
309 TRAPS);
310 static void resolve_virtual_call (CallInfo& result, Handle recv, Klass* recv_klass,
311 const LinkInfo& link_info,
312 bool check_null_and_abstract, TRAPS);
313 static void resolve_interface_call(CallInfo& result, Handle recv, Klass* recv_klass,
314 const LinkInfo& link_info,
315 bool check_null_and_abstract, TRAPS);
316 static void resolve_handle_call (CallInfo& result,
317 const LinkInfo& link_info, TRAPS);
318 static void resolve_dynamic_call (CallInfo& result,
319 BootstrapInfo& bootstrap_specifier, TRAPS);
320
321 static void cds_resolve_virtual_call (CallInfo& result, const LinkInfo& link_info, TRAPS);
322 static void cds_resolve_interface_call(CallInfo& result, const LinkInfo& link_info, TRAPS);
323 static void cds_resolve_static_call (CallInfo& result, const LinkInfo& link_info, TRAPS);
324 static void cds_resolve_special_call (CallInfo& result, const LinkInfo& link_info, TRAPS);
325
326 // same as above for compile-time resolution; but returns null handle instead of throwing
327 // an exception on error also, does not initialize klass (i.e., no side effects)
328 static Method* resolve_virtual_call_or_null(Klass* receiver_klass,
329 const LinkInfo& link_info);
330 static Method* resolve_interface_call_or_null(Klass* receiver_klass,
331 const LinkInfo& link_info);
332 static Method* resolve_static_call_or_null(const LinkInfo& link_info);
333 static Method* resolve_special_call_or_null(const LinkInfo& link_info);
334
335 static int vtable_index_of_interface_method(Klass* klass, const methodHandle& resolved_method);
336
337 // same as above for compile-time resolution; returns vtable_index if current_klass if linked
338 static int resolve_virtual_vtable_index (Klass* receiver_klass,
339 const LinkInfo& link_info);
340
341 // static resolving for compiler (does not throw exceptions, returns null handle if unsuccessful)
342 static Method* linktime_resolve_virtual_method_or_null (const LinkInfo& link_info);
343 static Method* linktime_resolve_interface_method_or_null(const LinkInfo& link_info);
|