morten      01/11/27 07:20:56

  Modified:    java/src/org/apache/xalan/xsltc/compiler FilterExpr.java
                        Predicate.java VariableRefBase.java
               java/src/org/apache/xalan/xsltc/dom
                        CurrentNodeListIterator.java DOMImpl.java
                        FilteredStepIterator.java KeyIndex.java
                        MatchingIterator.java MultiDOM.java
                        NthIterator.java StepIterator.java
                        UnionIterator.java
               java/src/org/apache/xalan/xsltc/runtime
                        AbstractTranslet.java
  Log:
  A fix for trees of step iterators stored inside variables.
  Also some fixes for recently introduced regressions.
  PR:           n/a
  Obtained from:        n/a
  Submitted by: [EMAIL PROTECTED]
  Reviewed by:  [EMAIL PROTECTED]
  
  Revision  Changes    Path
  1.5       +8 -1      
xml-xalan/java/src/org/apache/xalan/xsltc/compiler/FilterExpr.java
  
  Index: FilterExpr.java
  ===================================================================
  RCS file: 
/home/cvs/xml-xalan/java/src/org/apache/xalan/xsltc/compiler/FilterExpr.java,v
  retrieving revision 1.4
  retrieving revision 1.5
  diff -u -r1.4 -r1.5
  --- FilterExpr.java   2001/08/27 09:07:19     1.4
  +++ FilterExpr.java   2001/11/27 15:20:55     1.5
  @@ -1,5 +1,5 @@
   /*
  - * @(#)$Id: FilterExpr.java,v 1.4 2001/08/27 09:07:19 morten Exp $
  + * @(#)$Id: FilterExpr.java,v 1.5 2001/11/27 15:20:55 morten Exp $
    *
    * The Apache Software License, Version 1.1
    *
  @@ -79,6 +79,13 @@
        _primary = primary;
        _predicates = predicates;
        primary.setParent(this);
  +    }
  +
  +    protected Expression getExpr() {
  +     if (_primary instanceof CastExpr)
  +         return ((CastExpr)_primary).getExpr();
  +     else
  +         return _primary;
       }
   
       public void setParser(Parser parser) {
  
  
  
  1.18      +15 -7     
xml-xalan/java/src/org/apache/xalan/xsltc/compiler/Predicate.java
  
  Index: Predicate.java
  ===================================================================
  RCS file: 
/home/cvs/xml-xalan/java/src/org/apache/xalan/xsltc/compiler/Predicate.java,v
  retrieving revision 1.17
  retrieving revision 1.18
  diff -u -r1.17 -r1.18
  --- Predicate.java    2001/11/26 12:50:12     1.17
  +++ Predicate.java    2001/11/27 15:20:55     1.18
  @@ -1,5 +1,5 @@
   /*
  - * @(#)$Id: Predicate.java,v 1.17 2001/11/26 12:50:12 morten Exp $
  + * @(#)$Id: Predicate.java,v 1.18 2001/11/27 15:20:55 morten Exp $
    *
    * The Apache Software License, Version 1.1
    *
  @@ -198,12 +198,20 @@
                if (_exp.typeCheck(stable) != Type.Boolean) {
                    _exp = new CastExpr(_exp, Type.Boolean);
                }
  -             if ((parent instanceof Pattern) ||
  -                 (parent instanceof VariableBase))
  -                 _nthPositionFilter = true;
  -             else
  -                 _nthPositionFilter = false;
  -             _nthPositionFilter = true;
  +
  +             if (parent instanceof Pattern) {
  +                 _nthPositionFilter = true;
  +             }
  +             else if (parent instanceof FilterExpr) {
  +                 FilterExpr filter = (FilterExpr)parent;
  +
  +                 if (filter.getExpr() instanceof KeyCall)
  +                     _canOptimize = false;
  +                 else if (_exp.hasPositionCall())
  +                     _canOptimize = false;
  +                 if (_canOptimize)
  +                     _nthPositionFilter = true;
  +             }
                return _type = Type.Boolean;
            }
            // Use NthPositionIterator to handle [position()] or [a]
  
  
  
  1.6       +5 -2      
xml-xalan/java/src/org/apache/xalan/xsltc/compiler/VariableRefBase.java
  
  Index: VariableRefBase.java
  ===================================================================
  RCS file: 
/home/cvs/xml-xalan/java/src/org/apache/xalan/xsltc/compiler/VariableRefBase.java,v
  retrieving revision 1.5
  retrieving revision 1.6
  diff -u -r1.5 -r1.6
  --- VariableRefBase.java      2001/10/29 11:47:25     1.5
  +++ VariableRefBase.java      2001/11/27 15:20:55     1.6
  @@ -1,5 +1,5 @@
   /*
  - * @(#)$Id: VariableRefBase.java,v 1.5 2001/10/29 11:47:25 morten Exp $
  + * @(#)$Id: VariableRefBase.java,v 1.6 2001/11/27 15:20:55 morten Exp $
    *
    * The Apache Software License, Version 1.1
    *
  @@ -101,8 +101,11 @@
        */
       public VariableBase findParentVariable() {
        SyntaxTreeNode node = this;
  -     while ((node != null) && (!(node instanceof VariableBase)))
  +     while ((node != null) && (!(node instanceof VariableBase))) {
  +         if (node instanceof Predicate)
  +             ((Predicate)node).dontOptimize();
            node = node.getParent();
  +     }
        return (VariableBase)node;
       }
   
  
  
  
  1.4       +2 -2      
