set method

void set(
  1. dynamic value,
  2. IOJsScript script
)

Implementation

void set(dynamic value, IOJsScript script) {
  if (value == null) {
    setNull();
  } else if (value is int) {
    setInt(value);
  } else if (value is double) {
    setDouble(value);
  } else if (value is bool) {
    setBool(value);
  } else if (value is String) {
    setString(value, script);
  } else if (value is IOJsValue) {
    setValue(value);
  } else if (value is Future) {
    setFuture(value, script);
  } else if (value is JsProxy) {
    setValue(value.value as IOJsValue);
  } else if (value is Map || value is List) {
    IOJsValue? val;
    reverse(script, () {
      JsValue obj = script.bind(value, classInfo: value is Map ? mapClass : listClass);
      val = script.collectionWrap(obj) as IOJsValue;
    });
    setValue(val!);
  } else if (value is Function) {
    IOJsValue? val;
    reverse(script, () {
      val = script.function((argv) => Function.apply(value, argv)) as IOJsValue;
    });
    setValue(val!);
  } else {
    IOJsValue? val;
    reverse(script, () {
      var info = script._classIndex[value.runtimeType]?.clazz;
      if (info == null) info = script._classList[0].clazz;
      val = script.bind(value, classInfo: info) as IOJsValue;
    });
    setValue(val!);
  }
}