You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@xalan.apache.org by jy...@apache.org on 2005/02/04 19:26:12 UTC

cvs commit: xml-xalan/java/src/org/apache/xalan/xsltc/dom AnyNodeCounter.java MultipleNodeCounter.java NodeCounter.java SingleNodeCounter.java

jycli       2005/02/04 10:26:12

  Modified:    java/src/org/apache/xalan/xsltc/compiler Number.java
               java/src/org/apache/xalan/xsltc/dom AnyNodeCounter.java
                        MultipleNodeCounter.java NodeCounter.java
                        SingleNodeCounter.java
  Log:
  Implement Errata E24 for XSLTC, when the value attribute of xsl:number is NaN, infinite or less than 0.5. More details please refer to bug report XALANJ-1979.
  Patch is reviewed by Morris Kwan (mkwan@ca.ibm.com)
  
  Revision  Changes    Path
  1.15      +7 -6      xml-xalan/java/src/org/apache/xalan/xsltc/compiler/Number.java
  
  Index: Number.java
  ===================================================================
  RCS file: /home/cvs/xml-xalan/java/src/org/apache/xalan/xsltc/compiler/Number.java,v
  retrieving revision 1.14
  retrieving revision 1.15
  diff -u -r1.14 -r1.15
  --- Number.java	24 Feb 2004 02:58:42 -0000	1.14
  +++ Number.java	4 Feb 2005 18:26:12 -0000	1.15
  @@ -34,7 +34,7 @@
   import org.apache.bcel.generic.INVOKESTATIC;
   import org.apache.bcel.generic.INVOKEVIRTUAL;
   import org.apache.bcel.generic.InstructionList;
  -import org.apache.bcel.generic.L2I;
  +import org.apache.bcel.generic.D2I;
   import org.apache.bcel.generic.LocalVariableGen;
   import org.apache.bcel.generic.NEW;
   import org.apache.bcel.generic.PUSH;
  @@ -511,15 +511,16 @@
   	    compileDefault(classGen, methodGen);
   	    _value.translate(classGen, methodGen);
   
  -	    // Round the number to the nearest integer
  -	    index = cpg.addMethodref(MATH_CLASS, "round", "(D)J");
  +	    // Using java.lang.Math.floor(number + 0.5) to return a double value
  +            il.append(new PUSH(cpg, 0.5));
  +            il.append(DADD);
  +	    index = cpg.addMethodref(MATH_CLASS, "floor", "(D)D");
   	    il.append(new INVOKESTATIC(index));
  -	    il.append(new L2I());
   
   	    // Call setValue on the node counter
   	    index = cpg.addMethodref(NODE_COUNTER, 
   				     "setValue", 
  -				     "(I)" + NODE_COUNTER_SIG);
  +				     "(D)" + NODE_COUNTER_SIG);
   	    il.append(new INVOKEVIRTUAL(index));
   	}
   	else if (isDefault()) {
  
  
  
  1.5       +13 -3     xml-xalan/java/src/org/apache/xalan/xsltc/dom/AnyNodeCounter.java
  
  Index: AnyNodeCounter.java
  ===================================================================
  RCS file: /home/cvs/xml-xalan/java/src/org/apache/xalan/xsltc/dom/AnyNodeCounter.java,v
  retrieving revision 1.4
  retrieving revision 1.5
  diff -u -r1.4 -r1.5
  --- AnyNodeCounter.java	16 Feb 2004 22:54:59 -0000	1.4
  +++ AnyNodeCounter.java	4 Feb 2005 18:26:12 -0000	1.5
  @@ -42,7 +42,12 @@
       public String getCounter() {
   	int result;
   	if (_value != Integer.MIN_VALUE) {
  -	    result = _value;
  +            //See Errata E24
  +            if (_value == 0) return "0";
  +            else if (Double.isNaN(_value)) return "NaN";
  +            else if (_value < 0 && Double.isInfinite(_value)) return "-Infinity";
  +            else if (Double.isInfinite(_value)) return "Infinity";
  +            else return formatNumbers((int)_value);
   	}
   	else {
   	    int next = _node; 
  @@ -83,7 +88,12 @@
   	public String getCounter() {
   	    int result;
   	    if (_value != Integer.MIN_VALUE) {
  -		result = _value;
  +                    //See Errata E24
  +                    if (_value == 0) return "0";
  +                    else if (Double.isNaN(_value)) return "NaN";
  +                    else if (_value < 0 && Double.isInfinite(_value)) return "-Infinity";
  +                    else if (Double.isInfinite(_value)) return "Infinity";
  +                    else result = (int) _value;
   	    }
   	    else {
   		int next = _node;
  
  
  
  1.6       +7 -2      xml-xalan/java/src/org/apache/xalan/xsltc/dom/MultipleNodeCounter.java
  
  Index: MultipleNodeCounter.java
  ===================================================================
  RCS file: /home/cvs/xml-xalan/java/src/org/apache/xalan/xsltc/dom/MultipleNodeCounter.java,v
  retrieving revision 1.5
  retrieving revision 1.6
  diff -u -r1.5 -r1.6
  --- MultipleNodeCounter.java	15 Dec 2004 17:35:44 -0000	1.5
  +++ MultipleNodeCounter.java	4 Feb 2005 18:26:12 -0000	1.6
  @@ -46,7 +46,12 @@
   
       public String getCounter() {
   	if (_value != Integer.MIN_VALUE) {
  -	    return formatNumbers(_value);
  +            //See Errata E24
  +            if (_value == 0) return "0";
  +            else if (Double.isNaN(_value)) return "NaN";
  +            else if (_value < 0 && Double.isInfinite(_value)) return "-Infinity";
  +            else if (Double.isInfinite(_value)) return "Infinity";
  +	    else return formatNumbers((int)_value);
   	}
   
   	IntegerArray ancestors = new IntegerArray();
  
  
  
  1.14      +3 -3      xml-xalan/java/src/org/apache/xalan/xsltc/dom/NodeCounter.java
  
  Index: NodeCounter.java
  ===================================================================
  RCS file: /home/cvs/xml-xalan/java/src/org/apache/xalan/xsltc/dom/NodeCounter.java,v
  retrieving revision 1.13
  retrieving revision 1.14
  diff -u -r1.13 -r1.14
  --- NodeCounter.java	15 Dec 2004 17:35:44 -0000	1.13
  +++ NodeCounter.java	4 Feb 2005 18:26:12 -0000	1.14
  @@ -37,7 +37,7 @@
   
       protected int _node = END;
       protected int _nodeType = DOM.FIRST_TYPE - 1;
  -    protected int _value = Integer.MIN_VALUE;
  +    protected double _value = Integer.MIN_VALUE;
   
       public final DOM          _document;
       public final DTMAxisIterator _iterator;
  @@ -84,7 +84,7 @@
        * If the user specified a value attribute, use this instead of 
        * counting nodes.
        */
  -    public NodeCounter setValue(int value) {
  +    public NodeCounter setValue(double value) {
       _value = value;
       return this;
       }
  
  
  
  1.7       +13 -3     xml-xalan/java/src/org/apache/xalan/xsltc/dom/SingleNodeCounter.java
  
  Index: SingleNodeCounter.java
  ===================================================================
  RCS file: /home/cvs/xml-xalan/java/src/org/apache/xalan/xsltc/dom/SingleNodeCounter.java,v
  retrieving revision 1.6
  retrieving revision 1.7
  diff -u -r1.6 -r1.7
  --- SingleNodeCounter.java	15 Dec 2004 17:35:44 -0000	1.6
  +++ SingleNodeCounter.java	4 Feb 2005 18:26:12 -0000	1.7
  @@ -49,7 +49,12 @@
       public String getCounter() {
   	int result;
   	if (_value != Integer.MIN_VALUE) {
  -	    result = _value;
  +                //See Errata E24
  +                if (_value == 0) return "0";
  +                else if (Double.isNaN(_value)) return "NaN";
  +                else if (_value < 0 && Double.isInfinite(_value)) return "-Infinity";
  +                else if (Double.isInfinite(_value)) return "Infinity";
  +                else result = (int) _value;
   	}
   	else {
   	    int next = _node;
  @@ -104,7 +109,12 @@
   	public String getCounter() {
   	    int result;
   	    if (_value != Integer.MIN_VALUE) {
  -		result = _value;
  +                //See Errata E24
  +                if (_value == 0) return "0";
  +                else if (Double.isNaN(_value)) return "NaN";
  +                else if (_value < 0 && Double.isInfinite(_value)) return "-Infinity";
  +                else if (Double.isInfinite(_value)) return "Infinity";
  +                else result = (int) _value;
   	    }
   	    else {
   		int next;
  
  
  

---------------------------------------------------------------------
To unsubscribe, e-mail: xalan-cvs-unsubscribe@xml.apache.org
For additional commands, e-mail: xalan-cvs-help@xml.apache.org