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());  
                    }     
  
  
  

Reply via email to