toNativeValue function
void
toNativeValue(
- Pointer<
NativeValue> target, - dynamic value, [
- 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;
}
}