toNativeValue function

void toNativeValue(
  1. Pointer<NativeValue> target,
  2. dynamic value, [
  3. BindingObject? ownerBindingObject
])

Implementation

void toNativeValue(Pointer<NativeValue> target, value, [BindingObject? ownerBindingObject]) {
  if (value == null) {
    target.ref.tag = JSValueType.tagNull.index;
  } else if (value is int) {
    target.ref.tag = JSValueType.tagInt.index;
    target.ref.u = value;
  } else if (value is bool) {
    target.ref.tag = JSValueType.tagBool.index;
    target.ref.u = value ? 1 : 0;
  } else if (value is double) {
    target.ref.tag = JSValueType.tagFloat64.index;
    target.ref.u = doubleToInt64(value);
  } else if (value is String) {
    Pointer<NativeString> nativeString = stringToNativeString(value);
    target.ref.tag = JSValueType.tagString.index;
    target.ref.u = nativeString.address;
  } else if (value is Pointer) {
    target.ref.tag = JSValueType.tagPointer.index;
    target.ref.uint32 = JSPointerType.others.index;
    target.ref.u = value.address;
  } else if (value is Uint8List) {
    Pointer<Uint8> buffer = malloc.allocate(sizeOf<Uint8>() * value.length);
    final bytes = buffer.asTypedList(value.length);
    bytes.setAll(0, value);
    target.ref.tag = JSValueType.tagUint8Bytes.index;
    target.ref.uint32 = value.length;
    target.ref.u = buffer.address;
  } else if (value is BindingObject) {
    assert((value.pointer)!.address != 0);
    target.ref.tag = JSValueType.tagPointer.index;
    target.ref.uint32 = getPointerTypeOfBindingObject(value).index;
    target.ref.u = (value.pointer)!.address;
  } else if (value is List) {
    target.ref.tag = JSValueType.tagList.index;
    target.ref.uint32 = value.length;
    Pointer<NativeValue> lists = malloc.allocate(sizeOf<NativeValue>() * value.length);
    target.ref.u = lists.address;
    for(int i = 0; i < value.length; i ++) {
      toNativeValue(lists + i, value[i], ownerBindingObject);
    }
  } else if (value is Object) {
    String str = jsonEncode(value);
    target.ref.tag = JSValueType.tagJson.index;
    target.ref.u = str.toNativeUtf8().address;
  }
}