65 if (f->is_interpreted_frame()) {
66 return new interpretedVFrame(f, reg_map, thread);
67 }
68
69 // Compiled frame
70 CodeBlob* cb = f->cb();
71 if (cb != NULL) {
72 if (cb->is_compiled()) {
73 CompiledMethod* nm = (CompiledMethod*)cb;
74 return new compiledVFrame(f, reg_map, thread, nm);
75 }
76
77 if (f->is_runtime_frame()) {
78 // Skip this frame and try again.
79 RegisterMap temp_map = *reg_map;
80 frame s = f->sender(&temp_map);
81 return new_vframe(&s, &temp_map, thread);
82 }
83 }
84
85 // External frame
86 return new externalVFrame(f, reg_map, thread);
87 }
88
89 vframe* vframe::sender() const {
90 RegisterMap temp_map = *register_map();
91 assert(is_top(), "just checking");
92 if (_fr.is_entry_frame() && _fr.is_first_frame()) return NULL;
93 frame s = _fr.real_sender(&temp_map);
94 if (s.is_first_frame()) return NULL;
95 return vframe::new_vframe(&s, &temp_map, thread());
96 }
97
98 vframe* vframe::top() const {
99 vframe* vf = (vframe*) this;
100 while (!vf->is_top()) vf = vf->sender();
101 return vf;
102 }
103
104
|
65 if (f->is_interpreted_frame()) {
66 return new interpretedVFrame(f, reg_map, thread);
67 }
68
69 // Compiled frame
70 CodeBlob* cb = f->cb();
71 if (cb != NULL) {
72 if (cb->is_compiled()) {
73 CompiledMethod* nm = (CompiledMethod*)cb;
74 return new compiledVFrame(f, reg_map, thread, nm);
75 }
76
77 if (f->is_runtime_frame()) {
78 // Skip this frame and try again.
79 RegisterMap temp_map = *reg_map;
80 frame s = f->sender(&temp_map);
81 return new_vframe(&s, &temp_map, thread);
82 }
83 }
84
85 // Entry frame
86 if (f->is_entry_frame()) {
87 return new entryVFrame(f, reg_map, thread);
88 }
89
90 // External frame
91 return new externalVFrame(f, reg_map, thread);
92 }
93
94 vframe* vframe::sender() const {
95 RegisterMap temp_map = *register_map();
96 assert(is_top(), "just checking");
97 if (_fr.is_entry_frame() && _fr.is_first_frame()) return NULL;
98 frame s = _fr.real_sender(&temp_map);
99 if (s.is_first_frame()) return NULL;
100 return vframe::new_vframe(&s, &temp_map, thread());
101 }
102
103 vframe* vframe::top() const {
104 vframe* vf = (vframe*) this;
105 while (!vf->is_top()) vf = vf->sender();
106 return vf;
107 }
108
109
|