I'd like you to do a code review. To review this change, run gvn review --project https://v8.googlecode.com/svn [EMAIL PROTECTED]/[EMAIL PROTECTED]
Alternatively, to review the latest snapshot of this change branch, run gvn --project https://v8.googlecode.com/svn review [EMAIL PROTECTED]/better-shell-error-messages to review the following change: [EMAIL PROTECTED]/[EMAIL PROTECTED] | [EMAIL PROTECTED] | 2008-09-09 19:58:54 +-100 (Tue, 09 Sep 2008) Description: Changed the shell to print source position with error messages. Added debug flags to gcc when compiling samples in debug mode. Affected Paths: M //branches/bleeding_edge/SConstruct M //branches/bleeding_edge/samples/shell.cc This is a semiautomated message from "gvn mail". See <http://code.google.com/p/gvn/> to learn more. Index: SConstruct =================================================================== --- SConstruct (^/branches/bleeding_edge/[EMAIL PROTECTED]) +++ SConstruct (^/changes/[EMAIL PROTECTED]/better-shell-error-messages/bleeding_edge/[EMAIL PROTECTED]) @@ -190,6 +190,9 @@ SAMPLE_FLAGS = { 'CCFLAGS': ['-m32'], 'LINKFLAGS': ['-m32'] }, + 'mode:debug': { + 'CCFLAGS': ['-g', '-O0'] + } }, 'msvc': { 'all': { Index: samples/shell.cc =================================================================== --- samples/shell.cc (^/branches/bleeding_edge/samples/[EMAIL PROTECTED]) +++ samples/shell.cc (^/changes/[EMAIL PROTECTED]/better-shell-error-messages/bleeding_edge/samples/[EMAIL PROTECTED]) @@ -40,6 +40,7 @@ v8::Handle<v8::Value> Load(const v8::Arguments& ar v8::Handle<v8::Value> Quit(const v8::Arguments& args); v8::Handle<v8::Value> Version(const v8::Arguments& args); v8::Handle<v8::String> ReadFile(const char* name); +void ReportException(v8::TryCatch* handler); int main(int argc, char* argv[]) { @@ -174,7 +175,7 @@ void RunShell(v8::Handle<v8::Context> context) { char* str = fgets(buffer, kBufferSize, stdin); if (str == NULL) break; v8::HandleScope handle_scope; - ExecuteString(v8::String::New(str), v8::Undefined(), true); + ExecuteString(v8::String::New(str), v8::String::New("(shell)"), true); } printf("\n"); } @@ -189,15 +190,13 @@ bool ExecuteString(v8::Handle<v8::String> source, v8::Handle<v8::Script> script = v8::Script::Compile(source, name); if (script.IsEmpty()) { // Print errors that happened during compilation. - v8::String::AsciiValue error(try_catch.Exception()); - printf("%s\n", *error); + ReportException(&try_catch); return false; } else { v8::Handle<v8::Value> result = script->Run(); if (result.IsEmpty()) { // Print errors that happened during execution. - v8::String::AsciiValue error(try_catch.Exception()); - printf("%s\n", *error); + ReportException(&try_catch); return false; } else { if (print_result && !result->IsUndefined()) { @@ -210,3 +209,31 @@ bool ExecuteString(v8::Handle<v8::String> source, } } } + + +void ReportException(v8::TryCatch* try_catch) { + v8::HandleScope handle_scope; + v8::String::AsciiValue exception(try_catch->Exception()); + v8::Handle<v8::Message> message = try_catch->Message(); + if (message.IsEmpty()) { + // V8 didn't provide any extra information about this error; just + // print the exception. + printf("%s\n", *exception); + } else { + // Print (filename):(line number): (message)b + v8::String::AsciiValue filename(message->GetScriptResourceName()); + int linenum = message->GetLineNumber(); + printf("%s:%i: %s\n", *filename, linenum, *exception); + // Print line of source codeb + v8::String::AsciiValue sourceline(message->GetSourceLine()); + printf("%s\n", *sourceline); + // Print wavy underline (GetUnderline is deprecated). + int start = message->GetStartColumn(); + int end = message->GetEndColumn(); + for (int i = 0; i < start; i++) + printf(" "); + for (int i = start; i < end; i++) + printf("^"); + printf("\n"); + } +} --~--~---------~--~----~------------~-------~--~----~ v8-dev mailing list [email protected] http://groups.google.com/group/v8-dev -~----------~----~----~----~------~----~------~--~---
