aboutsummaryrefslogtreecommitdiff
path: root/src/bun.js/bindings/ZigGlobalObject.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/bun.js/bindings/ZigGlobalObject.cpp')
-rw-r--r--src/bun.js/bindings/ZigGlobalObject.cpp37
1 files changed, 33 insertions, 4 deletions
diff --git a/src/bun.js/bindings/ZigGlobalObject.cpp b/src/bun.js/bindings/ZigGlobalObject.cpp
index 5b8e057f9..daf6d3f14 100644
--- a/src/bun.js/bindings/ZigGlobalObject.cpp
+++ b/src/bun.js/bindings/ZigGlobalObject.cpp
@@ -361,11 +361,24 @@ void GlobalObject::reportUncaughtExceptionAtEventLoop(JSGlobalObject* globalObje
Zig__GlobalObject__reportUncaughtException(globalObject, exception);
}
-void GlobalObject::promiseRejectionTracker(JSGlobalObject* obj, JSC::JSPromise* prom,
- JSC::JSPromiseRejectionOperation reject)
+void GlobalObject::promiseRejectionTracker(JSGlobalObject* obj, JSC::JSPromise* promise,
+ JSC::JSPromiseRejectionOperation operation)
{
- Zig__GlobalObject__promiseRejectionTracker(
- obj, prom, reject == JSC::JSPromiseRejectionOperation::Reject ? 0 : 1);
+ // Zig__GlobalObject__promiseRejectionTracker(
+ // obj, prom, reject == JSC::JSPromiseRejectionOperation::Reject ? 0 : 1);
+
+ // Do this in C++ for now
+ auto* globalObj = reinterpret_cast<GlobalObject*>(obj);
+ switch (operation) {
+ case JSPromiseRejectionOperation::Reject:
+ globalObj->m_aboutToBeNotifiedRejectedPromises.append(JSC::Strong<JSPromise>(obj->vm(), promise));
+ break;
+ case JSPromiseRejectionOperation::Handle:
+ globalObj->m_aboutToBeNotifiedRejectedPromises.removeFirstMatching([&] (Strong<JSPromise>& unhandledPromise) {
+ return unhandledPromise.get() == promise;
+ });
+ break;
+ }
}
static Zig::ConsoleClient* m_console;
@@ -2235,6 +2248,22 @@ void GlobalObject::queueTask(WebCore::EventLoopTask* task)
Bun__queueMicrotask(this, task);
}
+extern "C" void Bun__handleRejectedPromise(Zig::GlobalObject* JSGlobalObject, JSC::JSPromise* promise);
+
+void GlobalObject::handleRejectedPromises()
+{
+ JSC::VM& virtual_machine = vm();
+ do {
+ auto unhandledRejections = WTFMove(m_aboutToBeNotifiedRejectedPromises);
+ for (auto& promise : unhandledRejections) {
+ if (promise->isHandled(virtual_machine))
+ continue;
+
+ Bun__handleRejectedPromise(this, promise.get());
+ }
+ } while (!m_aboutToBeNotifiedRejectedPromises.isEmpty());
+}
+
DEFINE_VISIT_CHILDREN(GlobalObject);
// void GlobalObject::destroy(JSCell* cell)
-option&id=423200002021b030e748211788e4b8bfa663e2de&follow=1'>Update js_ast.zigGravatar Jarred Sumner 1-0/+1 2022-02-03Support loading multiple entry points by changing what `bun:main` points toGravatar Jarred Sumner 6-4/+36 2022-02-03[bun install] Configurable max http retry countGravatar Jarred Sumner 1-0/+7 2022-02-03Missing newline in errors in bun installGravatar Jarred Sumner 1-4/+8 2022-02-03Fix bug with http clientGravatar Jarred Sumner 6-107/+101 2022-02-03Move detectFastRefresh to later so HTTP request handler starts fasterGravatar Jarred Sumner 1-2/+1 2022-02-03Fix bug with macro remaps in Bun.Transpiler apiGravatar Jarred Sumner 2-5/+8 2022-02-03Slight improvement to non-ascii file path handlingGravatar Jarred Sumner 4-18/+79 2022-02-02`path.relative` passes Node's tests (which also fixed bugs)Gravatar Jarred Sumner 8-283/+571