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