230 , _expressions(expressions)
231 , _monitors(monitors)
232 , _caller(caller) {}
233
234
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 void record_debug_info(DebugInformationRecorder* recorder, int pc_offset) {
243 if (caller() != NULL) {
244 // Order is significant: Must record caller first.
245 caller()->record_debug_info(recorder, pc_offset);
246 }
247 DebugToken* locvals = recorder->create_scope_values(locals());
248 DebugToken* expvals = recorder->create_scope_values(expressions());
249 DebugToken* monvals = recorder->create_monitor_values(monitors());
250 recorder->describe_scope(pc_offset, scope()->method(), bci(), locvals, expvals, monvals);
251 }
252 };
253
254
255 class CodeEmitInfo: public CompilationResourceObj {
256 friend class LinearScan;
257 private:
258 IRScopeDebugInfo* _scope_debug_info;
259 IRScope* _scope;
260 XHandlers* _exception_handlers;
261 OopMap* _oop_map;
262 ValueStack* _stack; // used by deoptimization (contains also monitors
263 int _bci;
264 CodeEmitInfo* _next;
265 int _id;
266
267 FrameMap* frame_map() const { return scope()->compilation()->frame_map(); }
268 Compilation* compilation() const { return scope()->compilation(); }
269
270 public:
|
230 , _expressions(expressions)
231 , _monitors(monitors)
232 , _caller(caller) {}
233
234
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 void record_debug_info(DebugInformationRecorder* recorder, int pc_offset) {
243 if (caller() != NULL) {
244 // Order is significant: Must record caller first.
245 caller()->record_debug_info(recorder, pc_offset);
246 }
247 DebugToken* locvals = recorder->create_scope_values(locals());
248 DebugToken* expvals = recorder->create_scope_values(expressions());
249 DebugToken* monvals = recorder->create_monitor_values(monitors());
250 recorder->describe_scope(pc_offset, scope()->method(), bci(), false, locvals, expvals, monvals);
251 }
252 };
253
254
255 class CodeEmitInfo: public CompilationResourceObj {
256 friend class LinearScan;
257 private:
258 IRScopeDebugInfo* _scope_debug_info;
259 IRScope* _scope;
260 XHandlers* _exception_handlers;
261 OopMap* _oop_map;
262 ValueStack* _stack; // used by deoptimization (contains also monitors
263 int _bci;
264 CodeEmitInfo* _next;
265 int _id;
266
267 FrameMap* frame_map() const { return scope()->compilation()->frame_map(); }
268 Compilation* compilation() const { return scope()->compilation(); }
269
270 public:
|