callFunction method
Implementation
dynamic callFunction(
Pointer<Void> ctxHandle,
Pointer<QjsResult> obj,
List<dynamic> args,
) {
final out = ffi.calloc<QjsResult>();
final cargs = ffi.calloc<QjsResult>(args.length);
for (var i = 0; i < args.length; i++) {
QuickJsFFI.writeOut(cargs + i, args[i]);
}
_callFunction(ctxHandle, obj, cargs, args.length, out);
for (var i = 0; i < args.length; i++) {
_freeResult(cargs + i);
}
ffi.calloc.free(cargs);
if (out.ref.error != 0) {
final msg = out.ref.s.address == 0
? 'Unknown error'
: out.ref.s.toDartString();
_freeResult(out);
ffi.calloc.free(out);
throw Exception(msg);
}
final res = convertQjsResultToDart(out.ref);
if (out.ref.type == qjsTypeObject || out.ref.type == qjsTypeFunction) {
_freeValue(ctxHandle, out);
}
_freeResult(out);
ffi.calloc.free(out);
return res;
}