326 static Method* resolve_special_call_or_null(const LinkInfo& link_info);
327
328 static int vtable_index_of_interface_method(Klass* klass, const methodHandle& resolved_method);
329
330 // same as above for compile-time resolution; returns vtable_index if current_klass if linked
331 static int resolve_virtual_vtable_index (Klass* receiver_klass,
332 const LinkInfo& link_info);
333
334 // static resolving for compiler (does not throw exceptions, returns null handle if unsuccessful)
335 static Method* linktime_resolve_virtual_method_or_null (const LinkInfo& link_info);
336 static Method* linktime_resolve_interface_method_or_null(const LinkInfo& link_info);
337
338 // runtime resolving from constant pool
339 static void resolve_invoke(CallInfo& result, Handle recv,
340 const constantPoolHandle& pool, int index,
341 Bytecodes::Code byte, TRAPS);
342
343 // runtime resolving from attached method
344 static void resolve_invoke(CallInfo& result, Handle& recv,
345 const methodHandle& attached_method,
346 Bytecodes::Code byte, TRAPS);
347
348 // Only resolved method known.
349 static void throw_abstract_method_error(const methodHandle& resolved_method, TRAPS) {
350 throw_abstract_method_error(resolved_method, methodHandle(), nullptr, CHECK);
351 }
352 // Resolved method and receiver klass know.
353 static void throw_abstract_method_error(const methodHandle& resolved_method, Klass *recv_klass, TRAPS) {
354 throw_abstract_method_error(resolved_method, methodHandle(), recv_klass, CHECK);
355 }
356 // Selected method is abstract.
357 static void throw_abstract_method_error(const methodHandle& resolved_method,
358 const methodHandle& selected_method,
359 Klass *recv_klass, TRAPS);
360 };
361 #endif // SHARE_INTERPRETER_LINKRESOLVER_HPP
|
326 static Method* resolve_special_call_or_null(const LinkInfo& link_info);
327
328 static int vtable_index_of_interface_method(Klass* klass, const methodHandle& resolved_method);
329
330 // same as above for compile-time resolution; returns vtable_index if current_klass if linked
331 static int resolve_virtual_vtable_index (Klass* receiver_klass,
332 const LinkInfo& link_info);
333
334 // static resolving for compiler (does not throw exceptions, returns null handle if unsuccessful)
335 static Method* linktime_resolve_virtual_method_or_null (const LinkInfo& link_info);
336 static Method* linktime_resolve_interface_method_or_null(const LinkInfo& link_info);
337
338 // runtime resolving from constant pool
339 static void resolve_invoke(CallInfo& result, Handle recv,
340 const constantPoolHandle& pool, int index,
341 Bytecodes::Code byte, TRAPS);
342
343 // runtime resolving from attached method
344 static void resolve_invoke(CallInfo& result, Handle& recv,
345 const methodHandle& attached_method,
346 Bytecodes::Code byte, bool check_null_and_abstract, TRAPS);
347
348 // Only resolved method known.
349 static void throw_abstract_method_error(const methodHandle& resolved_method, TRAPS) {
350 throw_abstract_method_error(resolved_method, methodHandle(), nullptr, CHECK);
351 }
352 // Resolved method and receiver klass know.
353 static void throw_abstract_method_error(const methodHandle& resolved_method, Klass *recv_klass, TRAPS) {
354 throw_abstract_method_error(resolved_method, methodHandle(), recv_klass, CHECK);
355 }
356 // Selected method is abstract.
357 static void throw_abstract_method_error(const methodHandle& resolved_method,
358 const methodHandle& selected_method,
359 Klass *recv_klass, TRAPS);
360 };
361 #endif // SHARE_INTERPRETER_LINKRESOLVER_HPP
|