| Index: src/isolate.cc
|
| diff --git a/src/isolate.cc b/src/isolate.cc
|
| index 632ecdc50a32b569ba3224c9428a165ef10deccb..1d390401ef8f1e4f5d5b1cc0dde2674e55a1f855 100644
|
| --- a/src/isolate.cc
|
| +++ b/src/isolate.cc
|
| @@ -1198,6 +1198,7 @@ bool Isolate::IsErrorObject(Handle<Object> obj) {
|
| return false;
|
| }
|
|
|
| +static int fatal_exception_depth = 0;
|
|
|
| void Isolate::DoThrow(Object* exception, MessageLocation* location) {
|
| ASSERT(!has_pending_exception());
|
| @@ -1281,6 +1282,20 @@ void Isolate::DoThrow(Object* exception, MessageLocation* location) {
|
| thread_local_top()->pending_message_start_pos_ = location->start_pos();
|
| thread_local_top()->pending_message_end_pos_ = location->end_pos();
|
| }
|
| +
|
| + // If the abort-on-uncaught-exception flag is specified, abort on any
|
| + // exception not caught by JavaScript, even when an external handler is
|
| + // present. This flag is intended for use by JavaScript developers, so
|
| + // print a user-friendly stack trace (not an internal one).
|
| + if (fatal_exception_depth == 0 &&
|
| + FLAG_abort_on_uncaught_exception &&
|
| + (report_exception || can_be_caught_externally)) {
|
| + fatal_exception_depth++;
|
| + fprintf(stderr, "%s\n\nFROM\n",
|
| + *MessageHandler::GetLocalizedMessage(this, message_obj));
|
| + PrintCurrentStackTrace(stderr);
|
| + OS::Abort();
|
| + }
|
| } else if (location != NULL && !location->script().is_null()) {
|
| // We are bootstrapping and caught an error where the location is set
|
| // and we have a script for the location.
|
|
|