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