Reviewers: Mads Ager, Description: Simplify the logic determining whether to report an exception.
Please review this at http://codereview.chromium.org/13283 SVN Base: http://v8.googlecode.com/svn/branches/bleeding_edge/ Affected files: M src/top.cc Index: src/top.cc =================================================================== --- src/top.cc (revision 945) +++ src/top.cc (working copy) @@ -749,46 +749,31 @@ bool Top::ShouldReportException(bool* is_caught_externally) { + // Find the top-most try-catch handler. StackHandler* handler = StackHandler::FromAddress(Top::handler(Top::GetCurrentThread())); - - // Determine if we have an external exception handler and 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. - bool has_external_handler = (thread_local_.try_catch_handler_ != NULL); - v8::TryCatch* try_catch = thread_local_.try_catch_handler_; - - // NOTE: The stack is assumed to grown towards lower addresses. If - // the handler is at a higher address than the external address it - // means that it is below it on the stack. - - // Find the top-most try-catch handler. while (handler != NULL && !handler->is_try_catch()) { handler = handler->next(); } + // 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. + v8::TryCatch* try_catch = thread_local_.try_catch_handler_; + // The exception has been externally caught if and only if there is // an external handler which is on top of the top-most try-catch // handler. // // See comments in RegisterTryCatchHandler for details. - *is_caught_externally = has_external_handler && + *is_caught_externally = try_catch != NULL && (handler == NULL || handler == try_catch->js_handler_); - // If we have a try-catch handler then the exception is caught in - // JavaScript code. - bool is_uncaught_by_js = (handler == NULL); - - // If there is no external try-catch handler, we report the - // exception if it isn't caught by JavaScript code. - if (!has_external_handler) return is_uncaught_by_js; - - if (is_uncaught_by_js || handler == try_catch->js_handler_) { + if (*is_caught_externally) { // Only report the exception if the external handler is verbose. return thread_local_.try_catch_handler_->is_verbose_; } else { // Report the exception if it isn't caught by JavaScript code. - return is_uncaught_by_js; + return handler == NULL; } } --~--~---------~--~----~------------~-------~--~----~ v8-dev mailing list [email protected] http://groups.google.com/group/v8-dev -~----------~----~----~----~------~----~------~--~---
