2814 int java_lang_invoke_MemberName::flags(oop mname) { 2815 assert(is_instance(mname), "wrong type"); 2816 return mname->int_field(_flags_offset); 2817 } 2818 2819 void java_lang_invoke_MemberName::set_flags(oop mname, int flags) { 2820 assert(is_instance(mname), "wrong type"); 2821 mname->int_field_put(_flags_offset, flags); 2822 } 2823 2824 Metadata* java_lang_invoke_MemberName::vmtarget(oop mname) { 2825 assert(is_instance(mname), "wrong type"); 2826 return (Metadata*)mname->address_field(_vmtarget_offset); 2827 } 2828 2829 bool java_lang_invoke_MemberName::is_method(oop mname) { 2830 assert(is_instance(mname), "must be MemberName"); 2831 return (flags(mname) & (MN_IS_METHOD | MN_IS_CONSTRUCTOR)) > 0; 2832 } 2833 2834 #if INCLUDE_JVMTI 2835 // Can be executed on VM thread only 2836 void java_lang_invoke_MemberName::adjust_vmtarget(oop mname, Method* old_method, 2837 Method* new_method, bool* trace_name_printed) { 2838 assert(is_method(mname), "wrong type"); 2839 assert(Thread::current()->is_VM_thread(), "not VM thread"); 2840 2841 Method* target = (Method*)mname->address_field(_vmtarget_offset); 2842 if (target == old_method) { 2843 mname->address_field_put(_vmtarget_offset, (address)new_method); 2844 2845 if (RC_TRACE_IN_RANGE(0x00100000, 0x00400000)) { 2846 if (!(*trace_name_printed)) { 2847 // RC_TRACE_MESG macro has an embedded ResourceMark 2848 RC_TRACE_MESG(("adjust: name=%s", 2849 old_method->method_holder()->external_name())); 2850 *trace_name_printed = true; 2851 } 2852 // RC_TRACE macro has an embedded ResourceMark 2853 RC_TRACE(0x00400000, ("MemberName method update: %s(%s)", 2854 new_method->name()->as_C_string(), 2855 new_method->signature()->as_C_string())); 2856 } 2857 } 2858 } 2859 #endif // INCLUDE_JVMTI 2860 2861 void java_lang_invoke_MemberName::set_vmtarget(oop mname, Metadata* ref) { 2862 assert(is_instance(mname), "wrong type"); 2863 // check the type of the vmtarget 2864 oop dependency = NULL; 2865 if (ref != NULL) { 2866 switch (flags(mname) & (MN_IS_METHOD | 2867 MN_IS_CONSTRUCTOR | 2868 MN_IS_FIELD)) { 2869 case MN_IS_METHOD: 2870 case MN_IS_CONSTRUCTOR: 2871 assert(ref->is_method(), "should be a method"); 2872 dependency = ((Method*)ref)->method_holder()->java_mirror(); 2873 break; 2874 case MN_IS_FIELD: 2875 assert(ref->is_klass(), "should be a class"); 2876 dependency = ((Klass*)ref)->java_mirror(); 2877 break; 2878 default: 2879 ShouldNotReachHere(); 2880 } | 2814 int java_lang_invoke_MemberName::flags(oop mname) { 2815 assert(is_instance(mname), "wrong type"); 2816 return mname->int_field(_flags_offset); 2817 } 2818 2819 void java_lang_invoke_MemberName::set_flags(oop mname, int flags) { 2820 assert(is_instance(mname), "wrong type"); 2821 mname->int_field_put(_flags_offset, flags); 2822 } 2823 2824 Metadata* java_lang_invoke_MemberName::vmtarget(oop mname) { 2825 assert(is_instance(mname), "wrong type"); 2826 return (Metadata*)mname->address_field(_vmtarget_offset); 2827 } 2828 2829 bool java_lang_invoke_MemberName::is_method(oop mname) { 2830 assert(is_instance(mname), "must be MemberName"); 2831 return (flags(mname) & (MN_IS_METHOD | MN_IS_CONSTRUCTOR)) > 0; 2832 } 2833 2834 void java_lang_invoke_MemberName::set_vmtarget(oop mname, Metadata* ref) { 2835 assert(is_instance(mname), "wrong type"); 2836 // check the type of the vmtarget 2837 oop dependency = NULL; 2838 if (ref != NULL) { 2839 switch (flags(mname) & (MN_IS_METHOD | 2840 MN_IS_CONSTRUCTOR | 2841 MN_IS_FIELD)) { 2842 case MN_IS_METHOD: 2843 case MN_IS_CONSTRUCTOR: 2844 assert(ref->is_method(), "should be a method"); 2845 dependency = ((Method*)ref)->method_holder()->java_mirror(); 2846 break; 2847 case MN_IS_FIELD: 2848 assert(ref->is_klass(), "should be a class"); 2849 dependency = ((Klass*)ref)->java_mirror(); 2850 break; 2851 default: 2852 ShouldNotReachHere(); 2853 } |