JSObject.makeFunctionWithCallback constructor
JSObject.makeFunctionWithCallback(
- JSContext context, {
- String? name,
- JSObjectCallAsFunctionCallback? callAsFunction,
- bool autoDispose = true,
Convenience method for creating a JavaScript function with a given callback as its implementation.
name
A JSString containing the function's name. This will be used when converting the function to string. Pass NULL to create an anonymous function.
callAsFunction
The JSObjectCallAsFunctionCallback to invoke when the function is called.
Implementation
JSObject.makeFunctionWithCallback(
this.context, {
String? name,
JSObjectCallAsFunctionCallback? callAsFunction,
bool autoDispose = true,
}) {
_callAsFunctionNC = NativeCallable.isolateLocal((
JSContextRef ctx1,
JSObjectRef function,
JSObjectRef thiz,
int argc,
Pointer<JSValueRef> argv,
Pointer<JSValueRef> exception,
) {
final ctxw = JSContext(ctx1, autoDispose: false);
final jsfunc = JSObject(ctxw, function, autoDispose: false);
final jsthiz = JSObject(ctxw, thiz, autoDispose: false);
final argvlist = <JSValue>[];
for (int i = 0; i < argc; i++) {
argvlist.add(JSValue(ctxw, argv[i]));
}
final jsexc = JSException(ctxw, exception);
// auto release donot manual free
final ret =
callAsFunction
?.call(ctxw, jsfunc, jsthiz, argc, argvlist, jsexc)
.ref ??
nullptr;
if (jsexc.shouldThrow) throw jsexc.error;
return ret;
});
final JSString? jsname = name != null ? JSString.fromString(name) : null;
_ref = JSObjectMakeFunctionWithCallback(
context.ref,
jsname?.ref ?? nullptr,
_callAsFunctionNC?.nativeFunction ?? nullptr,
);
attach(calloc.nativeFree, _ref.cast(), autoDispose: autoDispose);
}