192 |
192 |
193 #define PENDING_EXCEPTION (((ThreadShadow*)THREAD)->pending_exception()) |
193 #define PENDING_EXCEPTION (((ThreadShadow*)THREAD)->pending_exception()) |
194 #define HAS_PENDING_EXCEPTION (((ThreadShadow*)THREAD)->has_pending_exception()) |
194 #define HAS_PENDING_EXCEPTION (((ThreadShadow*)THREAD)->has_pending_exception()) |
195 #define CLEAR_PENDING_EXCEPTION (((ThreadShadow*)THREAD)->clear_pending_exception()) |
195 #define CLEAR_PENDING_EXCEPTION (((ThreadShadow*)THREAD)->clear_pending_exception()) |
196 |
196 |
197 #define CHECK THREAD); if (HAS_PENDING_EXCEPTION) return ; (0 |
197 #define CHECK THREAD); if (HAS_PENDING_EXCEPTION) return ; (void)(0 |
198 #define CHECK_(result) THREAD); if (HAS_PENDING_EXCEPTION) return result; (0 |
198 #define CHECK_(result) THREAD); if (HAS_PENDING_EXCEPTION) return result; (void)(0 |
199 #define CHECK_0 CHECK_(0) |
199 #define CHECK_0 CHECK_(0) |
200 #define CHECK_NH CHECK_(Handle()) |
200 #define CHECK_NH CHECK_(Handle()) |
201 #define CHECK_NULL CHECK_(NULL) |
201 #define CHECK_NULL CHECK_(NULL) |
202 #define CHECK_false CHECK_(false) |
202 #define CHECK_false CHECK_(false) |
203 |
203 |
204 #define CHECK_AND_CLEAR THREAD); if (HAS_PENDING_EXCEPTION) { CLEAR_PENDING_EXCEPTION; return; } (0 |
204 #define CHECK_AND_CLEAR THREAD); if (HAS_PENDING_EXCEPTION) { CLEAR_PENDING_EXCEPTION; return; } (void)(0 |
205 #define CHECK_AND_CLEAR_(result) THREAD); if (HAS_PENDING_EXCEPTION) { CLEAR_PENDING_EXCEPTION; return result; } (0 |
205 #define CHECK_AND_CLEAR_(result) THREAD); if (HAS_PENDING_EXCEPTION) { CLEAR_PENDING_EXCEPTION; return result; } (void)(0 |
206 #define CHECK_AND_CLEAR_0 CHECK_AND_CLEAR_(0) |
206 #define CHECK_AND_CLEAR_0 CHECK_AND_CLEAR_(0) |
207 #define CHECK_AND_CLEAR_NH CHECK_AND_CLEAR_(Handle()) |
207 #define CHECK_AND_CLEAR_NH CHECK_AND_CLEAR_(Handle()) |
208 #define CHECK_AND_CLEAR_NULL CHECK_AND_CLEAR_(NULL) |
208 #define CHECK_AND_CLEAR_NULL CHECK_AND_CLEAR_(NULL) |
209 #define CHECK_AND_CLEAR_false CHECK_AND_CLEAR_(false) |
209 #define CHECK_AND_CLEAR_false CHECK_AND_CLEAR_(false) |
210 |
210 |
280 THREAD); if (HAS_PENDING_EXCEPTION) { \ |
280 THREAD); if (HAS_PENDING_EXCEPTION) { \ |
281 oop ex = PENDING_EXCEPTION; \ |
281 oop ex = PENDING_EXCEPTION; \ |
282 CLEAR_PENDING_EXCEPTION; \ |
282 CLEAR_PENDING_EXCEPTION; \ |
283 ex->print(); \ |
283 ex->print(); \ |
284 ShouldNotReachHere(); \ |
284 ShouldNotReachHere(); \ |
285 } (0 |
285 } (void)(0 |
286 |
286 |
287 // ExceptionMark is a stack-allocated helper class for local exception handling. |
287 // ExceptionMark is a stack-allocated helper class for local exception handling. |
288 // It is used with the EXCEPTION_MARK macro. |
288 // It is used with the EXCEPTION_MARK macro. |
289 |
289 |
290 class ExceptionMark { |
290 class ExceptionMark { |