mmidy 00/02/09 13:16:20
Modified: src/org/apache/xalan/xpath XString.java
src/org/apache/xalan/xslt NodeSorter.java
Log:
Return Double.NaN if not a number. Special case NodeSorter to handle NaN
returns.
Revision Changes Path
1.6 +1 -1 xml-xalan/src/org/apache/xalan/xpath/XString.java
Index: XString.java
===================================================================
RCS file: /home/cvs/xml-xalan/src/org/apache/xalan/xpath/XString.java,v
retrieving revision 1.5
retrieving revision 1.6
diff -u -r1.5 -r1.6
--- XString.java 2000/01/31 17:03:08 1.5
+++ XString.java 2000/02/09 21:16:19 1.6
@@ -132,7 +132,7 @@
// catch (ParseException e)
catch (NumberFormatException nfe)
{
- result = 0.0;
+ result = Double.NaN;
}
}
return result;
1.7 +18 -6 xml-xalan/src/org/apache/xalan/xslt/NodeSorter.java
Index: NodeSorter.java
===================================================================
RCS file: /home/cvs/xml-xalan/src/org/apache/xalan/xslt/NodeSorter.java,v
retrieving revision 1.6
retrieving revision 1.7
diff -u -r1.6 -r1.7
--- NodeSorter.java 2000/02/04 20:41:51 1.6
+++ NodeSorter.java 2000/02/09 21:16:20 1.7
@@ -163,8 +163,12 @@
XObject r1 = k.m_selectPat.execute(m_execContext, n1.m_node,
k.m_namespaceContext);
XObject r2 = k.m_selectPat.execute(m_execContext, n2.m_node,
k.m_namespaceContext);
- n1Num = r1.num();
- n2Num = r2.num();
+ double d = r1.num();
+ // Can't use NaN for compare. They are never equal. Use zero instead.
+ // That way we can keep elements in document order.
+ n1Num = Double.isNaN(d)? 0.0 : d;
+ d = r2.num();
+ n2Num = Double.isNaN(d)? 0.0 : d;
}
if((n1Num == n2Num) && ((kIndex+1) < m_keys.size()))
@@ -418,8 +422,13 @@
{
NodeSortKey k1 = (NodeSortKey)m_keys.elementAt(0);
XObject r = k1.m_selectPat.execute(m_execContext, node,
k1.m_namespaceContext);
- if(k1.m_treatAsNumbers)
- m_key1Value = new Double(r.num());
+ double d ;
+ if(k1.m_treatAsNumbers)
+ {
+ d = r.num();
+ // Can't use NaN for compare. They are never equal. Use zero
instead.
+ m_key1Value = new Double(Double.isNaN(d)? 0.0 : d);
+ }
else
m_key1Value = k1.m_col.getCollationKey(r.str());
@@ -427,8 +436,11 @@
{
NodeSortKey k2 = (NodeSortKey)m_keys.elementAt(1);
XObject r2 = k2.m_selectPat.execute(m_execContext, node,
k2.m_namespaceContext);
- if(k2.m_treatAsNumbers)
- m_key2Value = new Double(r2.num());
+ if(k2.m_treatAsNumbers)
+ {
+ d = r2.num();
+ m_key2Value = new Double(Double.isNaN(d)? 0.0 : d);
+ }
else
m_key2Value = k2.m_col.getCollationKey(r2.str());
}