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