mmidy       02/02/04 07:00:52

  Modified:    java/src/org/apache/xpath/objects XBoolean.java
                        XNodeSet.java XNumber.java XObject.java
                        XRTreeFrag.java XString.java
               java/src/org/apache/xpath/operations Equals.java
  Log:
  Bug 5851: Make sure that the equal operation is evaluated by order of precedence of 
the operands, as defined by XSLT.
  
  Revision  Changes    Path
  1.10      +2 -0      xml-xalan/java/src/org/apache/xpath/objects/XBoolean.java
  
  Index: XBoolean.java
  ===================================================================
  RCS file: /home/cvs/xml-xalan/java/src/org/apache/xpath/objects/XBoolean.java,v
  retrieving revision 1.9
  retrieving revision 1.10
  diff -u -r1.9 -r1.10
  --- XBoolean.java     3 Aug 2001 02:43:17 -0000       1.9
  +++ XBoolean.java     4 Feb 2002 15:00:51 -0000       1.10
  @@ -93,6 +93,7 @@
       super();
   
       m_val = b;
  +    m_precedence = XObject.ORDER_BOOLEAN;
     }
     
     /**
  @@ -107,6 +108,7 @@
   
       m_val = b.booleanValue();
       m_obj = b;
  +    m_precedence = XObject.ORDER_BOOLEAN;
     }
   
   
  
  
  
  1.20      +4 -0      xml-xalan/java/src/org/apache/xpath/objects/XNodeSet.java
  
  Index: XNodeSet.java
  ===================================================================
  RCS file: /home/cvs/xml-xalan/java/src/org/apache/xpath/objects/XNodeSet.java,v
  retrieving revision 1.19
  retrieving revision 1.20
  diff -u -r1.19 -r1.20
  --- XNodeSet.java     3 Aug 2001 02:43:17 -0000       1.19
  +++ XNodeSet.java     4 Feb 2002 15:00:51 -0000       1.20
  @@ -92,6 +92,7 @@
      */
     protected XNodeSet()
     {
  +    m_precedence = XObject.ORDER_NODESET;
     }
   
     /**
  @@ -103,6 +104,7 @@
     {
       super(val);
       m_dtmMgr = val.getDTMManager();
  +    m_precedence = XObject.ORDER_NODESET;
     }
   
     /**
  @@ -113,6 +115,7 @@
     {
       super(new NodeSetDTM(dtmMgr));
       m_dtmMgr = dtmMgr;
  +    m_precedence = XObject.ORDER_NODESET;
     }
   
     /**
  @@ -130,6 +133,7 @@
       {
         ((NodeSetDTM) m_obj).addNode(n);
       }
  +    m_precedence = XObject.ORDER_NODESET;
     }
   
     /**
  
  
  
  1.12      +2 -0      xml-xalan/java/src/org/apache/xpath/objects/XNumber.java
  
  Index: XNumber.java
  ===================================================================
  RCS file: /home/cvs/xml-xalan/java/src/org/apache/xpath/objects/XNumber.java,v
  retrieving revision 1.11
  retrieving revision 1.12
  diff -u -r1.11 -r1.12
  --- XNumber.java      3 Aug 2001 02:43:17 -0000       1.11
  +++ XNumber.java      4 Feb 2002 15:00:51 -0000       1.12
  @@ -82,6 +82,7 @@
       super();
   
       m_val = d;
  +    m_precedence = XObject.ORDER_NUMBER;
     }
     
     /**
  @@ -96,6 +97,7 @@
   
       m_val = num.doubleValue();
       m_obj = num;
  +    m_precedence = XObject.ORDER_NUMBER;
     }
   
     /**
  
  
  
  1.18      +28 -1     xml-xalan/java/src/org/apache/xpath/objects/XObject.java
  
  Index: XObject.java
  ===================================================================
  RCS file: /home/cvs/xml-xalan/java/src/org/apache/xpath/objects/XObject.java,v
  retrieving revision 1.17
  retrieving revision 1.18
  diff -u -r1.17 -r1.18
  --- XObject.java      6 Aug 2001 04:54:41 -0000       1.17
  +++ XObject.java      4 Feb 2002 15:00:51 -0000       1.18
  @@ -88,11 +88,27 @@
      *  @serial  
      */
     protected Object m_obj;  // This may be NULL!!!
  +  
  +  /* Constants for precedence order of object types */
  +  protected static final short ORDER_RTF = 1;
  +  protected static final short ORDER_NODESET = 2;
  +  protected static final short ORDER_BOOLEAN = 3;
  +  protected static final short ORDER_NUMBER = 4;
  +  protected static final short ORDER_STRING = 5;
  +  protected static final short ORDER_OBJECT = -1;
  +  
  +  /**
  +   * The precedence order of this object, according to XSLT rules
  +   */ 
  +  protected short m_precedence;
   
     /**
      * Create an XObject.
      */
  -  public XObject(){}
  +  public XObject()
  +  {
  +    m_precedence = ORDER_OBJECT;  
  +  }
   
     /**
      * Create an XObject.
  @@ -103,6 +119,7 @@
     public XObject(Object obj)
     {
       m_obj = obj;
  +    m_precedence = ORDER_OBJECT;
     }
   
     /**
  @@ -231,6 +248,16 @@
     public int getType()
     {
       return CLASS_UNKNOWN;
  +  }
  +  
  +  /**
  +   * Get this objects precedence order.
  +   *
  +   * @return precedence order 
  +   */
  +  public short getOrder()
  +  {
  +    return m_precedence;
     }
   
     /**
  
  
  
  1.18      +1 -0      xml-xalan/java/src/org/apache/xpath/objects/XRTreeFrag.java
  
  Index: XRTreeFrag.java
  ===================================================================
  RCS file: /home/cvs/xml-xalan/java/src/org/apache/xpath/objects/XRTreeFrag.java,v
  retrieving revision 1.17
  retrieving revision 1.18
  diff -u -r1.17 -r1.18
  --- XRTreeFrag.java   17 Jul 2001 18:18:02 -0000      1.17
  +++ XRTreeFrag.java   4 Feb 2002 15:00:51 -0000       1.18
  @@ -106,6 +106,7 @@
       m_dtmRoot = root;
       m_xctxt = xctxt;
       m_dtm = xctxt.getDTM(root);
  +    m_precedence = XObject.ORDER_RTF;
     }
     
     /**
  
  
  
  1.9       +2 -0      xml-xalan/java/src/org/apache/xpath/objects/XString.java
  
  Index: XString.java
  ===================================================================
  RCS file: /home/cvs/xml-xalan/java/src/org/apache/xpath/objects/XString.java,v
  retrieving revision 1.8
  retrieving revision 1.9
  diff -u -r1.8 -r1.9
  --- XString.java      15 Jun 2001 17:54:28 -0000      1.8
  +++ XString.java      4 Feb 2002 15:00:51 -0000       1.9
  @@ -87,6 +87,7 @@
     protected XString(Object val)
     {
       super(val);
  +    m_precedence = XObject.ORDER_STRING;
     }
   
     /**
  @@ -97,6 +98,7 @@
     public XString(String val)
     {
       super(val);
  +    m_precedence = XObject.ORDER_STRING;
     }
   
     /**
  
  
  
  1.5       +4 -1      xml-xalan/java/src/org/apache/xpath/operations/Equals.java
  
  Index: Equals.java
  ===================================================================
  RCS file: /home/cvs/xml-xalan/java/src/org/apache/xpath/operations/Equals.java,v
  retrieving revision 1.4
  retrieving revision 1.5
  diff -u -r1.4 -r1.5
  --- Equals.java       17 Dec 2000 05:21:15 -0000      1.4
  +++ Equals.java       4 Feb 2002 15:00:51 -0000       1.5
  @@ -79,6 +79,9 @@
     public XObject operate(XObject left, XObject right)
             throws javax.xml.transform.TransformerException
     {
  -    return left.equals(right) ? XBoolean.S_TRUE : XBoolean.S_FALSE;
  +    if (right.getOrder() > left.getOrder())
  +      return left.equals(right) ? XBoolean.S_TRUE : XBoolean.S_FALSE;
  +    else
  +      return right.equals(left) ? XBoolean.S_TRUE : XBoolean.S_FALSE;
     }
   }
  
  
  

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to