From 0442e08095eb00f20ea6c0f7d0a90efcfa0b5c34 Mon Sep 17 00:00:00 2001 From: "ricow@chromium.org" Date: Tue, 25 Oct 2011 13:43:19 +0000 Subject: [PATCH] Print out line number and extension name when compilation of an extension fails. This fixes issue 305. Review URL: http://codereview.chromium.org/8332029 git-svn-id: http://v8.googlecode.com/svn/branches/bleeding_edge@9776 ce2b1a6d-e550-0410-aec6-3dcde31c8c00 --- src/bootstrapper.cc | 7 +++++++ src/isolate.cc | 10 ++++++++++ 2 files changed, 17 insertions(+) diff --git a/src/bootstrapper.cc b/src/bootstrapper.cc index 0446e3b..9099956 100644 --- a/src/bootstrapper.cc +++ b/src/bootstrapper.cc @@ -38,6 +38,7 @@ #include "macro-assembler.h" #include "natives.h" #include "objects-visiting.h" +#include "platform.h" #include "snapshot.h" #include "extensions/externalize-string-extension.h" #include "extensions/gc-extension.h" @@ -2006,6 +2007,12 @@ bool Genesis::InstallExtension(v8::RegisteredExtension* current) { false); ASSERT(isolate->has_pending_exception() != result); if (!result) { + // We print out the name of the extension that fail to install. + // When an error is thrown during bootstrapping we automatically print + // the line number at which this happened to the console in the isolate + // error throwing functionality. + OS::PrintError("Error installing extension '%s'.\n", + current->extension()->name()); isolate->clear_pending_exception(); } current->set_state(v8::INSTALLED); diff --git a/src/isolate.cc b/src/isolate.cc index 2e28e4c..a073af9 100644 --- a/src/isolate.cc +++ b/src/isolate.cc @@ -1072,6 +1072,16 @@ void Isolate::DoThrow(MaybeObject* exception, MessageLocation* location) { message_obj = MessageHandler::MakeMessageObject("uncaught_exception", location, HandleVector(&exception_handle, 1), stack_trace, stack_trace_object); + } 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. + // In this case we could have an extension (or an internal error + // somewhere) and we print out the line number at which the error occured + // to the console for easier debugging. + int line_number = GetScriptLineNumberSafe(location->script(), + location->start_pos()); + OS::PrintError("Extension or internal compilation error at line %d.\n", + line_number); } } -- 2.7.4