273 }
274
275 // ------------------------------------------------------------------
276 // Get a field by index from a klass's constant pool.
277 void JVMCIEnv::get_field_by_index(instanceKlassHandle accessor, fieldDescriptor& fd, int index) {
278 ResourceMark rm;
279 return get_field_by_index_impl(accessor, fd, index);
280 }
281
282 // ------------------------------------------------------------------
283 // Perform an appropriate method lookup based on accessor, holder,
284 // name, signature, and bytecode.
285 methodHandle JVMCIEnv::lookup_method(instanceKlassHandle h_accessor,
286 instanceKlassHandle h_holder,
287 Symbol* name,
288 Symbol* sig,
289 Bytecodes::Code bc) {
290 JVMCI_EXCEPTION_CONTEXT;
291 LinkResolver::check_klass_accessability(h_accessor, h_holder, KILL_COMPILE_ON_FATAL_(NULL));
292 methodHandle dest_method;
293 LinkInfo link_info(h_holder, name, sig, h_accessor, /*check_access*/true);
294 switch (bc) {
295 case Bytecodes::_invokestatic:
296 dest_method =
297 LinkResolver::resolve_static_call_or_null(link_info);
298 break;
299 case Bytecodes::_invokespecial:
300 dest_method =
301 LinkResolver::resolve_special_call_or_null(link_info);
302 break;
303 case Bytecodes::_invokeinterface:
304 dest_method =
305 LinkResolver::linktime_resolve_interface_method_or_null(link_info);
306 break;
307 case Bytecodes::_invokevirtual:
308 dest_method =
309 LinkResolver::linktime_resolve_virtual_method_or_null(link_info);
310 break;
311 default: ShouldNotReachHere();
312 }
313
|
273 }
274
275 // ------------------------------------------------------------------
276 // Get a field by index from a klass's constant pool.
277 void JVMCIEnv::get_field_by_index(instanceKlassHandle accessor, fieldDescriptor& fd, int index) {
278 ResourceMark rm;
279 return get_field_by_index_impl(accessor, fd, index);
280 }
281
282 // ------------------------------------------------------------------
283 // Perform an appropriate method lookup based on accessor, holder,
284 // name, signature, and bytecode.
285 methodHandle JVMCIEnv::lookup_method(instanceKlassHandle h_accessor,
286 instanceKlassHandle h_holder,
287 Symbol* name,
288 Symbol* sig,
289 Bytecodes::Code bc) {
290 JVMCI_EXCEPTION_CONTEXT;
291 LinkResolver::check_klass_accessability(h_accessor, h_holder, KILL_COMPILE_ON_FATAL_(NULL));
292 methodHandle dest_method;
293 LinkInfo link_info(h_holder, name, sig, h_accessor, NULL, /*check_access*/true);
294 switch (bc) {
295 case Bytecodes::_invokestatic:
296 dest_method =
297 LinkResolver::resolve_static_call_or_null(link_info);
298 break;
299 case Bytecodes::_invokespecial:
300 dest_method =
301 LinkResolver::resolve_special_call_or_null(link_info);
302 break;
303 case Bytecodes::_invokeinterface:
304 dest_method =
305 LinkResolver::linktime_resolve_interface_method_or_null(link_info);
306 break;
307 case Bytecodes::_invokevirtual:
308 dest_method =
309 LinkResolver::linktime_resolve_virtual_method_or_null(link_info);
310 break;
311 default: ShouldNotReachHere();
312 }
313
|