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