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);
351
352 // runtime resolving from constant pool
353 static void resolve_invoke(CallInfo& result, Handle recv,
354 const constantPoolHandle& pool, int index,
355 Bytecodes::Code byte, TRAPS);
356
357 // runtime resolving from attached method
358 static void resolve_invoke(CallInfo& result, Handle& recv,
359 const methodHandle& attached_method,
360 Bytecodes::Code byte, TRAPS);
361
362 // Only resolved method known.
363 static void throw_abstract_method_error(const methodHandle& resolved_method, TRAPS) {
364 throw_abstract_method_error(resolved_method, methodHandle(), nullptr, CHECK);
365 }
366 // Resolved method and receiver klass know.
367 static void throw_abstract_method_error(const methodHandle& resolved_method, Klass *recv_klass, TRAPS) {
368 throw_abstract_method_error(resolved_method, methodHandle(), recv_klass, CHECK);
369 }
370 // Selected method is abstract.
371 static void throw_abstract_method_error(const methodHandle& resolved_method,
372 const methodHandle& selected_method,
373 Klass *recv_klass, TRAPS);
374 };
375 #endif // SHARE_INTERPRETER_LINKRESOLVER_HPP
|
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);
351
352 // runtime resolving from constant pool
353 static void resolve_invoke(CallInfo& result, Handle recv,
354 const constantPoolHandle& pool, int index,
355 Bytecodes::Code byte, TRAPS);
356
357 // runtime resolving from attached method
358 static void resolve_invoke(CallInfo& result, Handle& recv,
359 const methodHandle& attached_method,
360 Bytecodes::Code byte, bool check_null_and_abstract, TRAPS);
361
362 // Only resolved method known.
363 static void throw_abstract_method_error(const methodHandle& resolved_method, TRAPS) {
364 throw_abstract_method_error(resolved_method, methodHandle(), nullptr, CHECK);
365 }
366 // Resolved method and receiver klass know.
367 static void throw_abstract_method_error(const methodHandle& resolved_method, Klass *recv_klass, TRAPS) {
368 throw_abstract_method_error(resolved_method, methodHandle(), recv_klass, CHECK);
369 }
370 // Selected method is abstract.
371 static void throw_abstract_method_error(const methodHandle& resolved_method,
372 const methodHandle& selected_method,
373 Klass *recv_klass, TRAPS);
374 };
375 #endif // SHARE_INTERPRETER_LINKRESOLVER_HPP
|