227 GrowableArray<ScopeValue*>* locals() { return _locals; }
228 GrowableArray<ScopeValue*>* expressions() { return _expressions; }
229 GrowableArray<MonitorValue*>* monitors() { return _monitors; }
230 IRScopeDebugInfo* caller() { return _caller; }
231
232 //Whether we should reexecute this bytecode for deopt
233 bool should_reexecute();
234
235 void record_debug_info(DebugInformationRecorder* recorder, int pc_offset, bool topmost, bool is_method_handle_invoke = false) {
236 if (caller() != NULL) {
237 // Order is significant: Must record caller first.
238 caller()->record_debug_info(recorder, pc_offset, false/*topmost*/);
239 }
240 DebugToken* locvals = recorder->create_scope_values(locals());
241 DebugToken* expvals = recorder->create_scope_values(expressions());
242 DebugToken* monvals = recorder->create_monitor_values(monitors());
243 // reexecute allowed only for the topmost frame
244 bool reexecute = topmost ? should_reexecute() : false;
245 bool return_oop = false; // This flag will be ignored since it used only for C2 with escape analysis.
246 bool rethrow_exception = false;
247 recorder->describe_scope(pc_offset, methodHandle(), scope()->method(), bci(), reexecute, rethrow_exception, is_method_handle_invoke, return_oop, locvals, expvals, monvals);
248 }
249 };
250
251
252 class CodeEmitInfo: public CompilationResourceObj {
253 friend class LinearScan;
254 private:
255 IRScopeDebugInfo* _scope_debug_info;
256 IRScope* _scope;
257 XHandlers* _exception_handlers;
258 OopMap* _oop_map;
259 ValueStack* _stack; // used by deoptimization (contains also monitors
260 bool _is_method_handle_invoke; // true if the associated call site is a MethodHandle call site.
261 bool _deoptimize_on_exception;
262
263 FrameMap* frame_map() const { return scope()->compilation()->frame_map(); }
264 Compilation* compilation() const { return scope()->compilation(); }
265
266 public:
267
|
227 GrowableArray<ScopeValue*>* locals() { return _locals; }
228 GrowableArray<ScopeValue*>* expressions() { return _expressions; }
229 GrowableArray<MonitorValue*>* monitors() { return _monitors; }
230 IRScopeDebugInfo* caller() { return _caller; }
231
232 //Whether we should reexecute this bytecode for deopt
233 bool should_reexecute();
234
235 void record_debug_info(DebugInformationRecorder* recorder, int pc_offset, bool topmost, bool is_method_handle_invoke = false) {
236 if (caller() != NULL) {
237 // Order is significant: Must record caller first.
238 caller()->record_debug_info(recorder, pc_offset, false/*topmost*/);
239 }
240 DebugToken* locvals = recorder->create_scope_values(locals());
241 DebugToken* expvals = recorder->create_scope_values(expressions());
242 DebugToken* monvals = recorder->create_monitor_values(monitors());
243 // reexecute allowed only for the topmost frame
244 bool reexecute = topmost ? should_reexecute() : false;
245 bool return_oop = false; // This flag will be ignored since it used only for C2 with escape analysis.
246 bool rethrow_exception = false;
247 recorder->describe_scope(pc_offset, methodHandle(), scope()->method(), bci(), reexecute, rethrow_exception, is_method_handle_invoke, return_oop, false, locvals, expvals, monvals);
248 }
249 };
250
251
252 class CodeEmitInfo: public CompilationResourceObj {
253 friend class LinearScan;
254 private:
255 IRScopeDebugInfo* _scope_debug_info;
256 IRScope* _scope;
257 XHandlers* _exception_handlers;
258 OopMap* _oop_map;
259 ValueStack* _stack; // used by deoptimization (contains also monitors
260 bool _is_method_handle_invoke; // true if the associated call site is a MethodHandle call site.
261 bool _deoptimize_on_exception;
262
263 FrameMap* frame_map() const { return scope()->compilation()->frame_map(); }
264 Compilation* compilation() const { return scope()->compilation(); }
265
266 public:
267
|