fromNativeValue function
Implementation
dynamic fromNativeValue(Pointer<NativeValue> nativeValue) {
if (nativeValue == nullptr) return null;
JSValueType type = JSValueType.values[nativeValue.ref.tag];
switch (type) {
case JSValueType.TAG_STRING:
Pointer<NativeString> nativeString = Pointer.fromAddress(nativeValue.ref.u);
String result = nativeStringToString(nativeString);
freeNativeString(nativeString);
return result;
case JSValueType.TAG_INT:
return nativeValue.ref.u;
case JSValueType.TAG_BOOL:
return nativeValue.ref.u == 1;
case JSValueType.TAG_NULL:
return null;
case JSValueType.TAG_FLOAT64:
return nativeValue.ref.float64;
case JSValueType.TAG_POINTER:
JSPointerType pointerType = JSPointerType.values[nativeValue.ref.float64.toInt()];
switch (pointerType) {
case JSPointerType.NativeBoundingClientRect:
return Pointer.fromAddress(nativeValue.ref.u).cast<NativeBoundingClientRect>();
case JSPointerType.NativeCanvasRenderingContext2D:
return Pointer.fromAddress(nativeValue.ref.u).cast<NativeCanvasRenderingContext2D>();
case JSPointerType.NativeBindingObject:
return Pointer.fromAddress(nativeValue.ref.u).cast<NativeBindingObject>();
default:
return Pointer.fromAddress(nativeValue.ref.u);
}
case JSValueType.TAG_FUNCTION:
case JSValueType.TAG_ASYNC_FUNCTION:
break;
case JSValueType.TAG_JSON:
Pointer<NativeString> nativeString = Pointer.fromAddress(nativeValue.ref.u);
dynamic value = jsonDecode(nativeStringToString(nativeString));
freeNativeString(nativeString);
return value;
}
}