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]