public boolean equals(Object o) {
    if (o == this) return true;
    if (o == null || !(o instanceof VarExprent)) return false;

    VarExprent ve = (VarExprent) o;
    return index == ve.getIndex()
        && version == ve.getVersion()
        && InterpreterUtil.equalObjects(
            getVartype(), ve.getVartype()); // FIXME: vartype comparison redundant?
  }