< prev index next >

src/hotspot/share/classfile/javaClasses.cpp

Print this page




2660   InstanceKlass* ik = method->method_holder();
2661   CallInfo info(method(), ik, CHECK);
2662   MethodHandles::init_method_MemberName(mname, info);
2663   // set bci
2664   java_lang_StackFrameInfo::set_bci(stackFrame(), bci);
2665   // method may be redefined; store the version
2666   int version = method->constants()->version();
2667   assert((jushort)version == version, "version should be short");
2668   java_lang_StackFrameInfo::set_version(stackFrame(), (short)version);
2669 }
2670 
2671 void java_lang_StackFrameInfo::to_stack_trace_element(Handle stackFrame, Handle stack_trace_element, TRAPS) {
2672   ResourceMark rm(THREAD);
2673   HandleMark hm(THREAD);
2674   Handle mname(THREAD, stackFrame->obj_field(java_lang_StackFrameInfo::_memberName_offset));
2675   Klass* clazz = java_lang_Class::as_Klass(java_lang_invoke_MemberName::clazz(mname()));
2676   InstanceKlass* holder = InstanceKlass::cast(clazz);
2677   Method* method = java_lang_StackFrameInfo::get_method(stackFrame, holder, CHECK);
2678 
2679   short version = stackFrame->short_field(_version_offset);
2680   short bci = stackFrame->short_field(_bci_offset);
2681   Symbol* name = method->name();
2682   java_lang_StackTraceElement::fill_in(stack_trace_element, holder, method, version, bci, name, CHECK);
2683 }
2684 
2685 #define STACKFRAMEINFO_FIELDS_DO(macro) \
2686   macro(_memberName_offset,     k, "memberName",  object_signature, false); \
2687   macro(_bci_offset,            k, "bci",         short_signature,  false)
2688 
2689 void java_lang_StackFrameInfo::compute_offsets() {
2690   InstanceKlass* k = SystemDictionary::StackFrameInfo_klass();
2691   STACKFRAMEINFO_FIELDS_DO(FIELD_COMPUTE_OFFSET);
2692   STACKFRAMEINFO_INJECTED_FIELDS(INJECTED_FIELD_COMPUTE_OFFSET);
2693 }
2694 
2695 #if INCLUDE_CDS
2696 void java_lang_StackFrameInfo::serialize_offsets(SerializeClosure* f) {
2697   STACKFRAMEINFO_FIELDS_DO(FIELD_SERIALIZE_OFFSET);
2698   STACKFRAMEINFO_INJECTED_FIELDS(INJECTED_FIELD_SERIALIZE_OFFSET);
2699 }
2700 #endif
2701 
2702 #define LIVESTACKFRAMEINFO_FIELDS_DO(macro) \
2703   macro(_monitors_offset,   k, "monitors",    object_array_signature, false); \
2704   macro(_locals_offset,     k, "locals",      object_array_signature, false); \
2705   macro(_operands_offset,   k, "operands",    object_array_signature, false); \
2706   macro(_mode_offset,       k, "mode",        int_signature,          false)
2707 




2660   InstanceKlass* ik = method->method_holder();
2661   CallInfo info(method(), ik, CHECK);
2662   MethodHandles::init_method_MemberName(mname, info);
2663   // set bci
2664   java_lang_StackFrameInfo::set_bci(stackFrame(), bci);
2665   // method may be redefined; store the version
2666   int version = method->constants()->version();
2667   assert((jushort)version == version, "version should be short");
2668   java_lang_StackFrameInfo::set_version(stackFrame(), (short)version);
2669 }
2670 
2671 void java_lang_StackFrameInfo::to_stack_trace_element(Handle stackFrame, Handle stack_trace_element, TRAPS) {
2672   ResourceMark rm(THREAD);
2673   HandleMark hm(THREAD);
2674   Handle mname(THREAD, stackFrame->obj_field(java_lang_StackFrameInfo::_memberName_offset));
2675   Klass* clazz = java_lang_Class::as_Klass(java_lang_invoke_MemberName::clazz(mname()));
2676   InstanceKlass* holder = InstanceKlass::cast(clazz);
2677   Method* method = java_lang_StackFrameInfo::get_method(stackFrame, holder, CHECK);
2678 
2679   short version = stackFrame->short_field(_version_offset);
2680   int bci = stackFrame->int_field(_bci_offset);
2681   Symbol* name = method->name();
2682   java_lang_StackTraceElement::fill_in(stack_trace_element, holder, method, version, bci, name, CHECK);
2683 }
2684 
2685 #define STACKFRAMEINFO_FIELDS_DO(macro) \
2686   macro(_memberName_offset,     k, "memberName",  object_signature, false); \
2687   macro(_bci_offset,            k, "bci",         int_signature,    false)
2688 
2689 void java_lang_StackFrameInfo::compute_offsets() {
2690   InstanceKlass* k = SystemDictionary::StackFrameInfo_klass();
2691   STACKFRAMEINFO_FIELDS_DO(FIELD_COMPUTE_OFFSET);
2692   STACKFRAMEINFO_INJECTED_FIELDS(INJECTED_FIELD_COMPUTE_OFFSET);
2693 }
2694 
2695 #if INCLUDE_CDS
2696 void java_lang_StackFrameInfo::serialize_offsets(SerializeClosure* f) {
2697   STACKFRAMEINFO_FIELDS_DO(FIELD_SERIALIZE_OFFSET);
2698   STACKFRAMEINFO_INJECTED_FIELDS(INJECTED_FIELD_SERIALIZE_OFFSET);
2699 }
2700 #endif
2701 
2702 #define LIVESTACKFRAMEINFO_FIELDS_DO(macro) \
2703   macro(_monitors_offset,   k, "monitors",    object_array_signature, false); \
2704   macro(_locals_offset,     k, "locals",      object_array_signature, false); \
2705   macro(_operands_offset,   k, "operands",    object_array_signature, false); \
2706   macro(_mode_offset,       k, "mode",        int_signature,          false)
2707 


< prev index next >