| Index: src/d8.cc
|
| diff --git a/src/d8.cc b/src/d8.cc
|
| index b7f76febe29bb13441912880cae68f1d661ac69f..f1b9d6c31b6e65e94569bd7e7980a50e4ce159bb 100644
|
| --- a/src/d8.cc
|
| +++ b/src/d8.cc
|
| @@ -422,12 +422,6 @@ bool CounterMap::Match(void* key1, void* key2) {
|
| }
|
|
|
|
|
| -// Converts a V8 value to a C string.
|
| -const char* Shell::ToCString(const v8::String::Utf8Value& value) {
|
| - return *value ? *value : "<string conversion failed>";
|
| -}
|
| -
|
| -
|
| ScriptCompiler::CachedData* CompileForCachedData(
|
| Local<String> source, Local<Value> name,
|
| ScriptCompiler::CompileOptions compile_options) {
|
| @@ -1256,12 +1250,17 @@ void Shell::Version(const v8::FunctionCallbackInfo<v8::Value>& args) {
|
|
|
| void Shell::ReportException(Isolate* isolate, v8::TryCatch* try_catch) {
|
| HandleScope handle_scope(isolate);
|
| - Local<Context> context;
|
| - bool enter_context = !isolate->InContext();
|
| + Local<Context> context = isolate->GetCurrentContext();
|
| + bool enter_context = context.IsEmpty();
|
| if (enter_context) {
|
| context = Local<Context>::New(isolate, evaluation_context_);
|
| context->Enter();
|
| }
|
| + // Converts a V8 value to a C string.
|
| + auto ToCString = [](const v8::String::Utf8Value& value) {
|
| + return *value ? *value : "<string conversion failed>";
|
| + };
|
| +
|
| v8::String::Utf8Value exception(try_catch->Exception());
|
| const char* exception_string = ToCString(exception);
|
| Local<Message> message = try_catch->Message();
|
| @@ -1269,40 +1268,40 @@ void Shell::ReportException(Isolate* isolate, v8::TryCatch* try_catch) {
|
| // V8 didn't provide any extra information about this error; just
|
| // print the exception.
|
| printf("%s\n", exception_string);
|
| + } else if (message->GetScriptOrigin().Options().IsWasm()) {
|
| + // Print <WASM>[(function index)]((function name))+(offset): (message).
|
| + int function_index = message->GetLineNumber(context).FromJust() - 1;
|
| + int offset = message->GetStartColumn(context).FromJust();
|
| + printf("<WASM>[%d]+%d: %s\n", function_index, offset, exception_string);
|
| } else {
|
| // Print (filename):(line number): (message).
|
| v8::String::Utf8Value filename(message->GetScriptOrigin().ResourceName());
|
| const char* filename_string = ToCString(filename);
|
| - Maybe<int> maybeline = message->GetLineNumber(isolate->GetCurrentContext());
|
| - int linenum = maybeline.IsJust() ? maybeline.FromJust() : -1;
|
| + int linenum = message->GetLineNumber(context).FromMaybe(-1);
|
| printf("%s:%i: %s\n", filename_string, linenum, exception_string);
|
| Local<String> sourceline;
|
| - if (message->GetSourceLine(isolate->GetCurrentContext())
|
| - .ToLocal(&sourceline)) {
|
| + if (message->GetSourceLine(context).ToLocal(&sourceline)) {
|
| // Print line of source code.
|
| v8::String::Utf8Value sourcelinevalue(sourceline);
|
| const char* sourceline_string = ToCString(sourcelinevalue);
|
| printf("%s\n", sourceline_string);
|
| // Print wavy underline (GetUnderline is deprecated).
|
| - int start =
|
| - message->GetStartColumn(isolate->GetCurrentContext()).FromJust();
|
| + int start = message->GetStartColumn(context).FromJust();
|
| for (int i = 0; i < start; i++) {
|
| printf(" ");
|
| }
|
| - int end = message->GetEndColumn(isolate->GetCurrentContext()).FromJust();
|
| + int end = message->GetEndColumn(context).FromJust();
|
| for (int i = start; i < end; i++) {
|
| printf("^");
|
| }
|
| printf("\n");
|
| }
|
| - Local<Value> stack_trace_string;
|
| - if (try_catch->StackTrace(isolate->GetCurrentContext())
|
| - .ToLocal(&stack_trace_string) &&
|
| - stack_trace_string->IsString()) {
|
| - v8::String::Utf8Value stack_trace(
|
| - Local<String>::Cast(stack_trace_string));
|
| - printf("%s\n", ToCString(stack_trace));
|
| - }
|
| + }
|
| + Local<Value> stack_trace_string;
|
| + if (try_catch->StackTrace(context).ToLocal(&stack_trace_string) &&
|
| + stack_trace_string->IsString()) {
|
| + v8::String::Utf8Value stack_trace(Local<String>::Cast(stack_trace_string));
|
| + printf("%s\n", ToCString(stack_trace));
|
| }
|
| printf("\n");
|
| if (enter_context) context->Exit();
|
|
|