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