| Index: src/top.cc
|
| ===================================================================
|
| --- src/top.cc (revision 922)
|
| +++ src/top.cc (working copy)
|
| @@ -822,6 +822,7 @@
|
| }
|
|
|
| // Save the message for reporting if the the exception remains uncaught.
|
| + thread_local_.has_pending_message_ = report_exception;
|
| thread_local_.pending_message_ = message;
|
| if (!message_obj.is_null()) {
|
| thread_local_.pending_message_obj_ = *message_obj;
|
| @@ -855,26 +856,33 @@
|
| context()->mark_out_of_memory();
|
| } else {
|
| Handle<Object> exception(pending_exception());
|
| - if (thread_local_.external_caught_exception_) {
|
| + bool external_caught = thread_local_.external_caught_exception_;
|
| + thread_local_.external_caught_exception_ = false;
|
| + if (external_caught) {
|
| thread_local_.try_catch_handler_->exception_ =
|
| thread_local_.pending_exception_;
|
| if (!thread_local_.pending_message_obj_->IsTheHole()) {
|
| try_catch_handler()->message_ = thread_local_.pending_message_obj_;
|
| }
|
| - } else if (thread_local_.pending_message_ != NULL) {
|
| - MessageHandler::ReportMessage(thread_local_.pending_message_);
|
| - } else if (!thread_local_.pending_message_obj_->IsTheHole()) {
|
| - Handle<Object> message_obj(thread_local_.pending_message_obj_);
|
| - if (thread_local_.pending_message_script_ != NULL) {
|
| - Handle<Script> script(thread_local_.pending_message_script_);
|
| - int start_pos = thread_local_.pending_message_start_pos_;
|
| - int end_pos = thread_local_.pending_message_end_pos_;
|
| - MessageLocation location(script, start_pos, end_pos);
|
| - MessageHandler::ReportMessage(&location, message_obj);
|
| - } else {
|
| - MessageHandler::ReportMessage(NULL, message_obj);
|
| + }
|
| + if (thread_local_.has_pending_message_) {
|
| + thread_local_.has_pending_message_ = false;
|
| + if (thread_local_.pending_message_ != NULL) {
|
| + MessageHandler::ReportMessage(thread_local_.pending_message_);
|
| + } else if (!thread_local_.pending_message_obj_->IsTheHole()) {
|
| + Handle<Object> message_obj(thread_local_.pending_message_obj_);
|
| + if (thread_local_.pending_message_script_ != NULL) {
|
| + Handle<Script> script(thread_local_.pending_message_script_);
|
| + int start_pos = thread_local_.pending_message_start_pos_;
|
| + int end_pos = thread_local_.pending_message_end_pos_;
|
| + MessageLocation location(script, start_pos, end_pos);
|
| + MessageHandler::ReportMessage(&location, message_obj);
|
| + } else {
|
| + MessageHandler::ReportMessage(NULL, message_obj);
|
| + }
|
| }
|
| }
|
| + thread_local_.external_caught_exception_ = external_caught;
|
| set_pending_exception(*exception);
|
| }
|
| clear_pending_message();
|
|
|