// Taken from clojure.lang.APersistentMap
  public IPersistentCollection cons(Object o) {
    if (o instanceof Map.Entry) {
      Map.Entry e = (Map.Entry) o;
      return assoc(e.getKey(), e.getValue());
    } else if (o instanceof IPersistentVector) {
      IPersistentVector v = (IPersistentVector) o;
      if (v.count() != 2) {
        throw new IllegalArgumentException("Vector arg to temporal conj must be a pair");
      }
      return assoc(v.nth(0), v.nth(1));
    }

    IPersistentMap ret = this;
    for (ISeq es = RT.seq(o); es != null; es = es.next()) {
      Map.Entry e = (Map.Entry) es.first();
      ret = ret.assoc(e.getKey(), e.getValue());
    }
    return ret;
  }
 private Object getValueByPointer(ValuePointer ptr) {
   return ((List<Object>) _delegates.nth(ptr.delegateIndex)).get(ptr.index);
 }