xml-xalan/java/src/org/apache/xalan/xsltc/dom/CurrentNodeListIterator.java
  
  Index: CurrentNodeListIterator.java
  ===================================================================
  RCS file: 
/home/cvs/xml-xalan/java/src/org/apache/xalan/xsltc/dom/CurrentNodeListIterator.java,v
  retrieving revision 1.3
  retrieving revision 1.4
  diff -u -r1.3 -r1.4
  --- CurrentNodeListIterator.java      2001/11/05 18:47:51     1.3
  +++ CurrentNodeListIterator.java      2001/11/27 15:20:55     1.4
  @@ -1,5 +1,5 @@
   /*
  - * @(#)$Id: CurrentNodeListIterator.java,v 1.3 2001/11/05 18:47:51 morten 
Exp $
  + * @(#)$Id: CurrentNodeListIterator.java,v 1.4 2001/11/27 15:20:55 morten 
Exp $
    *
    * The Apache Software License, Version 1.1
    *
  @@ -112,8 +112,8 @@
        try {
            final CurrentNodeListIterator clone =
                (CurrentNodeListIterator)super.clone();
  -         clone._isRestartable = false;
            clone._nodes = (IntegerArray)_nodes.clone();
  +         clone._isRestartable = false;
            return clone.reset();
        }
        catch (CloneNotSupportedException e) {
  
  
  
  1.63      +28 -4     
xml-xalan/java/src/org/apache/xalan/xsltc/dom/DOMImpl.java
  
  Index: DOMImpl.java
  ===================================================================
  RCS file: 
/home/cvs/xml-xalan/java/src/org/apache/xalan/xsltc/dom/DOMImpl.java,v
  retrieving revision 1.62
  retrieving revision 1.63
  diff -u -r1.62 -r1.63
  --- DOMImpl.java      2001/11/27 08:40:28     1.62
  +++ DOMImpl.java      2001/11/27 15:20:55     1.63
  @@ -1,5 +1,5 @@
   /*
  - * @(#)$Id: DOMImpl.java,v 1.62 2001/11/27 08:40:28 morten Exp $
  + * @(#)$Id: DOMImpl.java,v 1.63 2001/11/27 15:20:55 morten Exp $
    *
    * The Apache Software License, Version 1.1
    *
  @@ -720,7 +720,7 @@
        * for efficiency (both speed and size of translet).
        */
       private final class TypedChildrenIterator extends NodeIteratorBase {
  -     private final int _nodeType;
  +     private int _nodeType;
        // node to consider next
        private int _currentChild;
            
  @@ -738,6 +738,21 @@
            return this;
        }
   
  +     public NodeIterator cloneIterator() {
  +         try {
  +             final TypedChildrenIterator clone =
  +                 (TypedChildrenIterator)super.clone();
  +             clone._nodeType = _nodeType;
  +             clone._isRestartable = false;
  +             return clone.reset();
  +         }
  +         catch (CloneNotSupportedException e) {
  +             BasisLibrary.runTimeError(BasisLibrary.ITERATOR_CLONE_ERR,
  +                                       e.toString());
  +             return null;
  +         }
  +     }
  +
        public NodeIterator reset() {
            if (hasChildren(_startNode))
                _currentChild = _offsetOrChild[_startNode];
  @@ -977,6 +992,15 @@
            }
            return this;
        }
  +
  +     public NodeIterator reset() {
  +         int node = _startNode;
  +         for (node = _lengthOrAttr[node];
  +              node != NULL && _type[node] != _nodeType;
  +              node = _nextSibling[node]);
  +         _attribute = node;
  +         return resetPosition();
  +     }
                     
        public int next() {
            final int node = _attribute;
  @@ -1175,9 +1199,9 @@
            
        public NodeIterator cloneIterator() {
            try {
  -             _isRestartable = false;
                final PrecedingIterator clone = 
                    (PrecedingIterator)super.clone();
  +             clone._isRestartable = false;
                return clone.reset();
            }
            catch (CloneNotSupportedException e) {
  @@ -1335,9 +1359,9 @@
        }
            
        public NodeIterator cloneIterator() {
  -         _isRestartable = false;         // must set to false for any clone
            try {
                final AncestorIterator clone = (AncestorIterator)super.clone();
  +             clone._isRestartable = false; // must set to false for any clone
                clone._startNode = _startNode;
                return clone.reset();
            }
  
  
  
  1.4       +2 -2      
xml-xalan/java/src/org/apache/xalan/xsltc/dom/FilteredStepIterator.java
  
  Index: FilteredStepIterator.java
  ===================================================================
  RCS file: 
/home/cvs/xml-xalan/java/src/org/apache/xalan/xsltc/dom/FilteredStepIterator.java,v
  retrieving revision 1.3
  retrieving revision 1.4
  diff -u -r1.3 -r1.4
  --- FilteredStepIterator.java 2001/11/27 08:40:28     1.3
  +++ FilteredStepIterator.java 2001/11/27 15:20:55     1.4
  @@ -1,5 +1,5 @@
   /*
  - * @(#)$Id: FilteredStepIterator.java,v 1.3 2001/11/27 08:40:28 morten Exp $
  + * @(#)$Id: FilteredStepIterator.java,v 1.4 2001/11/27 15:20:55 morten Exp $
    *
    * The Apache Software License, Version 1.1
    *
  @@ -79,13 +79,13 @@
       }
   
       public NodeIterator cloneIterator() {
  -     setNotRestartable();
        try {
            final FilteredStepIterator clone =
                (FilteredStepIterator)super.clone();
            clone._source = _source.cloneIterator();
            clone._iterator = _iterator.cloneIterator();
            clone._filter = _filter;
  +         clone.setNotRestartable();
            return clone.reset();
        }
        catch (CloneNotSupportedException e) {
  
  
  
  1.6       +2 -1      
xml-xalan/java/src/org/apache/xalan/xsltc/dom/KeyIndex.java
  
  Index: KeyIndex.java
  ===================================================================
  RCS file: 
/home/cvs/xml-xalan/java/src/org/apache/xalan/xsltc/dom/KeyIndex.java,v
  retrieving revision 1.5
  retrieving revision 1.6
  diff -u -r1.5 -r1.6
  --- KeyIndex.java     2001/09/19 15:53:42     1.5
  +++ KeyIndex.java     2001/11/27 15:20:55     1.6
  @@ -1,5 +1,5 @@
   /*
  - * @(#)$Id: KeyIndex.java,v 1.5 2001/09/19 15:53:42 morten Exp $
  + * @(#)$Id: KeyIndex.java,v 1.6 2001/11/27 15:20:55 morten Exp $
    *
    * The Apache Software License, Version 1.1
    *
  @@ -70,6 +70,7 @@
   import org.apache.xalan.xsltc.runtime.Hashtable;
   
   public class KeyIndex implements NodeIterator {
  +
       private Hashtable _index = new Hashtable();
       private BitArray  _nodes = null;
       private int       _pos = 0;
  
  
  
  1.5       +2 -2      
xml-xalan/java/src/org/apache/xalan/xsltc/dom/MatchingIterator.java
  
  Index: MatchingIterator.java
  ===================================================================
  RCS file: 
/home/cvs/xml-xalan/java/src/org/apache/xalan/xsltc/dom/MatchingIterator.java,v
  retrieving revision 1.4
  retrieving revision 1.5
  diff -u -r1.4 -r1.5
  --- MatchingIterator.java     2001/10/30 15:49:32     1.4
  +++ MatchingIterator.java     2001/11/27 15:20:55     1.5
  @@ -1,5 +1,5 @@
   /*
  - * @(#)$Id: MatchingIterator.java,v 1.4 2001/10/30 15:49:32 morten Exp $
  + * @(#)$Id: MatchingIterator.java,v 1.5 2001/11/27 15:20:55 morten Exp $
    *
    * The Apache Software License, Version 1.1
    *
  @@ -79,8 +79,8 @@
       public NodeIterator cloneIterator() {
        try {
            final MatchingIterator clone = (MatchingIterator)super.clone();
  -         clone._isRestartable = false;
            clone._source = _source.cloneIterator();
  +         clone._isRestartable = false;
            return clone;
        }
        catch (CloneNotSupportedException e) {
  
  
  
  1.15      +2 -2      
xml-xalan/java/src/org/apache/xalan/xsltc/dom/MultiDOM.java
  
  Index: MultiDOM.java
  ===================================================================
  RCS file: 
/home/cvs/xml-xalan/java/src/org/apache/xalan/xsltc/dom/MultiDOM.java,v
  retrieving revision 1.14
  retrieving revision 1.15
  diff -u -r1.14 -r1.15
  --- MultiDOM.java     2001/11/26 14:03:09     1.14
  +++ MultiDOM.java     2001/11/27 15:20:55     1.15
  @@ -1,5 +1,5 @@
   /*
  - * @(#)$Id: MultiDOM.java,v 1.14 2001/11/26 14:03:09 morten Exp $
  + * @(#)$Id: MultiDOM.java,v 1.15 2001/11/27 15:20:55 morten Exp $
    *
    * The Apache Software License, Version 1.1
    *
  @@ -190,10 +190,10 @@
        public NodeIterator cloneIterator() {
            try {
                NodeValueIterator clone = (NodeValueIterator)super.clone();
  -             clone._isRestartable = false;
                clone._source = _source.cloneIterator();
                clone._value = _value;
                clone._op = _op;
  +             _isRestartable = false;
                return clone.reset();
            }
            catch (CloneNotSupportedException e) {
  
  
  
  1.8       +9 -7      
xml-xalan/java/src/org/apache/xalan/xsltc/dom/NthIterator.java
  
  Index: NthIterator.java
  ===================================================================
  RCS file: 
/home/cvs/xml-xalan/java/src/org/apache/xalan/xsltc/dom/NthIterator.java,v
  retrieving revision 1.7
  retrieving revision 1.8
  diff -u -r1.7 -r1.8
  --- NthIterator.java  2001/10/05 09:47:56     1.7
  +++ NthIterator.java  2001/11/27 15:20:55     1.8
  @@ -1,5 +1,5 @@
   /*
  - * @(#)$Id: NthIterator.java,v 1.7 2001/10/05 09:47:56 morten Exp $
  + * @(#)$Id: NthIterator.java,v 1.8 2001/11/27 15:20:55 morten Exp $
    *
    * The Apache Software License, Version 1.1
    *
  @@ -65,10 +65,11 @@
   
   import org.apache.xalan.xsltc.DOM;
   import org.apache.xalan.xsltc.NodeIterator;
  +import org.apache.xalan.xsltc.runtime.BasisLibrary;
   
   public final class NthIterator extends NodeIteratorBase {
       // ...[N]
  -    private final NodeIterator _source;
  +    private NodeIterator _source;
       private final int _position;
       private boolean _ready;
   
  @@ -123,11 +124,12 @@
       public void gotoMark() {
        _source.gotoMark();
       }
  -    
  +
       public NodeIterator cloneIterator() {
  -     //!! not clear when cloning is performed
  -     // and what's the desired state of the new clone
  -     return new NthIterator(_source.cloneIterator(), _position);
  +     NodeIterator clone = _source.cloneIterator();
  +     ((NodeIteratorBase)clone)._isRestartable = true;
  +     NthIterator other = new NthIterator(clone, _position);
  +     other._isRestartable = false;
  +     return other.reset();
       }
  -
   }
  
  
  
  1.9       +7 -11     
xml-xalan/java/src/org/apache/xalan/xsltc/dom/StepIterator.java
  
  Index: StepIterator.java
  ===================================================================
  RCS file: 
/home/cvs/xml-xalan/java/src/org/apache/xalan/xsltc/dom/StepIterator.java,v
  retrieving revision 1.8
  retrieving revision 1.9
  diff -u -r1.8 -r1.9
  --- StepIterator.java 2001/11/27 08:40:28     1.8
  +++ StepIterator.java 2001/11/27 15:20:55     1.9
  @@ -1,5 +1,5 @@
   /*
  - * @(#)$Id: StepIterator.java,v 1.8 2001/11/27 08:40:28 morten Exp $
  + * @(#)$Id: StepIterator.java,v 1.9 2001/11/27 15:20:55 morten Exp $
    *
    * The Apache Software License, Version 1.1
    *
  @@ -79,27 +79,23 @@
       }
   
       protected void setNotRestartable() {
  +     _isRestartable = false;
        if (_source instanceof StepIterator) {
  -         _isRestartable = true;
  -         if (_iterator instanceof NodeIteratorBase)
  -             ((NodeIteratorBase)_iterator)._isRestartable = true;
            ((StepIterator)_source).setNotRestartable();
        }
  -     else {
  -         _isRestartable = false;
  -         if (_source instanceof NodeIteratorBase)
  -             ((NodeIteratorBase)_source)._isRestartable = false;
  -         if (_iterator instanceof NodeIteratorBase)
  -             ((NodeIteratorBase)_iterator)._isRestartable = true;
  +     else if (_source instanceof NodeIteratorBase) {
  +         ((NodeIteratorBase)_source)._isRestartable = false;
        }
  +     if (_iterator instanceof NodeIteratorBase)
  +         ((NodeIteratorBase)_iterator)._isRestartable = true;
       }
   
       public NodeIterator cloneIterator() {
  -     setNotRestartable();
        try {
            final StepIterator clone = (StepIterator)super.clone();
            clone._source = _source.cloneIterator();
            clone._iterator = _iterator.cloneIterator();
  +         clone.setNotRestartable();
            return clone.reset();
        }
        catch (CloneNotSupportedException e) {
  
  
  
  1.9       +2 -2      
xml-xalan/java/src/org/apache/xalan/xsltc/dom/UnionIterator.java
  
  Index: UnionIterator.java
  ===================================================================
  RCS file: 
/home/cvs/xml-xalan/java/src/org/apache/xalan/xsltc/dom/UnionIterator.java,v
  retrieving revision 1.8
  retrieving revision 1.9
  diff -u -r1.8 -r1.9
  --- UnionIterator.java        2001/11/27 08:40:28     1.8
  +++ UnionIterator.java        2001/11/27 15:20:55     1.9
  @@ -1,5 +1,5 @@
   /*
  - * @(#)$Id: UnionIterator.java,v 1.8 2001/11/27 08:40:28 morten Exp $
  + * @(#)$Id: UnionIterator.java,v 1.9 2001/11/27 15:20:55 morten Exp $
    *
    * The Apache Software License, Version 1.1
    *
  @@ -120,12 +120,12 @@
       }
   
       public NodeIterator cloneIterator() {
  -     _isRestartable = false;
        final LookAheadIterator[] heapCopy = 
            new LookAheadIterator[_heap.length];
        try {
            final UnionIterator clone = (UnionIterator)super.clone();
            System.arraycopy(_heap, 0, heapCopy, 0, _heap.length);
  +         clone._isRestartable = false;
            clone._heap = heapCopy;
            return clone.reset();
        } 
  
  
  
  1.30      +4 -6      
xml-xalan/java/src/org/apache/xalan/xsltc/runtime/AbstractTranslet.java
  
  Index: AbstractTranslet.java
  ===================================================================
  RCS file: 
/home/cvs/xml-xalan/java/src/org/apache/xalan/xsltc/runtime/AbstractTranslet.java,v
  retrieving revision 1.29
  retrieving revision 1.30
  diff -u -r1.29 -r1.30
  --- AbstractTranslet.java     2001/11/16 17:31:16     1.29
  +++ AbstractTranslet.java     2001/11/27 15:20:56     1.30
  @@ -1,5 +1,5 @@
   /*
  - * @(#)$Id: AbstractTranslet.java,v 1.29 2001/11/16 17:31:16 tmiller Exp $
  + * @(#)$Id: AbstractTranslet.java,v 1.30 2001/11/27 15:20:56 morten Exp $
    *
    * The Apache Software License, Version 1.1
    *
  @@ -320,11 +320,9 @@
            // The name cannot be null - use empty string instead
            if (name == null) name = EMPTYSTRING;
   
  -         final DecimalFormat df = (DecimalFormat)_formatSymbols.get(name);
  -         if (df != null)
  -             return df;
  -         else
  -             return((DecimalFormat)_formatSymbols.get(EMPTYSTRING));
  +         DecimalFormat df = (DecimalFormat)_formatSymbols.get(name);
  +         if (df == null) df = (DecimalFormat)_formatSymbols.get(EMPTYSTRING);
  +         return df;
        }
        return(null);
       }
  
  
  

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

Reply via email to