toNativeValue function

void toNativeValue(
  1. Pointer<NativeValue> target,
  2. dynamic value
)

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;
  }
}