You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@xalan.apache.org by mo...@apache.org on 2001/11/29 12:33:10 UTC
cvs commit: xml-xalan/java/src/org/apache/xalan/xsltc/dom DOMImpl.java StepIterator.java
morten 01/11/29 03:33:10
Modified: java/src/org/apache/xalan/xsltc/compiler CastExpr.java
EqualityExpr.java Expression.java LastCall.java
Predicate.java VariableRefBase.java
java/src/org/apache/xalan/xsltc/dom DOMImpl.java
StepIterator.java
Log:
A fix for resetting the source iterator of a node-value iterator.
PR: bugzilla 5152
Obtained from: n/a
Submitted by: morten@xml.apache.org
Reviewed by: morten@xml.apache.org
Revision Changes Path
1.9 +5 -1 xml-xalan/java/src/org/apache/xalan/xsltc/compiler/CastExpr.java
Index: CastExpr.java
===================================================================
RCS file: /home/cvs/xml-xalan/java/src/org/apache/xalan/xsltc/compiler/CastExpr.java,v
retrieving revision 1.8
retrieving revision 1.9
diff -u -r1.8 -r1.9
--- CastExpr.java 2001/11/09 15:14:21 1.8
+++ CastExpr.java 2001/11/29 11:33:09 1.9
@@ -1,5 +1,5 @@
/*
- * @(#)$Id: CastExpr.java,v 1.8 2001/11/09 15:14:21 tmiller Exp $
+ * @(#)$Id: CastExpr.java,v 1.9 2001/11/29 11:33:09 morten Exp $
*
* The Apache Software License, Version 1.1
*
@@ -177,6 +177,10 @@
*/
public boolean hasPositionCall() {
return(_left.hasPositionCall());
+ }
+
+ public boolean hasLastCall() {
+ return(_left.hasLastCall());
}
public String toString() {
1.7 +7 -1 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.6
retrieving revision 1.7
diff -u -r1.6 -r1.7
--- EqualityExpr.java 2001/11/06 13:42:04 1.6
+++ EqualityExpr.java 2001/11/29 11:33:09 1.7
@@ -1,5 +1,5 @@
/*
- * @(#)$Id: EqualityExpr.java,v 1.6 2001/11/06 13:42:04 morten Exp $
+ * @(#)$Id: EqualityExpr.java,v 1.7 2001/11/29 11:33:09 morten Exp $
*
* The Apache Software License, Version 1.1
*
@@ -114,6 +114,12 @@
public boolean hasPositionCall() {
if (_left.hasPositionCall()) return true;
if (_right.hasPositionCall()) return true;
+ return false;
+ }
+
+ public boolean hasLastCall() {
+ if (_left.hasLastCall()) return true;
+ if (_right.hasLastCall()) return true;
return false;
}
1.9 +5 -1 xml-xalan/java/src/org/apache/xalan/xsltc/compiler/Expression.java
Index: Expression.java
===================================================================
RCS file: /home/cvs/xml-xalan/java/src/org/apache/xalan/xsltc/compiler/Expression.java,v
retrieving revision 1.8
retrieving revision 1.9
diff -u -r1.8 -r1.9
--- Expression.java 2001/11/06 13:42:04 1.8
+++ Expression.java 2001/11/29 11:33:09 1.9
@@ -1,5 +1,5 @@
/*
- * @(#)$Id: Expression.java,v 1.8 2001/11/06 13:42:04 morten Exp $
+ * @(#)$Id: Expression.java,v 1.9 2001/11/29 11:33:09 morten Exp $
*
* The Apache Software License, Version 1.1
*
@@ -104,6 +104,10 @@
public boolean hasPositionCall() {
return true;
+ }
+
+ public boolean hasLastCall() {
+ return false;
}
/**
1.6 +5 -1 xml-xalan/java/src/org/apache/xalan/xsltc/compiler/LastCall.java
Index: LastCall.java
===================================================================
RCS file: /home/cvs/xml-xalan/java/src/org/apache/xalan/xsltc/compiler/LastCall.java,v
retrieving revision 1.5
retrieving revision 1.6
diff -u -r1.5 -r1.6
--- LastCall.java 2001/11/06 13:42:04 1.5
+++ LastCall.java 2001/11/29 11:33:09 1.6
@@ -1,5 +1,5 @@
/*
- * @(#)$Id: LastCall.java,v 1.5 2001/11/06 13:42:04 morten Exp $
+ * @(#)$Id: LastCall.java,v 1.6 2001/11/29 11:33:09 morten Exp $
*
* The Apache Software License, Version 1.1
*
@@ -83,6 +83,10 @@
}
public boolean hasPositionCall() {
+ return true;
+ }
+
+ public boolean hasLastCall() {
return true;
}
1.19 +2 -2 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.18
retrieving revision 1.19
diff -u -r1.18 -r1.19
--- Predicate.java 2001/11/27 15:20:55 1.18
+++ Predicate.java 2001/11/29 11:33:09 1.19
@@ -1,5 +1,5 @@
/*
- * @(#)$Id: Predicate.java,v 1.18 2001/11/27 15:20:55 morten Exp $
+ * @(#)$Id: Predicate.java,v 1.19 2001/11/29 11:33:09 morten Exp $
*
* The Apache Software License, Version 1.1
*
@@ -207,7 +207,7 @@
if (filter.getExpr() instanceof KeyCall)
_canOptimize = false;
- else if (_exp.hasPositionCall())
+ else if (_exp.hasPositionCall() && _exp.hasLastCall())
_canOptimize = false;
if (_canOptimize)
_nthPositionFilter = true;
1.7 +2 -5 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.6
retrieving revision 1.7
diff -u -r1.6 -r1.7
--- VariableRefBase.java 2001/11/27 15:20:55 1.6
+++ VariableRefBase.java 2001/11/29 11:33:09 1.7
@@ -1,5 +1,5 @@
/*
- * @(#)$Id: VariableRefBase.java,v 1.6 2001/11/27 15:20:55 morten Exp $
+ * @(#)$Id: VariableRefBase.java,v 1.7 2001/11/29 11:33:09 morten Exp $
*
* The Apache Software License, Version 1.1
*
@@ -101,11 +101,8 @@
*/
public VariableBase findParentVariable() {
SyntaxTreeNode node = this;
- while ((node != null) && (!(node instanceof VariableBase))) {
- if (node instanceof Predicate)
- ((Predicate)node).dontOptimize();
+ while ((node != null) && (!(node instanceof VariableBase)))
node = node.getParent();
- }
return (VariableBase)node;
}
1.64 +9 -2 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.63
retrieving revision 1.64
diff -u -r1.63 -r1.64
--- DOMImpl.java 2001/11/27 15:20:55 1.63
+++ DOMImpl.java 2001/11/29 11:33:09 1.64
@@ -1,5 +1,5 @@
/*
- * @(#)$Id: DOMImpl.java,v 1.63 2001/11/27 15:20:55 morten Exp $
+ * @(#)$Id: DOMImpl.java,v 1.64 2001/11/29 11:33:09 morten Exp $
*
* The Apache Software License, Version 1.1
*
@@ -1741,8 +1741,15 @@
public NodeIterator cloneIterator() {
try {
NodeValueIterator clone = (NodeValueIterator)super.clone();
- clone._isRestartable = false;
clone._source = _source.cloneIterator();
+ if (_source instanceof StepIterator) {
+ StepIterator source = (StepIterator)clone._source;
+ source.setRestartable();
+ }
+ else if (_source instanceof NodeIteratorBase) {
+ NodeIteratorBase source = (NodeIteratorBase)clone._source;
+ source._isRestartable = true;
+ }
clone._value = _value;
clone._op = _op;
return clone.reset();
1.10 +16 -1 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.9
retrieving revision 1.10
diff -u -r1.9 -r1.10
--- StepIterator.java 2001/11/27 15:20:55 1.9
+++ StepIterator.java 2001/11/29 11:33:09 1.10
@@ -1,5 +1,5 @@
/*
- * @(#)$Id: StepIterator.java,v 1.9 2001/11/27 15:20:55 morten Exp $
+ * @(#)$Id: StepIterator.java,v 1.10 2001/11/29 11:33:09 morten Exp $
*
* The Apache Software License, Version 1.1
*
@@ -72,12 +72,25 @@
protected NodeIterator _source;
protected NodeIterator _iterator;
+ private int _pos = -1;
public StepIterator(NodeIterator source, NodeIterator iterator) {
_source = source;
_iterator = iterator;
}
+ protected void setRestartable() {
+ _isRestartable = true;
+ if (_source instanceof StepIterator) {
+ ((StepIterator)_source).setRestartable();
+ }
+ else if (_source instanceof NodeIteratorBase) {
+ ((NodeIteratorBase)_source)._isRestartable = true;
+ }
+ if (_iterator instanceof NodeIteratorBase)
+ ((NodeIteratorBase)_iterator)._isRestartable = true;
+ }
+
protected void setNotRestartable() {
_isRestartable = false;
if (_source instanceof StepIterator) {
@@ -150,10 +163,12 @@
public void setMark() {
_source.setMark();
_iterator.setMark();
+ _pos = _position;
}
public void gotoMark() {
_source.gotoMark();
_iterator.gotoMark();
+ _position = _pos;
}
}
---------------------------------------------------------------------
To unsubscribe, e-mail: xalan-cvs-unsubscribe@xml.apache.org
For additional commands, e-mail: xalan-cvs-help@xml.apache.org