Skip to content

Commit 0875bc8

Browse files
committed
Add a way for us to make ResolveMessage & BuildMessage properly extend ErrorInstance
1 parent 1faf9f6 commit 0875bc8

File tree

4 files changed

+44
-8
lines changed

4 files changed

+44
-8
lines changed

Source/JavaScriptCore/runtime/ErrorInstance.cpp

Lines changed: 30 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -223,7 +223,7 @@ void ErrorInstance::finishCreation(VM& vm, String&& message, LineColumn lineColu
223223

224224
m_lineColumn = lineColumn;
225225
m_sourceURL = WTFMove(sourceURL);
226-
226+
227227
{
228228
Locker locker { cellLock() };
229229
m_stackString = WTFMove(stackString);
@@ -318,8 +318,35 @@ String ErrorInstance::tryGetMessageForDebugging()
318318
return emptyString();
319319
}
320320

321+
#if USE(BUN_JSC_ADDITIONS)
322+
extern "C" __attribute__((weak)) void Bun__errorInstance__finalize(void* bunNativePtr);
323+
324+
class BunErrorInstanceFinalizer {
325+
public:
326+
BunErrorInstanceFinalizer(JSC::ErrorInstance* errorInstance)
327+
: m_errorInstance(errorInstance)
328+
{
329+
}
330+
331+
~BunErrorInstanceFinalizer()
332+
{
333+
if (Bun__errorInstance__finalize && m_errorInstance->bunErrorData()) {
334+
Bun__errorInstance__finalize(m_errorInstance->bunErrorData());
335+
}
336+
}
337+
338+
private:
339+
JSC::ErrorInstance* m_errorInstance;
340+
};
341+
#endif
342+
321343
void ErrorInstance::finalizeUnconditionally(VM& vm, CollectionScope)
322344
{
345+
#if USE(BUN_JSC_ADDITIONS)
346+
// Run this after we've computed the stack trace so that it can potentially be used there.
347+
BunErrorInstanceFinalizer finalizer(this);
348+
#endif
349+
323350
if (!m_stackTrace)
324351
return;
325352

@@ -346,7 +373,7 @@ void ErrorInstance::computeErrorInfo(VM& vm, bool allocationAllowed)
346373
auto& fn = vm.onComputeErrorInfo();
347374
WTF::String stackString;
348375
if (fn) {
349-
stackString = fn(vm, *m_stackTrace.get(), m_lineColumn.line, m_lineColumn.column, m_sourceURL);
376+
stackString = fn(vm, *m_stackTrace.get(), m_lineColumn.line, m_lineColumn.column, m_sourceURL, this->bunErrorData());
350377
} else {
351378
getLineColumnAndSource(vm, m_stackTrace.get(), m_lineColumn, m_sourceURL);
352379
stackString = Interpreter::stackTraceAsString(vm, *m_stackTrace.get());
@@ -373,7 +400,7 @@ bool ErrorInstance::materializeErrorInfoIfNeeded(VM& vm)
373400
m_errorInfoMaterialized = true;
374401
DeferGCForAWhile deferGC(vm);
375402

376-
JSValue stack = fn(vm, *m_stackTrace.get(), m_lineColumn.line, m_lineColumn.column, m_sourceURL, this);
403+
JSValue stack = fn(vm, *m_stackTrace.get(), m_lineColumn.line, m_lineColumn.column, m_sourceURL, this, this->bunErrorData());
377404

378405
{
379406
Locker locker { cellLock() };

Source/JavaScriptCore/runtime/ErrorInstance.h

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -82,7 +82,10 @@ class ErrorInstance : public JSNonFinalObject {
8282
void setRuntimeTypeForCause(RuntimeType type) { m_runtimeTypeForCause = type; }
8383
RuntimeType runtimeTypeForCause() const { return m_runtimeTypeForCause; }
8484
void clearRuntimeTypeForCause() { m_runtimeTypeForCause = TypeNothing; }
85-
85+
#if USE(BUN_JSC_ADDITIONS)
86+
void* bunErrorData() const { return m_bunErrorData; }
87+
void setBunErrorData(void* bunErrorData) { m_bunErrorData = bunErrorData; }
88+
#endif
8689
ErrorType errorType() const { return m_errorType; }
8790
void setStackOverflowError()
8891
{
@@ -151,6 +154,10 @@ class ErrorInstance : public JSNonFinalObject {
151154

152155
void computeErrorInfo(VM&, bool allocationAllowed);
153156

157+
#if USE(BUN_JSC_ADDITIONS)
158+
void* m_bunErrorData { nullptr };
159+
#endif
160+
154161
SourceAppender m_sourceAppender { nullptr };
155162
std::unique_ptr<Vector<StackFrame>> m_stackTrace;
156163
LineColumn m_lineColumn;

Source/JavaScriptCore/runtime/VM.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -170,8 +170,8 @@ constexpr bool validateDFGDoesGC = ENABLE_DFG_DOES_GC_VALIDATION;
170170

171171
#if USE(BUN_JSC_ADDITIONS)
172172
using StackTraceAppenderFunction = WTF::Function<void(VM&, JSCell* owner, Vector<StackFrame>& stackTrace, size_t maxToAppend)>;
173-
using ErrorInfoFunction = WTF::Function<String(VM&, Vector<StackFrame>& stackTrace, unsigned& line, unsigned& column, String& sourceURL)>;
174-
using ErrorInfoFunctionJSValue = WTF::Function<JSValue(VM&, Vector<StackFrame>& stackTrace, unsigned& line, unsigned& column, String& sourceURL, JSC::JSObject*)>;
173+
using ErrorInfoFunction = WTF::Function<String(VM&, Vector<StackFrame>& stackTrace, unsigned& line, unsigned& column, String& sourceURL, void* bunErrorData)>;
174+
using ErrorInfoFunctionJSValue = WTF::Function<JSValue(VM&, Vector<StackFrame>& stackTrace, unsigned& line, unsigned& column, String& sourceURL, JSC::JSObject*, void* bunErrorData)>;
175175
#endif
176176

177177
#if ENABLE(FTL_JIT)

Source/cmake/WebKitCompilerFlags.cmake

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -247,14 +247,16 @@ if (COMPILER_IS_GCC_OR_CLANG)
247247
-Wl,-U,_WTFTimer__deinit
248248
-Wl,-U,_WTFTimer__isActive
249249
-Wl,-U,_WTFTimer__secondsUntilTimer
250-
-Wl,-U,_WTFTimer__cancel)
250+
-Wl,-U,_WTFTimer__cancel
251+
-Wl,-U,_Bun__errorInstance__finalize)
251252
else()
252253
WEBKIT_PREPEND_GLOBAL_COMPILER_FLAGS(-Wl,-u,_WTFTimer__create
253254
-Wl,-u,_WTFTimer__update
254255
-Wl,-u,_WTFTimer__deinit
255256
-Wl,-u,_WTFTimer__isActive
256257
-Wl,-u,_WTFTimer__secondsUntilTimer
257-
-Wl,-u,_WTFTimer__cancel)
258+
-Wl,-u,_WTFTimer__cancel
259+
-Wl,-u,_Bun__errorInstance__finalize)
258260
endif()
259261
endif ()
260262
endif ()

0 commit comments

Comments
 (0)