src/share/vm/interpreter/linkResolver.cpp
Index Unified diffs Context diffs Sdiffs Patch New Old Previous File Next File
*** old/src/share/vm/interpreter/linkResolver.cpp	Mon Nov 23 21:11:23 2015
--- new/src/share/vm/interpreter/linkResolver.cpp	Mon Nov 23 21:11:23 2015

*** 1454,1463 **** --- 1454,1490 ---- case Bytecodes::_invokeinterface: resolve_invokeinterface(result, recv, pool, index, CHECK); break; } return; } + void LinkResolver::resolve_invoke(CallInfo& result, Handle& recv, + const methodHandle& attached_method, + Bytecodes::Code byte, TRAPS) { + KlassHandle defc = attached_method->method_holder(); + Symbol* name = attached_method->name(); + Symbol* type = attached_method->signature(); + LinkInfo link_info(defc, name, type, KlassHandle(), /*check_access=*/false); + switch(byte) { + case Bytecodes::_invokevirtual: + resolve_virtual_call(result, recv, recv->klass(), link_info, + /*check_null_and_abstract=*/true, CHECK); + break; + case Bytecodes::_invokeinterface: + resolve_interface_call(result, recv, recv->klass(), link_info, + /*check_null_and_abstract=*/true, CHECK); + break; + case Bytecodes::_invokestatic: + resolve_static_call(result, link_info, /*initialize_class=*/false, CHECK); + break; + case Bytecodes::_invokespecial: + resolve_special_call(result, link_info, CHECK); + break; + default: + fatal("bad call: %s", Bytecodes::name(byte)); + } + } + void LinkResolver::resolve_invokestatic(CallInfo& result, const constantPoolHandle& pool, int index, TRAPS) { LinkInfo link_info(pool, index, CHECK); resolve_static_call(result, link_info, /*initialize_class*/true, CHECK); }

src/share/vm/interpreter/linkResolver.cpp
Index Unified diffs Context diffs Sdiffs Patch New Old Previous File Next File