code: public Expr or(Expr expr) {
          if (type == Type.TRUE ||
              type == Type.FALSE ||
              type == NONE) {
              set(expr);
          } else if (expr.type != Type.TRUE &&
                     expr.type != Type.FALSE &&
                     expr.type != Type.NONE) {
              if (type.isLogical() && !expr.type.isLogical()) {
                  if (type == OR)
                      right.or(expr);
                  else if (type != NOT)
                      setLogical(Type.OR, expr, new Expr(this));
                  else
                      setLogical(Type.OR, new Expr(this), expr);
              }
              else
                  setLogical(Type.OR, new Expr(this), expr);
          }
          return this;
      }
docs: Utility, combine this expression with another, using disjunction.
  The expression will match if either conditions is met.
  @param expr the other expression
  @return self for chaining