| Index: src/isolate.cc
|
| ===================================================================
|
| --- src/isolate.cc (revision 12718)
|
| +++ src/isolate.cc (working copy)
|
| @@ -942,6 +942,19 @@
|
| }
|
|
|
|
|
| +void Isolate::ResumeExecution() {
|
| + if (has_pending_exception()
|
| + && pending_exception() == heap_.termination_exception()) {
|
| + thread_local_top()->external_caught_exception_ = false;
|
| + clear_pending_exception();
|
| + }
|
| + if (has_scheduled_exception()
|
| + && scheduled_exception() == heap_.termination_exception()) {
|
| + clear_scheduled_exception();
|
| + }
|
| +}
|
| +
|
| +
|
| Failure* Isolate::Throw(Object* exception, MessageLocation* location) {
|
| DoThrow(exception, location);
|
| return Failure::Exception();
|
| @@ -1764,12 +1777,14 @@
|
| } else if (thread_local_top_.pending_exception_ ==
|
| heap()->termination_exception()) {
|
| try_catch_handler()->can_continue_ = false;
|
| + try_catch_handler()->has_terminated_ = true;
|
| try_catch_handler()->exception_ = heap()->null_value();
|
| } else {
|
| // At this point all non-object (failure) exceptions have
|
| // been dealt with so this shouldn't fail.
|
| ASSERT(!pending_exception()->IsFailure());
|
| try_catch_handler()->can_continue_ = true;
|
| + try_catch_handler()->has_terminated_ = false;
|
| try_catch_handler()->exception_ = pending_exception();
|
| if (!thread_local_top_.pending_message_obj_->IsTheHole()) {
|
| try_catch_handler()->message_ = thread_local_top_.pending_message_obj_;
|
|
|