toNativeValue function
Implementation
void toNativeValue(Pointer<NativeValue> target, value) {
if (value == null) {
target.ref.tag = JSValueType.TAG_NULL.index;
} else if (value is int) {
target.ref.tag = JSValueType.TAG_INT.index;
target.ref.u = value;
} else if (value is bool) {
target.ref.tag = JSValueType.TAG_BOOL.index;
target.ref.u = value ? 1 : 0;
} else if (value is double) {
target.ref.tag = JSValueType.TAG_FLOAT64.index;
target.ref.float64 = value;
} else if (value is String) {
target.ref.tag = JSValueType.TAG_STRING.index;
target.ref.u = stringToNativeString(value).address;
} else if (value is Pointer) {
target.ref.tag = JSValueType.TAG_POINTER.index;
target.ref.u = value.address;
if (value is Pointer<NativeBoundingClientRect>) {
target.ref.float64 = JSPointerType.NativeBoundingClientRect.index.toDouble();
} else if (value is Pointer<NativeCanvasRenderingContext2D>) {
target.ref.float64 = JSPointerType.NativeCanvasRenderingContext2D.index.toDouble();
} else if (value is Pointer<NativeBindingObject>) {
target.ref.float64 = JSPointerType.NativeBindingObject.index.toDouble();
}
} else if (value is AsyncAnonymousNativeFunction) {
int id = _functionId++;
_asyncFunctionMap[id] = value;
target.ref.tag = JSValueType.TAG_ASYNC_FUNCTION.index;
target.ref.u = id;
} else if (value is AnonymousNativeFunction) {
int id = _functionId++;
_functionMap[id] = value;
target.ref.tag = JSValueType.TAG_FUNCTION.index;
target.ref.u = id;
} else if (value is Object) {
String str = jsonEncode(value);
target.ref.tag = JSValueType.TAG_JSON.index;
target.ref.u = str.toNativeUtf8().address;
}
}