aboutsummaryrefslogtreecommitdiff
path: root/src/bun.js/bindings/JSFFIFunction.cpp
diff options
context:
space:
mode:
authorGravatar Jarred Sumner <709451+Jarred-Sumner@users.noreply.github.com> 2022-11-07 04:49:10 -0800
committerGravatar Jarred Sumner <709451+Jarred-Sumner@users.noreply.github.com> 2022-11-07 04:49:10 -0800
commitc00359a521bfcd0d1476511962cfc50763796e61 (patch)
treebda8c766e02080251394c33222d52fffe1af1380 /src/bun.js/bindings/JSFFIFunction.cpp
parent71d0e14210fb0fa1cd19c650dfd45e25dcafab98 (diff)
downloadbun-c00359a521bfcd0d1476511962cfc50763796e61.tar.gz
bun-c00359a521bfcd0d1476511962cfc50763796e61.tar.zst
bun-c00359a521bfcd0d1476511962cfc50763796e61.zip
[bun:test] Implement `done` callback with support for async functions
Diffstat (limited to 'src/bun.js/bindings/JSFFIFunction.cpp')
-rw-r--r--src/bun.js/bindings/JSFFIFunction.cpp33
1 files changed, 32 insertions, 1 deletions
diff --git a/src/bun.js/bindings/JSFFIFunction.cpp b/src/bun.js/bindings/JSFFIFunction.cpp
index c0fc34fc0..a0cd83ba6 100644
--- a/src/bun.js/bindings/JSFFIFunction.cpp
+++ b/src/bun.js/bindings/JSFFIFunction.cpp
@@ -70,14 +70,45 @@ extern "C" FFICallbackFunctionWrapper* Bun__createFFICallbackFunction(
return wrapper;
}
-extern "C" Zig::JSFFIFunction* Bun__CreateFFIFunction(Zig::GlobalObject* globalObject, const ZigString* symbolName, unsigned argCount, Zig::FFIFunction functionPointer, bool strong)
+extern "C" Zig::JSFFIFunction* Bun__CreateFFIFunctionWithData(Zig::GlobalObject* globalObject, const ZigString* symbolName, unsigned argCount, Zig::FFIFunction functionPointer, bool strong, void* data)
{
JSC::VM& vm = globalObject->vm();
Zig::JSFFIFunction* function = Zig::JSFFIFunction::create(vm, globalObject, argCount, symbolName != nullptr ? Zig::toStringCopy(*symbolName) : String(), functionPointer, JSC::NoIntrinsic);
if (strong)
globalObject->trackFFIFunction(function);
+ function->dataPtr = data;
return function;
}
+
+extern "C" JSC::EncodedJSValue Bun__CreateFFIFunctionWithDataValue(Zig::GlobalObject* globalObject, const ZigString* symbolName, unsigned argCount, Zig::FFIFunction functionPointer, bool strong, void* data)
+{
+ return JSC::JSValue::encode(Bun__CreateFFIFunctionWithData(globalObject, symbolName, argCount, functionPointer, strong, data));
+}
+
+extern "C" Zig::JSFFIFunction* Bun__CreateFFIFunction(Zig::GlobalObject* globalObject, const ZigString* symbolName, unsigned argCount, Zig::FFIFunction functionPointer, bool strong)
+{
+ return Bun__CreateFFIFunctionWithData(globalObject, symbolName, argCount, functionPointer, strong, nullptr);
+}
+
+extern "C" void* Bun__FFIFunction_getDataPtr(JSC::EncodedJSValue jsValue)
+{
+
+ Zig::JSFFIFunction* function = jsDynamicCast<Zig::JSFFIFunction*>(JSC::JSValue::decode(jsValue));
+ if (!function)
+ return nullptr;
+
+ return function->dataPtr;
+}
+
+extern "C" void Bun__FFIFunction_setDataPtr(JSC::EncodedJSValue jsValue, void* ptr)
+{
+
+ Zig::JSFFIFunction* function = jsDynamicCast<Zig::JSFFIFunction*>(JSC::JSValue::decode(jsValue));
+ if (!function)
+ return;
+
+ function->dataPtr = ptr;
+}
extern "C" void Bun__untrackFFIFunction(Zig::GlobalObject* globalObject, JSC::EncodedJSValue function)
{
globalObject->untrackFFIFunction(JSC::jsCast<JSC::JSFunction*>(JSC::JSValue::decode(function)));