| Index: src/top.h
|
| ===================================================================
|
| --- src/top.h (revision 614)
|
| +++ src/top.h (working copy)
|
| @@ -53,9 +53,7 @@
|
| bool external_caught_exception_;
|
| v8::TryCatch* try_catch_handler_;
|
| SaveContext* save_context_;
|
| - // Flag indicating that the try_catch_handler_ contains an exception to be
|
| - // caught.
|
| - bool pending_external_caught_exception_;
|
| + v8::TryCatch* catcher_;
|
|
|
| // Stack.
|
| Address c_entry_fp_; // the frame pointer of the top c entry frame
|
| @@ -146,16 +144,10 @@
|
| thread_local_.scheduled_exception_ = Heap::the_hole_value();
|
| }
|
|
|
| - // Propagate the external caught exception flag. If there is no external
|
| - // caught exception always clear the TryCatch handler as it might contain
|
| - // an exception object from a throw which was bypassed by a finally block
|
| - // doing an explicit return/break/continue.
|
| - static void propagate_external_caught() {
|
| - if (has_pending_exception()) {
|
| - thread_local_.external_caught_exception_ =
|
| - thread_local_.pending_external_caught_exception_;
|
| - }
|
| - thread_local_.pending_external_caught_exception_ = false;
|
| + static void setup_external_caught() {
|
| + thread_local_.external_caught_exception_ =
|
| + (thread_local_.catcher_ != NULL) &&
|
| + (Top::thread_local_.try_catch_handler_ == Top::thread_local_.catcher_);
|
| }
|
|
|
| // Tells whether the current context has experienced an out of memory
|
|
|