JSValue.newCFunction2 constructor

JSValue.newCFunction2(
  1. JSContext _ctx,
  2. JSCFunction func,
  3. String name,
  4. int len,
  5. int cproto,
  6. int magic, {
  7. bool autoDispose = true,
})

Implementation

JSValue.newCFunction2(
  this._ctx,
  JSCFunction func,
  String name,
  int len,
  int cproto,
  int magic, {
  bool autoDispose = true,
}) {
  _cfuncNC = NativeCallable.isolateLocal((
    JSContextRef ctx,
    JSValue_ thiz,
    int argc,
    JSValueRef argv,
  ) {
    final list = <JSValue>[];
    for (int i = 0; i < argc; i++) {
      list.add(JSValue.ptr(_ctx, argv[i]));
    }
    return func.call(JSContext(ctx), JSValue.ptr(_ctx, thiz), list).ref.ref;
  });
  _ref = calloc.call(sizeOf<JSValue_>())
    ..ref = JS_NewCFunction2(
      _ctx.ref,
      _cfuncNC!.nativeFunction,
      name.toNativeUtf8(),
      len,
      cproto,
      magic,
    );
  attach(Q_JS_FreeValueAddress.cast(), _ref.cast(), autoDispose: autoDispose);
}