put method

void put(
  1. Object? key,
  2. Object? val
)

Implementation

void put(Object? key, Object? val) {
  if (key == null) {
    throw Exception("table index is nil!");
  }
  if (key is double && key.isNaN) {
    throw Exception("table index is NaN!");
  }
  changed = true;
  key = floatToInteger(key);
  if (key is int) {
    int idx = key;
    if (idx >= 1) {
      if (arr == null) {
        arr = <Object?>[];
      }

      int arrLen = arr!.length;
      if (idx <= arrLen) {
        arr![idx - 1] = val;
        if (idx == arrLen && val == null) {
          shrinkArray();
        }
        return;
      }
      if (idx == arrLen + 1) {
        if (map != null) {
          map!.remove(key);
        }
        if (val != null) {
          arr!.add(val);
          expandArray();
        }
        return;
      }
    }
  }

  if (val != null) {
    if (map == null) {
      map = HashMap<Object?, Object>();
    }
    map![key] = val;
  } else {
    if (map != null) {
      map!.remove(key);
    }
  }
}