diff options
author | 2022-11-07 04:49:10 -0800 | |
---|---|---|
committer | 2022-11-07 04:49:10 -0800 | |
commit | c00359a521bfcd0d1476511962cfc50763796e61 (patch) | |
tree | bda8c766e02080251394c33222d52fffe1af1380 /src/bun.js/bindings/JSFFIFunction.cpp | |
parent | 71d0e14210fb0fa1cd19c650dfd45e25dcafab98 (diff) | |
download | bun-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.cpp | 33 |
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))); |