minchau 2003/10/15 14:01:51
Modified: java/src/org/apache/xalan/xsltc/compiler BinOpExpr.java
RelationalExpr.java Predicate.java LogicalExpr.java
UnaryOpExpr.java
Log:
PR: bugzilla 15327
Submitted by: Christine Li
Reviewed by: Brian Minchau
Fix for XSLTC problems with [last()] and [last()-1] predicates.
Revision Changes Path
1.10 +8 -1
xml-xalan/java/src/org/apache/xalan/xsltc/compiler/BinOpExpr.java
Index: BinOpExpr.java
===================================================================
RCS file:
/home/cvs/xml-xalan/java/src/org/apache/xalan/xsltc/compiler/BinOpExpr.java,v
retrieving revision 1.9
retrieving revision 1.10
diff -u -r1.9 -r1.10
--- BinOpExpr.java 30 Jan 2003 18:45:59 -0000 1.9
+++ BinOpExpr.java 15 Oct 2003 21:01:51 -0000 1.10
@@ -101,6 +101,13 @@
return false;
}
+ /**
+ * Returns true if this expressions contains a call to last()
+ */
+ public boolean hasLastCall() {
+ return (_left.hasLastCall() || _right.hasLastCall());
+ }
+
public void setParser(Parser parser) {
super.setParser(parser);
_left.setParser(parser);
1.17 +8 -1
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.16
retrieving revision 1.17
diff -u -r1.16 -r1.17
--- RelationalExpr.java 30 Jan 2003 18:46:01 -0000 1.16
+++ RelationalExpr.java 15 Oct 2003 21:01:51 -0000 1.17
@@ -109,6 +109,13 @@
return false;
}
+ /**
+ * Returns true if this expressions contains a call to last()
+ */
+ public boolean hasLastCall() {
+ return (_left.hasLastCall() || _right.hasLastCall());
+ }
+
public boolean hasReferenceArgs() {
return _left.getType() instanceof ReferenceType ||
_right.getType() instanceof ReferenceType;
1.30 +5 -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.29
retrieving revision 1.30
diff -u -r1.29 -r1.30
--- Predicate.java 22 Jul 2003 16:22:39 -0000 1.29
+++ Predicate.java 15 Oct 2003 21:01:51 -0000 1.30
@@ -260,9 +260,12 @@
}
SyntaxTreeNode parent = getParent();
-
+
// Expand [last()] into [position() = last()]
if ((_exp instanceof LastCall) ||
+ //Fix for bug 22949, check for last() for any expression
returns
+ // NumberType
+ _exp.hasLastCall()||
(parent instanceof Pattern) ||
(parent instanceof FilterExpr)) {
1.13 +8 -1
xml-xalan/java/src/org/apache/xalan/xsltc/compiler/LogicalExpr.java
Index: LogicalExpr.java
===================================================================
RCS file:
/home/cvs/xml-xalan/java/src/org/apache/xalan/xsltc/compiler/LogicalExpr.java,v
retrieving revision 1.12
retrieving revision 1.13
diff -u -r1.12 -r1.13
--- LogicalExpr.java 30 Jan 2003 18:46:01 -0000 1.12
+++ LogicalExpr.java 15 Oct 2003 21:01:51 -0000 1.13
@@ -105,6 +105,13 @@
}
/**
+ * Returns true if this expressions contains a call to last()
+ */
+ public boolean hasLastCall() {
+ return (_left.hasLastCall() || _right.hasLastCall());
+ }
+
+ /**
* Returns an object representing the compile-time evaluation
* of an expression. We are only using this for function-available
* and element-available at this time.
1.7 +8 -1
xml-xalan/java/src/org/apache/xalan/xsltc/compiler/UnaryOpExpr.java
Index: UnaryOpExpr.java
===================================================================
RCS file:
/home/cvs/xml-xalan/java/src/org/apache/xalan/xsltc/compiler/UnaryOpExpr.java,v
retrieving revision 1.6
retrieving revision 1.7
diff -u -r1.6 -r1.7
--- UnaryOpExpr.java 30 Jan 2003 18:46:02 -0000 1.6
+++ UnaryOpExpr.java 15 Oct 2003 21:01:51 -0000 1.7
@@ -85,6 +85,13 @@
return(_left.hasPositionCall());
}
+ /**
+ * Returns true if this expressions contains a call to last()
+ */
+ public boolean hasLastCall() {
+ return(_left.hasLastCall());
+ }
+
public void setParser(Parser parser) {
super.setParser(parser);
_left.setParser(parser);
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]