From 33b0c89e7c00d3b105876071dd8c10df95d8107c Mon Sep 17 00:00:00 2001 From: Jarred Sumner Date: Thu, 21 Oct 2021 04:27:36 -0700 Subject: [Bun.js] Fix `SyntaxError` not showing source file or line number --- src/javascript/jsc/bindings/bindings.cpp | 25 ++++++++++++++++++++++++- 1 file changed, 24 insertions(+), 1 deletion(-) (limited to 'src/javascript/jsc/bindings/bindings.cpp') diff --git a/src/javascript/jsc/bindings/bindings.cpp b/src/javascript/jsc/bindings/bindings.cpp index d847a3121..674849fc6 100644 --- a/src/javascript/jsc/bindings/bindings.cpp +++ b/src/javascript/jsc/bindings/bindings.cpp @@ -1,3 +1,4 @@ +#include "ZigGlobalObject.h" #include "helpers.h" #include "root.h" #include @@ -34,6 +35,7 @@ #include #include #include + extern "C" { JSC__JSValue JSC__JSObject__create(JSC__JSGlobalObject *globalObject, size_t initialCapacity, void *arg2, @@ -1253,12 +1255,15 @@ static void fromErrorInstance(ZigException *except, JSC::JSGlobalObject *global, JSC::ErrorInstance *err, const Vector *stackTrace, JSC::JSValue val) { JSC::JSObject *obj = JSC::jsDynamicCast(global->vm(), val); + + bool getFromSourceURL = false; if (stackTrace != nullptr && stackTrace->size() > 0) { populateStackTrace(*stackTrace, &except->stack); } else if (err->stackTrace() != nullptr && err->stackTrace()->size() > 0) { populateStackTrace(*err->stackTrace(), &except->stack); + } else { + getFromSourceURL = true; } - except->code = (unsigned char)err->errorType(); if (err->isStackOverflowError()) { except->code = 253; } if (err->isOutOfMemoryError()) { except->code = 8; } @@ -1273,6 +1278,24 @@ static void fromErrorInstance(ZigException *except, JSC::JSGlobalObject *global, except->name = Zig::toZigString(err->sanitizedNameString(global)); except->runtime_type = err->runtimeTypeForCause(); + if (getFromSourceURL) { + if (obj->hasProperty(global, global->vm().propertyNames->sourceURL)) { + except->stack.frames_ptr[0].source_url = Zig::toZigString( + obj->getDirect(global->vm(), global->vm().propertyNames->sourceURL).toWTFString(global)); + + if (obj->hasProperty(global, global->vm().propertyNames->line)) { + except->stack.frames_ptr[0].position.line = + obj->getDirect(global->vm(), global->vm().propertyNames->line).toInt32(global); + } + + if (obj->hasProperty(global, global->vm().propertyNames->column)) { + except->stack.frames_ptr[0].position.column_start = + obj->getDirect(global->vm(), global->vm().propertyNames->column).toInt32(global); + } + except->stack.frames_len = 1; + } + } + except->exception = err; } -- cgit v1.2.3