src/share/vm/classfile/javaClasses.cpp

Print this page




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     }