1 /* |
1 /* |
2 * Copyright 1999-2009 Sun Microsystems, Inc. All Rights Reserved. |
2 * Copyright 1999-2010 Sun Microsystems, Inc. All Rights Reserved. |
3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. |
3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. |
4 * |
4 * |
5 * This code is free software; you can redistribute it and/or modify it |
5 * This code is free software; you can redistribute it and/or modify it |
6 * under the terms of the GNU General Public License version 2 only, as |
6 * under the terms of the GNU General Public License version 2 only, as |
7 * published by the Free Software Foundation. |
7 * published by the Free Software Foundation. |
240 IRScopeDebugInfo* caller() { return _caller; } |
240 IRScopeDebugInfo* caller() { return _caller; } |
241 |
241 |
242 //Whether we should reexecute this bytecode for deopt |
242 //Whether we should reexecute this bytecode for deopt |
243 bool should_reexecute(); |
243 bool should_reexecute(); |
244 |
244 |
245 void record_debug_info(DebugInformationRecorder* recorder, int pc_offset, bool topmost) { |
245 void record_debug_info(DebugInformationRecorder* recorder, int pc_offset, bool topmost, bool is_method_handle_invoke = false) { |
246 if (caller() != NULL) { |
246 if (caller() != NULL) { |
247 // Order is significant: Must record caller first. |
247 // Order is significant: Must record caller first. |
248 caller()->record_debug_info(recorder, pc_offset, false/*topmost*/); |
248 caller()->record_debug_info(recorder, pc_offset, false/*topmost*/); |
249 } |
249 } |
250 DebugToken* locvals = recorder->create_scope_values(locals()); |
250 DebugToken* locvals = recorder->create_scope_values(locals()); |
251 DebugToken* expvals = recorder->create_scope_values(expressions()); |
251 DebugToken* expvals = recorder->create_scope_values(expressions()); |
252 DebugToken* monvals = recorder->create_monitor_values(monitors()); |
252 DebugToken* monvals = recorder->create_monitor_values(monitors()); |
253 // reexecute allowed only for the topmost frame |
253 // reexecute allowed only for the topmost frame |
254 bool reexecute = topmost ? should_reexecute() : false; |
254 bool reexecute = topmost ? should_reexecute() : false; |
255 bool is_method_handle_invoke = false; |
|
256 bool return_oop = false; // This flag will be ignored since it used only for C2 with escape analysis. |
255 bool return_oop = false; // This flag will be ignored since it used only for C2 with escape analysis. |
257 recorder->describe_scope(pc_offset, scope()->method(), bci(), reexecute, is_method_handle_invoke, return_oop, locvals, expvals, monvals); |
256 recorder->describe_scope(pc_offset, scope()->method(), bci(), reexecute, is_method_handle_invoke, return_oop, locvals, expvals, monvals); |
258 } |
257 } |
259 }; |
258 }; |
260 |
259 |
301 XHandlers* exception_handlers() const { return _exception_handlers; } |
300 XHandlers* exception_handlers() const { return _exception_handlers; } |
302 ValueStack* stack() const { return _stack; } |
301 ValueStack* stack() const { return _stack; } |
303 int bci() const { return _bci; } |
302 int bci() const { return _bci; } |
304 |
303 |
305 void add_register_oop(LIR_Opr opr); |
304 void add_register_oop(LIR_Opr opr); |
306 void record_debug_info(DebugInformationRecorder* recorder, int pc_offset); |
305 void record_debug_info(DebugInformationRecorder* recorder, int pc_offset, bool is_method_handle_invoke = false); |
307 |
306 |
308 CodeEmitInfo* next() const { return _next; } |
307 CodeEmitInfo* next() const { return _next; } |
309 void set_next(CodeEmitInfo* next) { _next = next; } |
308 void set_next(CodeEmitInfo* next) { _next = next; } |
310 |
309 |
311 int id() const { return _id; } |
310 int id() const { return _id; } |