237 GrowableArray<ScopeValue*>* locals() { return _locals; } |
237 GrowableArray<ScopeValue*>* locals() { return _locals; } |
238 GrowableArray<ScopeValue*>* expressions() { return _expressions; } |
238 GrowableArray<ScopeValue*>* expressions() { return _expressions; } |
239 GrowableArray<MonitorValue*>* monitors() { return _monitors; } |
239 GrowableArray<MonitorValue*>* monitors() { return _monitors; } |
240 IRScopeDebugInfo* caller() { return _caller; } |
240 IRScopeDebugInfo* caller() { return _caller; } |
241 |
241 |
242 void record_debug_info(DebugInformationRecorder* recorder, int pc_offset) { |
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) { |
243 if (caller() != NULL) { |
246 if (caller() != NULL) { |
244 // Order is significant: Must record caller first. |
247 // Order is significant: Must record caller first. |
245 caller()->record_debug_info(recorder, pc_offset); |
248 caller()->record_debug_info(recorder, pc_offset, false/*topmost*/); |
246 } |
249 } |
247 DebugToken* locvals = recorder->create_scope_values(locals()); |
250 DebugToken* locvals = recorder->create_scope_values(locals()); |
248 DebugToken* expvals = recorder->create_scope_values(expressions()); |
251 DebugToken* expvals = recorder->create_scope_values(expressions()); |
249 DebugToken* monvals = recorder->create_monitor_values(monitors()); |
252 DebugToken* monvals = recorder->create_monitor_values(monitors()); |
250 recorder->describe_scope(pc_offset, scope()->method(), bci(), locvals, expvals, monvals); |
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); |
251 } |
256 } |
252 }; |
257 }; |
253 |
258 |
254 |
259 |
255 class CodeEmitInfo: public CompilationResourceObj { |
260 class CodeEmitInfo: public CompilationResourceObj { |