JSValue.newCFunctionData constructor

JSValue.newCFunctionData(
  1. JSContext _ctx,
  2. JSCFunctionData func,
  3. int len,
  4. int magic,
  5. int dataLen,
  6. JSValueRef data, {
  7. bool autoDispose = true,
})

Implementation

JSValue.newCFunctionData(
  this._ctx,
  JSCFunctionData func,
  int len,
  int magic,
  int dataLen,
  JSValueRef data, {
  bool autoDispose = true,
}) {
  _cfuncDataNC = NativeCallable.isolateLocal((
    JSContextRef ctx,
    JSValue_ thiz,
    int argc,
    JSValueRef argv,
    int magic,
    JSValueRef func_data,
  ) {
    var jsValue = JSValue.ptr(_ctx, thiz);
    var jsContext = JSContext(ctx);
    try {
      return func
          .call(
            jsContext,
            jsValue,
            argv.toList(_ctx, dataLen),
            magic,
            func_data.toList(_ctx, argc),
          )
          .ref
          .ref;
    } finally {
      jsValue.free();
    }
  });
  _ref = calloc.call(sizeOf<JSValue_>())
    ..ref = JS_NewCFunctionData(
      _ctx.ref,
      _cfuncDataNC!.nativeFunction,
      len,
      magic,
      dataLen,
      data,
    );
  attach(Q_JS_FreeValueAddress.cast(), _ref.cast(), autoDispose: autoDispose);
}