Index: src/isolate.cc |
diff --git a/src/isolate.cc b/src/isolate.cc |
index c704e06338b83a0a91d9c48ddc33d5266fc258c9..841e583c8bc22be0dcb9fec28b221e35aa2c6d07 100644 |
--- a/src/isolate.cc |
+++ b/src/isolate.cc |
@@ -82,7 +82,6 @@ void ThreadLocalTop::InitializeInternal() { |
external_caught_exception_ = false; |
failed_access_check_callback_ = NULL; |
save_context_ = NULL; |
- catcher_ = NULL; |
promise_on_stack_ = NULL; |
// These members are re-initialized later after deserialization |
@@ -252,7 +251,6 @@ void Isolate::RegisterTryCatchHandler(v8::TryCatch* that) { |
void Isolate::UnregisterTryCatchHandler(v8::TryCatch* that) { |
DCHECK(thread_local_top()->try_catch_handler() == that); |
thread_local_top()->set_try_catch_handler(that->next_); |
- thread_local_top()->catcher_ = NULL; |
} |
@@ -1005,11 +1003,6 @@ Object* Isolate::Throw(Object* exception, MessageLocation* location) { |
// Save the message for reporting if the the exception remains uncaught. |
thread_local_top()->has_pending_message_ = report_exception; |
- // Do not forget to clean catcher_ if currently thrown exception cannot |
- // be caught. If necessary, ReThrow will update the catcher. |
- thread_local_top()->catcher_ = |
- can_be_caught_externally ? try_catch_handler() : NULL; |
- |
// Set the exception being thrown. |
set_pending_exception(*exception_handle); |
return heap()->exception(); |
@@ -1017,12 +1010,7 @@ Object* Isolate::Throw(Object* exception, MessageLocation* location) { |
Object* Isolate::ReThrow(Object* exception) { |
- bool can_be_caught_externally = false; |
- bool catchable_by_javascript = is_catchable_by_javascript(exception); |
- ShouldReportException(&can_be_caught_externally, catchable_by_javascript); |
- |
- thread_local_top()->catcher_ = can_be_caught_externally ? |
- try_catch_handler() : NULL; |
+ DCHECK(!has_pending_exception()); |
// Set the exception being re-thrown. |
set_pending_exception(exception); |
@@ -1387,14 +1375,6 @@ Handle<JSMessageObject> Isolate::CreateMessage(Handle<Object> exception, |
} |
-bool Isolate::HasExternalTryCatch() { |
- DCHECK(has_pending_exception()); |
- |
- return (thread_local_top()->catcher_ != NULL) && |
- (try_catch_handler() == thread_local_top()->catcher_); |
-} |
- |
- |
bool Isolate::IsFinallyOnTop() { |
// Get the address of the external handler so we can compare the address to |
// determine which one is closer to the top of the stack. |
@@ -1954,22 +1934,23 @@ void Isolate::InitializeThreadLocal() { |
bool Isolate::PropagatePendingExceptionToExternalTryCatch() { |
- DCHECK(has_pending_exception()); |
+ Object* exception = pending_exception(); |
- bool has_external_try_catch = HasExternalTryCatch(); |
- if (!has_external_try_catch) { |
+ bool can_be_caught_externally = false; |
+ bool catchable_by_javascript = is_catchable_by_javascript(exception); |
+ ShouldReportException(&can_be_caught_externally, catchable_by_javascript); |
+ if (!can_be_caught_externally) { |
thread_local_top_.external_caught_exception_ = false; |
return true; |
} |
- bool catchable_by_js = is_catchable_by_javascript(pending_exception()); |
- if (catchable_by_js && IsFinallyOnTop()) { |
+ if (catchable_by_javascript && IsFinallyOnTop()) { |
thread_local_top_.external_caught_exception_ = false; |
return false; |
} |
thread_local_top_.external_caught_exception_ = true; |
- if (thread_local_top_.pending_exception_ == heap()->termination_exception()) { |
+ if (!catchable_by_javascript) { |
try_catch_handler()->can_continue_ = false; |
try_catch_handler()->has_terminated_ = true; |
try_catch_handler()->exception_ = heap()->null_value(); |