tmiller     2002/08/30 09:17:19

  Modified:    java/src/org/apache/xalan/xsltc/runtime BasisLibrary.java
               java/src/org/apache/xalan/xsltc/compiler EqualityExpr.java
                        RelationalExpr.java
  Log:
  bug 12148 fixed, xpath pred and relational expr
  
  Revision  Changes    Path
  1.49      +20 -48    
xml-xalan/java/src/org/apache/xalan/xsltc/runtime/BasisLibrary.java
  
  Index: BasisLibrary.java
  ===================================================================
  RCS file: 
/home/cvs/xml-xalan/java/src/org/apache/xalan/xsltc/runtime/BasisLibrary.java,v
  retrieving revision 1.48
  retrieving revision 1.49
  diff -u -r1.48 -r1.49
  --- BasisLibrary.java 23 Aug 2002 20:06:59 -0000      1.48
  +++ BasisLibrary.java 30 Aug 2002 16:17:19 -0000      1.49
  @@ -518,7 +518,8 @@
        * Utility function: node-set/node-set compare. 
        */
       public static boolean compare(NodeIterator left, NodeIterator right,
  -                               int op, int node, DOM dom) {
  +                               int op, DOM dom) 
  +    {
        int lnode;
        left.reset();
        
  @@ -536,24 +537,10 @@
        return false;
       }
   
  -    /**
  -     * Utility function: node/node-set compare.
  -     */
  -    public static boolean compare(int node, NodeIterator nodeSet,
  -                               int op, DOM dom) {
  -     final String lvalue = dom.getNodeValue(node);
  -     int rnode;
  -     //nodeSet.reset();
  -     while ((rnode = nodeSet.next()) != NodeIterator.END) {
  -         if (compareStrings(lvalue, dom.getNodeValue(rnode), op, dom)) {
  -             return true;
  -         }
  -     } 
  -     return false;
  -    }
   
       public static boolean compare(int node, NodeIterator iterator,
  -                               int op, int dummy, DOM dom) {
  +                               int op, DOM dom) 
  +    {
        //iterator.reset();
   
        int rnode;
  @@ -561,46 +548,40 @@
   
        switch(op) {
        case EQ:
  -         /* TODO:
  -          * This needs figuring out: What sort of comparison is done here?
  -          * Are we comparing exact node id's, node types, or node values?
  -          * Values is the obvious for attributes, but what about elements?
  -          */
            value = dom.getNodeValue(node);
  -         while ((rnode = iterator.next()) != NodeIterator.END)
  +         while ((rnode = iterator.next()) != NodeIterator.END) {
                if (value.equals(dom.getNodeValue(rnode))) return true;
  -         // if (rnode == node) return true; It just ain't that easy!!!
  +         }
            break;
        case NE:
            value = dom.getNodeValue(node);
  -         while ((rnode = iterator.next()) != NodeIterator.END)
  +         while ((rnode = iterator.next()) != NodeIterator.END) {
                if (!value.equals(dom.getNodeValue(rnode))) return true;
  -         // if (rnode != node) return true;
  +         }
            break;
        case LT:
            // Assume we're comparing document order here
  -         while ((rnode = iterator.next()) != NodeIterator.END)
  +         while ((rnode = iterator.next()) != NodeIterator.END) {
                if (rnode > node) return true;
  +         }
            break;
        case GT:
            // Assume we're comparing document order here
  -         while ((rnode = iterator.next()) != NodeIterator.END)
  +         while ((rnode = iterator.next()) != NodeIterator.END) {
                if (rnode < node) return true;
  +         }
            break;
        } 
        return(false);
       }
   
  -    public static boolean compare(NodeIterator left, final double rnumber,
  -                               final int op, final int node, DOM dom) {
  -     return(compare(left,rnumber,op,dom));
  -    }
   
       /**
        * Utility function: node-set/number compare.
        */
       public static boolean compare(NodeIterator left, final double rnumber,
  -                               final int op, DOM dom) {
  +                               final int op, DOM dom) 
  +    {
        int node;
        //left.reset();
   
  @@ -658,7 +639,8 @@
        * Utility function: node-set/string comparison. 
        */
       public static boolean compare(NodeIterator left, final String rstring,
  -                               int op, DOM dom) {
  +                               int op, DOM dom) 
  +    {
        int node;
        //left.reset();
        while ((node = left.next()) != NodeIterator.END) {
  @@ -669,19 +651,10 @@
        return false;
       }
   
  -    public static boolean compare(NodeIterator left, final String rstring,
  -                               int op, int node, DOM dom) {
  -     
  -     if (compareStrings(dom.getNodeValue(node), rstring, op, dom)) {
  -         return true;
  -     }
  -     else {
  -         return false;
  -     }
  -    }
   
       public static boolean compare(Object left, Object right,
  -                               int op, int node, DOM dom) { 
  +                               int op, DOM dom) 
  +    { 
        boolean result = false;
        boolean hasSimpleArgs = hasSimpleType(left) && hasSimpleType(right);
   
  @@ -779,10 +752,9 @@
            NodeIterator iter = ((NodeIterator)left).reset();
   
            if (right instanceof NodeIterator) {
  -             result = compare(iter, (NodeIterator)right, op, node, dom);
  +             result = compare(iter, (NodeIterator)right, op, dom);
            }
            else if (right instanceof String) {
  -             //result = compare(iter, (String)right, op, node, dom);
                result = compare(iter, (String)right, op, dom);
            }   
            else if (right instanceof Number) {
  
  
  
  1.10      +1 -3      
xml-xalan/java/src/org/apache/xalan/xsltc/compiler/EqualityExpr.java
  
  Index: EqualityExpr.java
  ===================================================================
  RCS file: 
/home/cvs/xml-xalan/java/src/org/apache/xalan/xsltc/compiler/EqualityExpr.java,v
  retrieving revision 1.9
  retrieving revision 1.10
  diff -u -r1.9 -r1.10
  --- EqualityExpr.java 10 May 2002 15:40:02 -0000      1.9
  +++ EqualityExpr.java 30 Aug 2002 16:17:19 -0000      1.10
  @@ -360,7 +360,6 @@
   
        // Call the appropriate compare() from the BasisLibrary
        il.append(new PUSH(cpg, _op));
  -     il.append(methodGen.loadContextNode());
        il.append(methodGen.loadDOM());
   
        final int compare = cpg.addMethodref(BASIS_LIBRARY_CLASS,
  @@ -369,7 +368,6 @@
                                             + tleft.toSignature() 
                                             + tright.toSignature()
                                             + "I"
  -                                          + NODE_SIG
                                             + DOM_INTF_SIG
                                             + ")Z");
        il.append(new INVOKESTATIC(compare));
  
  
  
  1.14      +1 -3      
xml-xalan/java/src/org/apache/xalan/xsltc/compiler/RelationalExpr.java
  
  Index: RelationalExpr.java
  ===================================================================
  RCS file: 
/home/cvs/xml-xalan/java/src/org/apache/xalan/xsltc/compiler/RelationalExpr.java,v
  retrieving revision 1.13
  retrieving revision 1.14
  diff -u -r1.13 -r1.14
  --- RelationalExpr.java       23 Aug 2002 19:20:53 -0000      1.13
  +++ RelationalExpr.java       30 Aug 2002 16:17:19 -0000      1.14
  @@ -225,7 +225,6 @@
            _right.startResetIterator(classGen, methodGen);
   
            il.append(new PUSH(cpg, _op));
  -         il.append(methodGen.loadContextNode());
            il.append(methodGen.loadDOM());
   
            int index = cpg.addMethodref(BASIS_LIBRARY_CLASS, "compare",
  @@ -233,7 +232,6 @@
                                         + _left.getType().toSignature() 
                                         + _right.getType().toSignature()
                                         + "I"
  -                                      + NODE_SIG
                                         + DOM_INTF_SIG
                                         + ")Z");
            il.append(new INVOKESTATIC(index));
  
  
  

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

Reply via email to