diff options
author | 2021-10-21 04:27:36 -0700 | |
---|---|---|
committer | 2021-10-21 04:27:36 -0700 | |
commit | 33b0c89e7c00d3b105876071dd8c10df95d8107c (patch) | |
tree | 435f413f712971c3d7610e82d765704b76460464 | |
parent | 4e3aa3c2892930d8ee82caec53d338724be9eec7 (diff) | |
download | bun-33b0c89e7c00d3b105876071dd8c10df95d8107c.tar.gz bun-33b0c89e7c00d3b105876071dd8c10df95d8107c.tar.zst bun-33b0c89e7c00d3b105876071dd8c10df95d8107c.zip |
[Bun.js] Fix `SyntaxError` not showing source file or line number
-rw-r--r-- | src/javascript/jsc/bindings/bindings.cpp | 25 |
1 files changed, 24 insertions, 1 deletions
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 <JavaScriptCore/AggregateError.h> @@ -34,6 +35,7 @@ #include <wtf/text/StringImpl.h> #include <wtf/text/StringView.h> #include <wtf/text/WTFString.h> + 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<JSC::StackFrame> *stackTrace, JSC::JSValue val) { JSC::JSObject *obj = JSC::jsDynamicCast<JSC::JSObject *>(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; } |