693 ciField* ciEnv::get_field_by_index(ciInstanceKlass* accessor,
694 int index) {
695 GUARDED_VM_ENTRY(return get_field_by_index_impl(accessor, index);)
696 }
697
698 // ------------------------------------------------------------------
699 // ciEnv::lookup_method
700 //
701 // Perform an appropriate method lookup based on accessor, holder,
702 // name, signature, and bytecode.
703 Method* ciEnv::lookup_method(InstanceKlass* accessor,
704 InstanceKlass* holder,
705 Symbol* name,
706 Symbol* sig,
707 Bytecodes::Code bc) {
708 EXCEPTION_CONTEXT;
709 KlassHandle h_accessor(THREAD, accessor);
710 KlassHandle h_holder(THREAD, holder);
711 LinkResolver::check_klass_accessability(h_accessor, h_holder, KILL_COMPILE_ON_FATAL_(NULL));
712 methodHandle dest_method;
713 LinkInfo link_info(h_holder, name, sig, h_accessor, /*check_access*/true);
714 switch (bc) {
715 case Bytecodes::_invokestatic:
716 dest_method =
717 LinkResolver::resolve_static_call_or_null(link_info);
718 break;
719 case Bytecodes::_invokespecial:
720 dest_method =
721 LinkResolver::resolve_special_call_or_null(link_info);
722 break;
723 case Bytecodes::_invokeinterface:
724 dest_method =
725 LinkResolver::linktime_resolve_interface_method_or_null(link_info);
726 break;
727 case Bytecodes::_invokevirtual:
728 dest_method =
729 LinkResolver::linktime_resolve_virtual_method_or_null(link_info);
730 break;
731 default: ShouldNotReachHere();
732 }
733
|
693 ciField* ciEnv::get_field_by_index(ciInstanceKlass* accessor,
694 int index) {
695 GUARDED_VM_ENTRY(return get_field_by_index_impl(accessor, index);)
696 }
697
698 // ------------------------------------------------------------------
699 // ciEnv::lookup_method
700 //
701 // Perform an appropriate method lookup based on accessor, holder,
702 // name, signature, and bytecode.
703 Method* ciEnv::lookup_method(InstanceKlass* accessor,
704 InstanceKlass* holder,
705 Symbol* name,
706 Symbol* sig,
707 Bytecodes::Code bc) {
708 EXCEPTION_CONTEXT;
709 KlassHandle h_accessor(THREAD, accessor);
710 KlassHandle h_holder(THREAD, holder);
711 LinkResolver::check_klass_accessability(h_accessor, h_holder, KILL_COMPILE_ON_FATAL_(NULL));
712 methodHandle dest_method;
713 LinkInfo link_info(h_holder, name, sig, h_accessor, NULL, /*check_access*/true);
714 switch (bc) {
715 case Bytecodes::_invokestatic:
716 dest_method =
717 LinkResolver::resolve_static_call_or_null(link_info);
718 break;
719 case Bytecodes::_invokespecial:
720 dest_method =
721 LinkResolver::resolve_special_call_or_null(link_info);
722 break;
723 case Bytecodes::_invokeinterface:
724 dest_method =
725 LinkResolver::linktime_resolve_interface_method_or_null(link_info);
726 break;
727 case Bytecodes::_invokevirtual:
728 dest_method =
729 LinkResolver::linktime_resolve_virtual_method_or_null(link_info);
730 break;
731 default: ShouldNotReachHere();
732 }
733
|