return false;
return all;
  private boolean evaluateImpl(Node context, int pos, int len)  {    Object left = lhs.evaluate(context, pos, len);    Object right = rhs.evaluate(context, pos, len);    /*     * If both objects to be compared are node-sets, then the comparison     * will be true if and only if there is a node in the first node-set and     * a node in the second node-set such that the result of performing the     * comparison on the string-values of the two nodes is true.     */    boolean flns = left instanceof Collection;    boolean frns = right instanceof Collection;    if (flns && frns)      {        Collection lns = (Collection) left;        Collection rns = (Collection) right;        boolean all = true;        for (Iterator i = lns.iterator(); i.hasNext(); )          {            Node ltest = (Node) i.next();            for (Iterator j = rns.iterator(); j.hasNext(); )              {                Node rtest = (Node) j.next();                if (ltest == rtest || ltest.equals(rtest))                  {                    // much shorter                    if (!invert)                      {                        return true;                      }                  }                else if (stringValue(ltest).equals(stringValue(rtest)))                  {                    if (!invert)                      {                        return true;                      }                  }                else                  {                    all = false;                  }              }          }        return false;      }    /*      * If one object to be compared is a node-set and the other is a number,     * then the comparison will be true if and only if there is a node in     * the node-set such that the result of performing the comparison on the     * number to be compared and on the result of converting the     * string-value of that node to a number using the number function is     * true.     */    boolean fln = left instanceof Double;    boolean frn = right instanceof Double;    if ((flns && frn) || (frns && fln))      {        Collection ns = flns ? (Collection) left : (Collection) right;        double n = fln ? ((Double) left).doubleValue() :          ((Double) right).doubleValue();        boolean all = true;        for (Iterator i = ns.iterator(); i.hasNext(); )          {            Node test = (Node) i.next();            double nn = _number(context, stringValue(test));            if (nn == n)              {                if (!invert)                  {                    return true;                  }              }            else              {                all = false;              }          }        return invert ? all : false;      }    /*     * If one object to be compared is a node-set and the other is a     * string, then the comparison will be true if and only if there is a     * node in the node-set such that the result of performing the     * comparison on the string-value of the node and the other string is     * true.     */    boolean fls = left instanceof String;    boolean frs = right instanceof String;    if ((flns && frs) || (frns && fls))      {        Collection ns = flns ? (Collection) left : (Collection) right;        String s = fls ? (String) left : (String) right;        boolean all = true;        for (Iterator i = ns.iterator(); i.hasNext(); )          {            Node test = (Node) i.next();            if (stringValue(test).equals(s))              {                if (!invert)                  {                    return true;                  }              }            else              {                all = false;              }          }        return invert ? all : false;      }    /*     * If one object to be compared is a node-set and the other is a     * boolean, then the comparison will be true if and only if the result     * of performing the comparison on the boolean and on the result of     * converting the node-set to a boolean using the boolean function is     * true.     */    boolean flb = left instanceof Boolean;    boolean frb = right instanceof Boolean;    if ((flns && frb) || (frns && flb))      {        Collection ns = flns ? (Collection) left : (Collection) right;        boolean b = flb ? ((Boolean) left).booleanValue() :          ((Boolean) right).booleanValue();        return _boolean(context, ns) == b;      }    /*     * If at least one object to be compared is a boolean, then each object     * to be compared is converted to a boolean as if by applying the     * boolean function.     */    if (flb || frb)      {        boolean lb = flb ? ((Boolean) left).booleanValue() :          _boolean(context, left);        boolean rb = frb ? ((Boolean) right).booleanValue() :          _boolean(context, right);        return lb == rb;      }    /*     * Otherwise, if at least one object to be compared is     * a number, then each object to be compared is converted to a number as     * if by applying the number function.     */    if (fln || frn)      {        double ln = fln ? ((Double) left).doubleValue() :          _number(context, left);        double rn = frn ? ((Double) right).doubleValue() :          _number(context, right);        return ln == rn;      }    /*     * Otherwise, both objects to be     * compared are converted to strings as if by applying the string     * function.     */    String ls = fls ? (String) left : _string(context, left);    String rs = frs ? (String) right : _string(context, right);    return ls.equals(rs);  }