351 static int resolve_virtual_vtable_index (Klass* receiver_klass,
352 const LinkInfo& link_info);
353
354 // static resolving for compiler (does not throw exceptions, returns null handle if unsuccessful)
355 static Method* linktime_resolve_virtual_method_or_null (const LinkInfo& link_info);
356 static Method* linktime_resolve_interface_method_or_null(const LinkInfo& link_info);
357
358 // runtime resolving from constant pool
359 static void resolve_invoke(CallInfo& result, Handle recv,
360 const constantPoolHandle& pool, int index,
361 Bytecodes::Code byte, ClassInitMode static_mode, TRAPS);
362 static void resolve_invoke(CallInfo& result, Handle recv,
363 const constantPoolHandle& pool, int index,
364 Bytecodes::Code byte, TRAPS) {
365 resolve_invoke(result, recv, pool, index, byte, ClassInitMode::init, THREAD);
366 }
367
368 // runtime resolving from attached method
369 static void resolve_invoke(CallInfo& result, Handle& recv,
370 const methodHandle& attached_method,
371 Bytecodes::Code byte, TRAPS);
372
373 // Only resolved method known.
374 static void throw_abstract_method_error(const methodHandle& resolved_method, TRAPS) {
375 throw_abstract_method_error(resolved_method, methodHandle(), nullptr, CHECK);
376 }
377 // Resolved method and receiver klass know.
378 static void throw_abstract_method_error(const methodHandle& resolved_method, Klass *recv_klass, TRAPS) {
379 throw_abstract_method_error(resolved_method, methodHandle(), recv_klass, CHECK);
380 }
381 // Selected method is abstract.
382 static void throw_abstract_method_error(const methodHandle& resolved_method,
383 const methodHandle& selected_method,
384 Klass *recv_klass, TRAPS);
385 };
386 #endif // SHARE_INTERPRETER_LINKRESOLVER_HPP
|
351 static int resolve_virtual_vtable_index (Klass* receiver_klass,
352 const LinkInfo& link_info);
353
354 // static resolving for compiler (does not throw exceptions, returns null handle if unsuccessful)
355 static Method* linktime_resolve_virtual_method_or_null (const LinkInfo& link_info);
356 static Method* linktime_resolve_interface_method_or_null(const LinkInfo& link_info);
357
358 // runtime resolving from constant pool
359 static void resolve_invoke(CallInfo& result, Handle recv,
360 const constantPoolHandle& pool, int index,
361 Bytecodes::Code byte, ClassInitMode static_mode, TRAPS);
362 static void resolve_invoke(CallInfo& result, Handle recv,
363 const constantPoolHandle& pool, int index,
364 Bytecodes::Code byte, TRAPS) {
365 resolve_invoke(result, recv, pool, index, byte, ClassInitMode::init, THREAD);
366 }
367
368 // runtime resolving from attached method
369 static void resolve_invoke(CallInfo& result, Handle& recv,
370 const methodHandle& attached_method,
371 Bytecodes::Code byte, bool check_null_and_abstract, TRAPS);
372
373 // Only resolved method known.
374 static void throw_abstract_method_error(const methodHandle& resolved_method, TRAPS) {
375 throw_abstract_method_error(resolved_method, methodHandle(), nullptr, CHECK);
376 }
377 // Resolved method and receiver klass know.
378 static void throw_abstract_method_error(const methodHandle& resolved_method, Klass *recv_klass, TRAPS) {
379 throw_abstract_method_error(resolved_method, methodHandle(), recv_klass, CHECK);
380 }
381 // Selected method is abstract.
382 static void throw_abstract_method_error(const methodHandle& resolved_method,
383 const methodHandle& selected_method,
384 Klass *recv_klass, TRAPS);
385 };
386 #endif // SHARE_INTERPRETER_LINKRESOLVER_HPP
|