282 // The try block above is divided into 2 exception blocks |
282 // The try block above is divided into 2 exception blocks |
283 // separated by 'areturn' bci. |
283 // separated by 'areturn' bci. |
284 // |
284 // |
285 int ex_start = handler->start(); |
285 int ex_start = handler->start(); |
286 int ex_end = handler->limit(); |
286 int ex_end = handler->limit(); |
|
287 // ensure a block at the start of exception range and start of following code |
|
288 (void) make_block_at(ex_start); |
|
289 if (ex_end < _code_size) |
|
290 (void) make_block_at(ex_end); |
|
291 |
287 if (eb->is_handler()) { |
292 if (eb->is_handler()) { |
288 // Extend old handler exception range to cover additional range. |
293 // Extend old handler exception range to cover additional range. |
289 int old_ex_start = eb->ex_start_bci(); |
294 int old_ex_start = eb->ex_start_bci(); |
290 int old_ex_end = eb->ex_limit_bci(); |
295 int old_ex_end = eb->ex_limit_bci(); |
291 if (ex_start > old_ex_start) |
296 if (ex_start > old_ex_start) |
293 if (ex_end < old_ex_end) |
298 if (ex_end < old_ex_end) |
294 ex_end = old_ex_end; |
299 ex_end = old_ex_end; |
295 eb->clear_exception_handler(); // Reset exception information |
300 eb->clear_exception_handler(); // Reset exception information |
296 } |
301 } |
297 eb->set_exception_range(ex_start, ex_end); |
302 eb->set_exception_range(ex_start, ex_end); |
298 // ensure a block at the start of exception range and start of following code |
|
299 (void) make_block_at(ex_start); |
|
300 if (ex_end < _code_size) |
|
301 (void) make_block_at(ex_end); |
|
302 } |
303 } |
303 } |
304 } |
304 |
305 |
305 // scan the bytecodes and identify blocks |
306 // scan the bytecodes and identify blocks |
306 do_analysis(); |
307 do_analysis(); |