228 , _scope_debug_info(NULL) |
228 , _scope_debug_info(NULL) |
229 , _oop_map(NULL) |
229 , _oop_map(NULL) |
230 , _stack(stack) |
230 , _stack(stack) |
231 , _exception_handlers(exception_handlers) |
231 , _exception_handlers(exception_handlers) |
232 , _next(NULL) |
232 , _next(NULL) |
233 , _id(-1) { |
233 , _id(-1) |
|
234 , _is_method_handle_invoke(false) { |
234 assert(_stack != NULL, "must be non null"); |
235 assert(_stack != NULL, "must be non null"); |
235 assert(_bci == SynchronizationEntryBCI || Bytecodes::is_defined(scope()->method()->java_code_at_bci(_bci)), "make sure bci points at a real bytecode"); |
236 assert(_bci == SynchronizationEntryBCI || Bytecodes::is_defined(scope()->method()->java_code_at_bci(_bci)), "make sure bci points at a real bytecode"); |
236 } |
237 } |
237 |
238 |
238 |
239 |
239 CodeEmitInfo::CodeEmitInfo(CodeEmitInfo* info, bool lock_stack_only) |
240 CodeEmitInfo::CodeEmitInfo(CodeEmitInfo* info, bool lock_stack_only) |
240 : _scope(info->_scope) |
241 : _scope(info->_scope) |
241 , _exception_handlers(NULL) |
242 , _exception_handlers(NULL) |
242 , _bci(info->_bci) |
243 , _bci(info->_bci) |
243 , _scope_debug_info(NULL) |
244 , _scope_debug_info(NULL) |
244 , _oop_map(NULL) { |
245 , _oop_map(NULL) |
|
246 , _is_method_handle_invoke(info->_is_method_handle_invoke) { |
245 if (lock_stack_only) { |
247 if (lock_stack_only) { |
246 if (info->_stack != NULL) { |
248 if (info->_stack != NULL) { |
247 _stack = info->_stack->copy_locks(); |
249 _stack = info->_stack->copy_locks(); |
248 } else { |
250 } else { |
249 _stack = NULL; |
251 _stack = NULL; |
257 _exception_handlers = new XHandlers(info->_exception_handlers); |
259 _exception_handlers = new XHandlers(info->_exception_handlers); |
258 } |
260 } |
259 } |
261 } |
260 |
262 |
261 |
263 |
262 void CodeEmitInfo::record_debug_info(DebugInformationRecorder* recorder, int pc_offset, bool is_method_handle_invoke) { |
264 void CodeEmitInfo::record_debug_info(DebugInformationRecorder* recorder, int pc_offset) { |
263 // record the safepoint before recording the debug info for enclosing scopes |
265 // record the safepoint before recording the debug info for enclosing scopes |
264 recorder->add_safepoint(pc_offset, _oop_map->deep_copy()); |
266 recorder->add_safepoint(pc_offset, _oop_map->deep_copy()); |
265 _scope_debug_info->record_debug_info(recorder, pc_offset, true/*topmost*/, is_method_handle_invoke); |
267 _scope_debug_info->record_debug_info(recorder, pc_offset, true/*topmost*/, _is_method_handle_invoke); |
266 recorder->end_safepoint(pc_offset); |
268 recorder->end_safepoint(pc_offset); |
267 } |
269 } |
268 |
270 |
269 |
271 |
270 void CodeEmitInfo::add_register_oop(LIR_Opr opr) { |
272 void CodeEmitInfo::add_register_oop(LIR_Opr opr) { |