comparison src/share/vm/code/scopeDesc.cpp @ 3018:5857923e563c

Fixed an issue with frame states in exception dispatch chains (now we are correctly rethrowing the exception immediately at entering the interpreter).
author Thomas Wuerthinger <thomas@wuerthinger.net>
date Sat, 18 Jun 2011 19:13:55 +0200
parents f95d63e2154a
children e522a00b91aa
comparison
equal deleted inserted replaced
3017:b4ba003eb11d 3018:5857923e563c
29 #include "memory/resourceArea.hpp" 29 #include "memory/resourceArea.hpp"
30 #include "oops/oop.inline.hpp" 30 #include "oops/oop.inline.hpp"
31 #include "runtime/handles.inline.hpp" 31 #include "runtime/handles.inline.hpp"
32 32
33 33
34 ScopeDesc::ScopeDesc(const nmethod* code, int decode_offset, int obj_decode_offset, bool reexecute, bool return_oop) { 34 ScopeDesc::ScopeDesc(const nmethod* code, int decode_offset, int obj_decode_offset, bool reexecute, bool rethrow_exception, bool return_oop) {
35 _code = code; 35 _code = code;
36 _decode_offset = decode_offset; 36 _decode_offset = decode_offset;
37 _objects = decode_object_values(obj_decode_offset); 37 _objects = decode_object_values(obj_decode_offset);
38 _reexecute = reexecute; 38 _reexecute = reexecute;
39 _return_oop = return_oop; 39 _return_oop = return_oop;
40 _rethrow_exception = rethrow_exception;
40 decode_body(); 41 decode_body();
41 } 42 }
42 43
43 ScopeDesc::ScopeDesc(const nmethod* code, int decode_offset, bool reexecute, bool return_oop) { 44 ScopeDesc::ScopeDesc(const nmethod* code, int decode_offset, bool reexecute, bool rethrow_exception, bool return_oop) {
44 _code = code; 45 _code = code;
45 _decode_offset = decode_offset; 46 _decode_offset = decode_offset;
46 _objects = decode_object_values(DebugInformationRecorder::serialized_null); 47 _objects = decode_object_values(DebugInformationRecorder::serialized_null);
47 _reexecute = reexecute; 48 _reexecute = reexecute;
48 _return_oop = return_oop; 49 _return_oop = return_oop;
50 _rethrow_exception = rethrow_exception;
49 decode_body(); 51 decode_body();
50 } 52 }
51 53
52 54
53 ScopeDesc::ScopeDesc(const ScopeDesc* parent) { 55 ScopeDesc::ScopeDesc(const ScopeDesc* parent) {
54 _code = parent->_code; 56 _code = parent->_code;
55 _decode_offset = parent->_sender_decode_offset; 57 _decode_offset = parent->_sender_decode_offset;
56 _objects = parent->_objects; 58 _objects = parent->_objects;
57 _reexecute = false; //reexecute only applies to the first scope 59 _reexecute = false; //reexecute only applies to the first scope
60 _rethrow_exception = false;
58 _return_oop = false; 61 _return_oop = false;
59 decode_body(); 62 decode_body();
60 } 63 }
61 64
62 65