235 IRScope* scope() { return _scope; }
236 int bci() { return _bci; }
237 GrowableArray<ScopeValue*>* locals() { return _locals; }
238 GrowableArray<ScopeValue*>* expressions() { return _expressions; }
239 GrowableArray<MonitorValue*>* monitors() { return _monitors; }
240 IRScopeDebugInfo* caller() { return _caller; }
241
242 //Whether we should reexecute this bytecode for deopt
243 bool should_reexecute();
244
245 void record_debug_info(DebugInformationRecorder* recorder, int pc_offset, bool topmost) {
246 if (caller() != NULL) {
247 // Order is significant: Must record caller first.
248 caller()->record_debug_info(recorder, pc_offset, false/*topmost*/);
249 }
250 DebugToken* locvals = recorder->create_scope_values(locals());
251 DebugToken* expvals = recorder->create_scope_values(expressions());
252 DebugToken* monvals = recorder->create_monitor_values(monitors());
253 // reexecute allowed only for the topmost frame
254 bool reexecute = topmost ? should_reexecute() : false;
255 recorder->describe_scope(pc_offset, scope()->method(), bci(), reexecute, locvals, expvals, monvals);
256 }
257 };
258
259
260 class CodeEmitInfo: public CompilationResourceObj {
261 friend class LinearScan;
262 private:
263 IRScopeDebugInfo* _scope_debug_info;
264 IRScope* _scope;
265 XHandlers* _exception_handlers;
266 OopMap* _oop_map;
267 ValueStack* _stack; // used by deoptimization (contains also monitors
268 int _bci;
269 CodeEmitInfo* _next;
270 int _id;
271
272 FrameMap* frame_map() const { return scope()->compilation()->frame_map(); }
273 Compilation* compilation() const { return scope()->compilation(); }
274
275 public:
|
235 IRScope* scope() { return _scope; }
236 int bci() { return _bci; }
237 GrowableArray<ScopeValue*>* locals() { return _locals; }
238 GrowableArray<ScopeValue*>* expressions() { return _expressions; }
239 GrowableArray<MonitorValue*>* monitors() { return _monitors; }
240 IRScopeDebugInfo* caller() { return _caller; }
241
242 //Whether we should reexecute this bytecode for deopt
243 bool should_reexecute();
244
245 void record_debug_info(DebugInformationRecorder* recorder, int pc_offset, bool topmost) {
246 if (caller() != NULL) {
247 // Order is significant: Must record caller first.
248 caller()->record_debug_info(recorder, pc_offset, false/*topmost*/);
249 }
250 DebugToken* locvals = recorder->create_scope_values(locals());
251 DebugToken* expvals = recorder->create_scope_values(expressions());
252 DebugToken* monvals = recorder->create_monitor_values(monitors());
253 // reexecute allowed only for the topmost frame
254 bool reexecute = topmost ? should_reexecute() : false;
255 bool is_method_handle_invoke = false;
256 recorder->describe_scope(pc_offset, scope()->method(), bci(), reexecute, is_method_handle_invoke, locvals, expvals, monvals);
257 }
258 };
259
260
261 class CodeEmitInfo: public CompilationResourceObj {
262 friend class LinearScan;
263 private:
264 IRScopeDebugInfo* _scope_debug_info;
265 IRScope* _scope;
266 XHandlers* _exception_handlers;
267 OopMap* _oop_map;
268 ValueStack* _stack; // used by deoptimization (contains also monitors
269 int _bci;
270 CodeEmitInfo* _next;
271 int _id;
272
273 FrameMap* frame_map() const { return scope()->compilation()->frame_map(); }
274 Compilation* compilation() const { return scope()->compilation(); }
275
276 public:
|