private boolean changeExprentType(@NotNull Exprent exprent, @NotNull VarType newType, boolean checkMinExprentType) {
    if (exprent.type == Exprent.EXPRENT_CONST) {
      ConstExprent constExprent = (ConstExprent)exprent;
      VarType constType = constExprent.getConstType();
      if (newType.getTypeFamily() > CodeConstants.TYPE_FAMILY_INTEGER || constType.getTypeFamily() > CodeConstants.TYPE_FAMILY_INTEGER) return true;
      if (newType.getTypeFamily() == CodeConstants.TYPE_FAMILY_INTEGER) {
        VarType integerType = new ConstExprent((Integer)constExprent.getValue(), false, null).getConstType();
        if (integerType.isStrictSuperset(newType)) {
          newType = integerType;
        }
      }
      return changeConstExprentType(new VarVersionPair(exprent.id, -1), exprent, newType, checkMinExprentType);
    }
    if (exprent.type == Exprent.EXPRENT_VAR) {
      return changeConstExprentType(new VarVersionPair((VarExprent)exprent), exprent, newType, checkMinExprentType);
    }
    if (exprent.type == Exprent.EXPRENT_ASSIGNMENT) {
      return changeExprentType(((AssignmentExprent)exprent).getRight(), newType, checkMinExprentType);
    }
    if (exprent.type == Exprent.EXPRENT_FUNCTION) {
      FunctionExprent functionExprent = (FunctionExprent)exprent;
      switch (functionExprent.getFuncType()) {
        case FunctionExprent.FUNCTION_IIF -> {   // FIXME:
          return changeExprentType(functionExprent.getLstOperands().get(1), newType, checkMinExprentType) &
                 changeExprentType(functionExprent.getLstOperands().get(2), newType, checkMinExprentType);
        }
        case FunctionExprent.FUNCTION_AND, FunctionExprent.FUNCTION_OR, FunctionExprent.FUNCTION_XOR -> {
          return changeExprentType(functionExprent.getLstOperands().get(0), newType, checkMinExprentType) &
                 changeExprentType(functionExprent.getLstOperands().get(1), newType, checkMinExprentType);
        }
      }
    }
    return true;
  }
private boolean changeExprentType(@NotNull Exprent exprent, @NotNull VarType newType, boolean checkMinExprentType)