| Index: src/top.cc
|
| ===================================================================
|
| --- src/top.cc (revision 1495)
|
| +++ src/top.cc (working copy)
|
| @@ -823,36 +823,16 @@
|
|
|
|
|
| bool Top::optional_reschedule_exception(bool is_bottom_call) {
|
| - // Allways reschedule out of memory exceptions.
|
| - if (!is_out_of_memory()) {
|
| - // Never reschedule the exception if this is the bottom call.
|
| - bool clear_exception = is_bottom_call;
|
| -
|
| - // If the exception is externally caught, clear it if there are no
|
| - // JavaScript frames on the way to the C++ frame that has the
|
| - // external handler.
|
| - if (thread_local_.external_caught_exception_) {
|
| - ASSERT(thread_local_.try_catch_handler_ != NULL);
|
| - Address external_handler_address =
|
| - reinterpret_cast<Address>(thread_local_.try_catch_handler_);
|
| - JavaScriptFrameIterator it;
|
| - if (it.done() || (it.frame()->sp() > external_handler_address)) {
|
| - clear_exception = true;
|
| - }
|
| - }
|
| -
|
| - // Clear the exception if needed.
|
| - if (clear_exception) {
|
| - thread_local_.external_caught_exception_ = false;
|
| - clear_pending_exception();
|
| - return false;
|
| - }
|
| + if (!is_out_of_memory() &&
|
| + (thread_local_.external_caught_exception_ || is_bottom_call)) {
|
| + thread_local_.external_caught_exception_ = false;
|
| + clear_pending_exception();
|
| + return false;
|
| + } else {
|
| + thread_local_.scheduled_exception_ = pending_exception();
|
| + clear_pending_exception();
|
| + return true;
|
| }
|
| -
|
| - // Reschedule the exception.
|
| - thread_local_.scheduled_exception_ = pending_exception();
|
| - clear_pending_exception();
|
| - return true;
|
| }
|
|
|
|
|
|
|