34 _code = code;
35 _decode_offset = decode_offset;
36 _objects = decode_object_values(obj_decode_offset);
37 _reexecute = reexecute;
38 _rethrow_exception = rethrow_exception;
39 _return_oop = return_oop;
40 decode_body();
41 }
42
43 ScopeDesc::ScopeDesc(const CompiledMethod* code, int decode_offset, bool reexecute, bool rethrow_exception, bool return_oop) {
44 _code = code;
45 _decode_offset = decode_offset;
46 _objects = decode_object_values(DebugInformationRecorder::serialized_null);
47 _reexecute = reexecute;
48 _rethrow_exception = rethrow_exception;
49 _return_oop = return_oop;
50 decode_body();
51 }
52
53
54 ScopeDesc::ScopeDesc(const ScopeDesc* parent) {
55 _code = parent->_code;
56 _decode_offset = parent->_sender_decode_offset;
57 _objects = parent->_objects;
58 _reexecute = false; //reexecute only applies to the first scope
59 _rethrow_exception = false;
60 _return_oop = false;
61 decode_body();
62 }
63
64
65 void ScopeDesc::decode_body() {
66 if (decode_offset() == DebugInformationRecorder::serialized_null) {
67 // This is a sentinel record, which is only relevant to
68 // approximate queries. Decode a reasonable frame.
69 _sender_decode_offset = DebugInformationRecorder::serialized_null;
70 _method = _code->method();
71 _bci = InvocationEntryBci;
72 _locals_decode_offset = DebugInformationRecorder::serialized_null;
73 _expressions_decode_offset = DebugInformationRecorder::serialized_null;
74 _monitors_decode_offset = DebugInformationRecorder::serialized_null;
75 } else {
76 // decode header
77 DebugInfoReadStream* stream = stream_at(decode_offset());
78
79 _sender_decode_offset = stream->read_int();
80 _method = stream->read_method();
81 _bci = stream->read_bci();
|
34 _code = code;
35 _decode_offset = decode_offset;
36 _objects = decode_object_values(obj_decode_offset);
37 _reexecute = reexecute;
38 _rethrow_exception = rethrow_exception;
39 _return_oop = return_oop;
40 decode_body();
41 }
42
43 ScopeDesc::ScopeDesc(const CompiledMethod* code, int decode_offset, bool reexecute, bool rethrow_exception, bool return_oop) {
44 _code = code;
45 _decode_offset = decode_offset;
46 _objects = decode_object_values(DebugInformationRecorder::serialized_null);
47 _reexecute = reexecute;
48 _rethrow_exception = rethrow_exception;
49 _return_oop = return_oop;
50 decode_body();
51 }
52
53
54 void ScopeDesc::initialize(const ScopeDesc* parent, int decode_offset) {
55 _code = parent->_code;
56 _decode_offset = decode_offset;
57 _objects = parent->_objects;
58 _reexecute = false; //reexecute only applies to the first scope
59 _rethrow_exception = false;
60 _return_oop = false;
61 decode_body();
62 }
63
64 ScopeDesc::ScopeDesc(const ScopeDesc* parent) {
65 initialize(parent, parent->_sender_decode_offset);
66 }
67
68 ScopeDesc::ScopeDesc(const ScopeDesc* parent, int decode_offset) {
69 initialize(parent, decode_offset);
70 }
71
72
73 void ScopeDesc::decode_body() {
74 if (decode_offset() == DebugInformationRecorder::serialized_null) {
75 // This is a sentinel record, which is only relevant to
76 // approximate queries. Decode a reasonable frame.
77 _sender_decode_offset = DebugInformationRecorder::serialized_null;
78 _method = _code->method();
79 _bci = InvocationEntryBci;
80 _locals_decode_offset = DebugInformationRecorder::serialized_null;
81 _expressions_decode_offset = DebugInformationRecorder::serialized_null;
82 _monitors_decode_offset = DebugInformationRecorder::serialized_null;
83 } else {
84 // decode header
85 DebugInfoReadStream* stream = stream_at(decode_offset());
86
87 _sender_decode_offset = stream->read_int();
88 _method = stream->read_method();
89 _bci = stream->read_bci();
|