You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@xalan.apache.org by mu...@apache.org on 2025/09/16 13:32:26 UTC
(xalan-java) branch xalan-j_xslt3.0_mvn updated: committing few improvements to xalan-j's xsl3 implementation of xsl:iterate instruction
This is an automated email from the ASF dual-hosted git repository.
mukulg pushed a commit to branch xalan-j_xslt3.0_mvn
in repository https://gitbox.apache.org/repos/asf/xalan-java.git
The following commit(s) were added to refs/heads/xalan-j_xslt3.0_mvn by this push:
new 5f15c4307 committing few improvements to xalan-j's xsl3 implementation of xsl:iterate instruction
5f15c4307 is described below
commit 5f15c43070d837589157c854ec87ab47bc4de0f5
Author: Mukul Gandhi <ga...@gmail.com>
AuthorDate: Tue Sep 16 19:02:02 2025 +0530
committing few improvements to xalan-j's xsl3 implementation of xsl:iterate instruction
---
.../org/apache/xalan/templates/ElemIterate.java | 303 +++++++++++++--------
.../apache/xalan/templates/ElemIterateBreak.java | 2 +-
.../xalan/templates/ElemIterateNextIteration.java | 9 +-
.../xalan/templates/ElemIterateOnCompletion.java | 58 ++--
.../xalan/templates/ElemTemplateElement.java | 9 +-
.../java/org/apache/xpath/operations/Variable.java | 32 ++-
.../w3c/xslt3/result/attr/_as-test-set_result.xml | 2 +-
.../w3c/xslt3/result/attr/_avt-test-set_result.xml | 2 +-
.../result/attr/_expand-text-test-set_result.xml | 6 +-
.../xslt3/result/attr/_match-test-set_result.xml | 2 +-
.../xslt3/result/attr/_select-test-set_result.xml | 2 +-
.../_xpath-default-namespace-test-set_result.xml | 2 +-
.../result/decl/_attribute-set-test-set_result.xml | 2 +-
.../result/decl/_character-map-test-set_result.xml | 2 +-
.../result/decl/_function-test-set_result.xml | 12 +-
.../result/decl/_variable-test-set_result.xml | 2 +-
.../xslt3/result/expr/_axes-test-set_result.xml | 2 +-
.../result/expr/_castable-test-set_result.xml | 2 +-
.../result/expr/_expression-test-set_result.xml | 2 +-
.../w3c/xslt3/result/expr/_for-test-set_result.xml | 2 +-
.../_higher-order-functions-test-set_result.xml | 2 +-
.../xslt3/result/expr/_math-test-set_result.xml | 2 +-
.../result/expr/_nodetest-test-set_result.xml | 2 +-
.../xslt3/result/expr/_path-test-set_result.xml | 2 +-
.../result/expr/_predicate-test-set_result.xml | 2 +-
.../result/fn/_deep-equal-test-set_result.xml | 2 +-
.../result/fn/_format-number-test-set_result.xml | 2 +-
.../result/fn/_json-to-xml-test-set_result.xml | 2 +-
.../w3c/xslt3/result/fn/_key-test-set_result.xml | 2 +-
.../xslt3/result/fn/_position-test-set_result.xml | 2 +-
.../w3c/xslt3/result/fn/_root-test-set_result.xml | 2 +-
.../insn/_analyze-string-test-set_result.xml | 2 +-
.../insn/_apply-templates-test-set_result.xml | 2 +-
.../result/insn/_attribute-test-set_result.xml | 2 +-
.../result/insn/_call-template-test-set_result.xml | 2 +-
.../xslt3/result/insn/_choose-test-set_result.xml | 2 +-
.../xslt3/result/insn/_copy-test-set_result.xml | 6 +-
.../xslt3/result/insn/_element-test-set_result.xml | 2 +-
.../insn/_for-each-group-test-set_result.xml | 2 +-
.../xslt3/result/insn/_iterate-test-set_result.xml | 104 ++-----
.../result/insn/_sequence-test-set_result.xml | 10 +-
.../xslt3/result/insn/_sort-test-set_result.xml | 2 +-
.../w3c/xslt3/result/insn/_try-test-set_result.xml | 32 +--
.../result/insn/_xsl-document-test-set_result.xml | 4 +-
.../xslt3/result/misc/_regex-test-set_result.xml | 2 +-
.../xslt3/result/type/_boolean-test-set_result.xml | 2 +-
.../xslt3/result/type/_date-test-set_result.xml | 2 +-
.../xslt3/result/type/_node-test-set_result.xml | 2 +-
.../xslt3/result/type/_string-test-set_result.xml | 2 +-
.../result/w3c_xslt3_testsuite_xalan-j_result.xml | 6 +-
50 files changed, 334 insertions(+), 331 deletions(-)
diff --git a/src/main/java/org/apache/xalan/templates/ElemIterate.java b/src/main/java/org/apache/xalan/templates/ElemIterate.java
index 4f0528bd1..e38bcaf01 100644
--- a/src/main/java/org/apache/xalan/templates/ElemIterate.java
+++ b/src/main/java/org/apache/xalan/templates/ElemIterate.java
@@ -331,55 +331,94 @@ public class ElemIterate extends ElemTemplateElement implements ExpressionOwner
ElemIterateOnCompletion xslOnCompletionTemplate = null;
boolean isBreakFromXslContentLoop = false;
-
- for (int idx = 0; idx < itemsToBeProcessed.size(); idx++) {
- XObject resultSeqItem = itemsToBeProcessed.get(idx);
-
- if (resultSeqItem instanceof XMLNodeCursorImpl) {
- resultSeqItem = ((XMLNodeCursorImpl)resultSeqItem).getFresh();
- }
-
- setXPathContextForXslSequenceProcessing(itemsToBeProcessed.size(), idx, resultSeqItem, xctxt);
- for (ElemTemplateElement elemTemplate = this.m_firstChild; elemTemplate != null;
- elemTemplate = elemTemplate.m_nextSibling) {
- if ((elemTemplate instanceof ElemIterateOnCompletion) &&
- (xslOnCompletionTemplate == null)) {
- xslOnCompletionTemplate = (ElemIterateOnCompletion)elemTemplate;
- }
- else if (!transformer.isXslIterateBreakEvaluated()) {
- xctxt.setSAXLocator(elemTemplate);
- transformer.setCurrentElement(elemTemplate);
- elemTemplate.execute(transformer);
- }
- else {
- resetXPathContextForXslSequenceProcessing(resultSeqItem, xctxt);
- isBreakFromXslContentLoop = true;
- break;
- }
- }
-
- if (!isBreakFromXslContentLoop) {
- resetXPathContextForXslSequenceProcessing(resultSeqItem, xctxt);
- }
- else {
- break;
- }
+
+ final int prevContextSize = xctxt.getXPath3ContextSize();
+ final XObject prevCtxtItem = xctxt.getXPath3ContextItem();
+ final int prevCtxtPosition = xctxt.getXPath3ContextPosition();
+
+ try {
+ int inpSeqLength = itemsToBeProcessed.size();
+ if (inpSeqLength == 0) {
+ /**
+ * We do little static type checking (like, variable references which
+ * are not in scope) on xsl:on-completion instruction, even if there
+ * are no input items to be processed.
+ */
+ for (ElemTemplateElement elemTemplate = this.m_firstChild; elemTemplate != null;
+ elemTemplate = elemTemplate.m_nextSibling) {
+ if (elemTemplate instanceof ElemIterateOnCompletion) {
+ xctxt.setXPath3ContextSize(-1);
+ xctxt.setXPath3ContextItem(null);
+ xctxt.setXPath3ContextPosition(-1);
+
+ xslOnCompletionTemplate = (ElemIterateOnCompletion)elemTemplate;
+ transformer.setXslIterateOnCompletionActive(true);
+ xctxt.setSAXLocator(xslOnCompletionTemplate);
+ transformer.setCurrentElement(xslOnCompletionTemplate);
+
+ // This evaluates xsl:on-completion instruction, but doesn't emit
+ // the result to an XSL transformation output.
+ int nodeHandle = transformer.transformToRTF(this);
+
+ transformer.setXslIterateOnCompletionActive(false);
+
+ return;
+ }
+ }
+ }
+
+ for (int idx = 0; idx < inpSeqLength; idx++) {
+ XObject resultSeqItem = itemsToBeProcessed.get(idx);
+
+ if (resultSeqItem instanceof XMLNodeCursorImpl) {
+ resultSeqItem = ((XMLNodeCursorImpl)resultSeqItem).getFresh();
+ }
+
+ setXPathContextForXslSequenceProcessing(inpSeqLength, idx, resultSeqItem, xctxt);
+ for (ElemTemplateElement elemTemplate = this.m_firstChild; elemTemplate != null;
+ elemTemplate = elemTemplate.m_nextSibling) {
+ if ((elemTemplate instanceof ElemIterateOnCompletion) && (xslOnCompletionTemplate == null)) {
+ xslOnCompletionTemplate = (ElemIterateOnCompletion)elemTemplate;
+ }
+ else if (!transformer.isXslIterateBreakEvaluated()) {
+ xctxt.setSAXLocator(elemTemplate);
+ transformer.setCurrentElement(elemTemplate);
+ elemTemplate.execute(transformer);
+ }
+ else {
+ resetXPathContextForXslSequenceProcessing(resultSeqItem, xctxt);
+ isBreakFromXslContentLoop = true;
+ break;
+ }
+ }
+
+ if (!isBreakFromXslContentLoop) {
+ resetXPathContextForXslSequenceProcessing(resultSeqItem, xctxt);
+ }
+ else {
+ break;
+ }
+ }
+
+ if ((xslOnCompletionTemplate != null) && !transformer.isXslIterateBreakEvaluated()) {
+ xctxt.setXPath3ContextSize(-1);
+ xctxt.setXPath3ContextItem(null);
+ xctxt.setXPath3ContextPosition(-1);
+
+ transformer.setXslIterateOnCompletionActive(true);
+ xctxt.setSAXLocator(xslOnCompletionTemplate);
+ transformer.setCurrentElement(xslOnCompletionTemplate);
+ xslOnCompletionTemplate.execute(transformer);
+ transformer.setXslIterateOnCompletionActive(false);
+ }
+
+ transformer.setXslIterateBreakEvaluated(false);
}
-
- // Reset the, XPath context's size, item and position variables
- xctxt.setXPath3ContextSize(-1);
- xctxt.setXPath3ContextItem(null);
- xctxt.setXPath3ContextPosition(-1);
-
- if ((xslOnCompletionTemplate != null) && !transformer.isXslIterateBreakEvaluated()) {
- transformer.setXslIterateOnCompletionActive(true);
- xctxt.setSAXLocator(xslOnCompletionTemplate);
- transformer.setCurrentElement(xslOnCompletionTemplate);
- xslOnCompletionTemplate.execute(transformer);
- transformer.setXslIterateOnCompletionActive(false);
+ finally {
+ xctxt.setXPath3ContextSize(prevContextSize);
+ xctxt.setXPath3ContextItem(prevCtxtItem);
+ xctxt.setXPath3ContextPosition(prevCtxtPosition);
}
-
- transformer.setXslIterateBreakEvaluated(false);
}
else {
// Evaluate xsl:iterate instruction, when value of its "select" attribute evaluates
@@ -454,71 +493,115 @@ public class ElemIterate extends ElemTemplateElement implements ExpressionOwner
}
}
- /**
- * The XSLT 3.0 spec specifies constraints, about what should be the order of XSLT elements
- * xsl:param and xsl:on-completion within the xsl:iterate element. This method ensures that,
- * these XSLT element constraints are verified during an XSLT stylesheet transformation.
- */
+ /**
+ * Method definition to, check XSL 3 spec static constraints for various
+ * XSL elements within xsl:iterate instruction.
+ *
+ * @param xctxt An XPath context object
+ * @throws TransformerException
+ */
private void verifyXslElemIterateChildElementsSequence(XPathContext xctxt)
throws TransformerException {
- List<String> xslElemNamesList = new ArrayList<String>();
-
- for (ElemTemplateElement elemTemplate = this.m_firstChild;
- elemTemplate != null;
- elemTemplate = elemTemplate.m_nextSibling) {
- if (elemTemplate instanceof ElemParam) {
- xslElemNamesList.add(Constants.ELEMNAME_PARAMVARIABLE_STRING);
- }
- else if (elemTemplate instanceof ElemIterateOnCompletion) {
- xslElemNamesList.add(Constants.ELEMNAME_ITERATE_ONCOMPLETION_STRING);
- }
- else {
- xslElemNamesList.add(OTHER_ELEM);
- }
- }
-
- // Get index of XSLT stylesheet specific element(s)'s, first occurrence within the list object
- // 'xslElemNamesList'. If a particular kind of XSLT stylesheet element that is checked, is
- // not present within the list object 'xslElemNamesList', its index is returned as -1.
- int paramIdx = xslElemNamesList.indexOf(Constants.ELEMNAME_PARAMVARIABLE_STRING);
- int onCompletionIdx = xslElemNamesList.indexOf(Constants.ELEMNAME_ITERATE_ONCOMPLETION_STRING);
- int otherElemIdx = xslElemNamesList.indexOf(OTHER_ELEM);
-
- if ((paramIdx != -1) && (onCompletionIdx != -1) && (paramIdx > onCompletionIdx)) {
- throw new TransformerException("XTSE0010 : an xsl:param element must occur before xsl:on-completion "
- + "element.", xctxt.getSAXLocator());
- }
- else if ((paramIdx != -1) && (otherElemIdx != -1) && (paramIdx > otherElemIdx)) {
- throw new TransformerException("XTSE0010 : an xsl:param element must occur before any other element within "
- + "xsl:iterate element.", xctxt.getSAXLocator());
- }
- else if ((paramIdx != -1) && (otherElemIdx != -1) && (onCompletionIdx != -1) && (paramIdx < otherElemIdx) &&
- (otherElemIdx < onCompletionIdx)) {
- throw new TransformerException("XTSE0010 : an xsl:on-completion element must be the first child element of xsl:iterate "
- + "after the xsl:param elements.", xctxt.getSAXLocator());
- }
-
- if (paramIdx != -1) {
- for (ElemTemplateElement elemTemplate = this.m_firstChild; elemTemplate != null;
- elemTemplate = elemTemplate.m_nextSibling) {
- if (elemTemplate instanceof ElemParam) {
- ElemParam paramElem = (ElemParam)elemTemplate;
- QName paramNameVal = paramElem.getName();
- XPath paramSelectXPath = paramElem.getSelect();
- XslIterateParamWithparamData paramWithparamDataObj = new XslIterateParamWithparamData();
- paramWithparamDataObj.setNameVal(paramNameVal);
- paramWithparamDataObj.setSelectVal(paramSelectXPath);
- if (fXslIterateParamWithparamDataList.contains(paramWithparamDataObj)) {
- throw new TransformerException("XTSE0580 : the name of the xsl:param parameter '" + paramNameVal + "' "
- + "is not unique.", xctxt.getSAXLocator());
- }
- else {
- fXslIterateParamWithparamDataList.add(paramWithparamDataObj);
- }
- }
- }
- }
- }
+ List<String> xslElemNamesList = new ArrayList<String>();
+
+ SourceLocator srcLocator = xctxt.getSAXLocator();
+
+ for (ElemTemplateElement elemTemplate = this.m_firstChild; elemTemplate != null; elemTemplate = elemTemplate.m_nextSibling) {
+ if (elemTemplate instanceof ElemParam) {
+ xslElemNamesList.add(Constants.ELEMNAME_PARAMVARIABLE_STRING);
+ }
+ else if (elemTemplate instanceof ElemIterateOnCompletion) {
+ xslElemNamesList.add(Constants.ELEMNAME_ITERATE_ONCOMPLETION_STRING);
+ }
+ else if (elemTemplate instanceof ElemUnknown) {
+ throw new TransformerException("XTSE0010 : An XSL stylesheet element occurs at an incorrect "
+ + "position within xsl:iterate instruction (for e.g, "
+ + "xsl:variable followed by xsl:param).", srcLocator);
+ }
+ else {
+ xslElemNamesList.add(OTHER_ELEM);
+ }
+ }
+
+ verifyXslNextIterAndBreakConstraints(this);
+
+ /**
+ * Get index of XSLT stylesheet specific element(s)'s, first occurrence within the list object
+ * 'xslElemNamesList'. If a particular kind of XSLT stylesheet element that is checked, is
+ * not present within the list object 'xslElemNamesList', its index is returned as -1.
+ */
+ int paramIdx = xslElemNamesList.indexOf(Constants.ELEMNAME_PARAMVARIABLE_STRING);
+ int onCompletionIdx = xslElemNamesList.indexOf(Constants.ELEMNAME_ITERATE_ONCOMPLETION_STRING);
+ int otherElemIdx = xslElemNamesList.indexOf(OTHER_ELEM);
+
+ if ((paramIdx != -1) && (onCompletionIdx != -1) && (paramIdx > onCompletionIdx)) {
+ throw new TransformerException("XTSE0010 : An xsl:param element must occur before xsl:on-completion element.", srcLocator);
+ }
+ else if ((paramIdx != -1) && (otherElemIdx != -1) && (paramIdx > otherElemIdx)) {
+ throw new TransformerException("XTSE0010 : An xsl:param element must occur before any other element within xsl:iterate element.", srcLocator);
+ }
+ else if ((paramIdx != -1) && (otherElemIdx != -1) && (onCompletionIdx != -1) && (paramIdx < otherElemIdx) && (otherElemIdx < onCompletionIdx)) {
+ throw new TransformerException("XTSE0010 : An xsl:on-completion element must be the first child element of xsl:iterate after the xsl:param elements.", srcLocator);
+ }
+
+ if (paramIdx != -1) {
+ for (ElemTemplateElement elemTemplate = this.m_firstChild; elemTemplate != null;
+ elemTemplate = elemTemplate.m_nextSibling) {
+ if (elemTemplate instanceof ElemParam) {
+ ElemParam paramElem = (ElemParam)elemTemplate;
+ QName paramNameVal = paramElem.getName();
+ XPath paramSelectXPath = paramElem.getSelect();
+ XslIterateParamWithparamData paramWithparamDataObj = new XslIterateParamWithparamData();
+ paramWithparamDataObj.setNameVal(paramNameVal);
+ paramWithparamDataObj.setSelectVal(paramSelectXPath);
+ if (fXslIterateParamWithparamDataList.contains(paramWithparamDataObj)) {
+ throw new TransformerException("XTSE0580 : The name of an xsl:param '" + paramNameVal + "' is not unique within xsl:iterate.", srcLocator);
+ }
+ else {
+ fXslIterateParamWithparamDataList.add(paramWithparamDataObj);
+ }
+ }
+ }
+ }
+ }
+
+ /**
+ * Verify within an xsl:iterate instruction, that xsl:next-iteration and xsl:break
+ * instructions are in tail position of xsl:iterate's sequence constructor, and few
+ * other XSL stylesheet constraints as well.
+ *
+ * @param elemTemplateElem An xsl:iterate instruction, or an XSL
+ * instruction within xsl:iterate.
+ * @throws TransformerException
+ */
+ private void verifyXslNextIterAndBreakConstraints(ElemTemplateElement elemTemplateElem) throws TransformerException {
+
+ while (elemTemplateElem != null) {
+ SourceLocator srcLocator = (SourceLocator)elemTemplateElem;
+ if (elemTemplateElem instanceof ElemIterateBreak) {
+ if (!isXslInstructionInTailPositionOfSequenceConstructor(elemTemplateElem)) {
+ throw new TransformerException("XTSE3120 : An xsl:break instruction is not in a tail position of xsl:iterate's sequence constructor.", srcLocator);
+ }
+ else if ((elemTemplateElem.getParentElem() instanceof ElemLiteralResult) || (elemTemplateElem.getParentElem() instanceof ElemElement)) {
+ throw new TransformerException("XTSE3120 : An xsl:break instruction cannot occur as child of XSL element constructor.", srcLocator);
+ }
+ else if (elemTemplateElem.getParentElem() instanceof ElemForEach) {
+ throw new TransformerException("XTSE3120 : An xsl:break instruction cannot occur as child of xsl:for-each instruction.", srcLocator);
+ }
+ }
+ else if ((elemTemplateElem instanceof ElemIterateNextIteration) && !isXslInstructionInTailPositionOfSequenceConstructor(elemTemplateElem)) {
+ throw new TransformerException("XTSE3120 : An next-iteration instruction is not in a tail position of xsl:iterate's sequence constructor.", srcLocator);
+ }
+
+ ElemTemplateElement elem = elemTemplateElem.getFirstChildElem();
+ while (elem != null) {
+ verifyXslNextIterAndBreakConstraints(elem);
+ elem = elem.getNextSiblingElem();
+ }
+
+ elemTemplateElem = elemTemplateElem.getNextSiblingElem();
+ }
+ }
}
diff --git a/src/main/java/org/apache/xalan/templates/ElemIterateBreak.java b/src/main/java/org/apache/xalan/templates/ElemIterateBreak.java
index 31a64ee41..bb635d231 100644
--- a/src/main/java/org/apache/xalan/templates/ElemIterateBreak.java
+++ b/src/main/java/org/apache/xalan/templates/ElemIterateBreak.java
@@ -155,7 +155,7 @@ public class ElemIterateBreak extends ElemTemplateElement implements ExpressionO
throw new TransformerException("XTSE3120 : An xsl:break instruction doesn't have xsl:iterate instruction as ancestor.", xctxt.getSAXLocator());
}
- if (isXslBreakDescendantOfXslIterate && isXslInstructionInTailPositionOfSequenceConstructor(this)) {
+ if (isXslBreakDescendantOfXslIterate) {
transformXslBreakInstruction(transformer);
transformer.setXslIterateBreakEvaluated(true);
}
diff --git a/src/main/java/org/apache/xalan/templates/ElemIterateNextIteration.java b/src/main/java/org/apache/xalan/templates/ElemIterateNextIteration.java
index 4b65d5242..8cf7cfb9b 100644
--- a/src/main/java/org/apache/xalan/templates/ElemIterateNextIteration.java
+++ b/src/main/java/org/apache/xalan/templates/ElemIterateNextIteration.java
@@ -161,14 +161,7 @@ public class ElemIterateNextIteration extends ElemTemplateElement implements Exp
xpathContext.getSAXLocator());
}
- if (isXslInstructionInTailPositionOfSequenceConstructor(this)) {
- elemIterateNextIterationProcessing(transformer);
- }
- else {
- throw new TransformerException("XTSE0010 : An xsl:next-iteration instruction is not in a "
- + "tail position within the sequence constructor of "
- + "an xsl:iterate instruction.", xpathContext.getSAXLocator());
- }
+ elemIterateNextIterationProcessing(transformer);
}
/**
diff --git a/src/main/java/org/apache/xalan/templates/ElemIterateOnCompletion.java b/src/main/java/org/apache/xalan/templates/ElemIterateOnCompletion.java
index b2de0e32f..b7bf5d751 100644
--- a/src/main/java/org/apache/xalan/templates/ElemIterateOnCompletion.java
+++ b/src/main/java/org/apache/xalan/templates/ElemIterateOnCompletion.java
@@ -32,8 +32,6 @@ import com.sun.org.apache.xml.internal.dtm.DTM;
/*
* Implementation of the XSLT 3.0 xsl:on-completion instruction.
*
- * Ref : https://www.w3.org/TR/xslt-30/#element-iterate
- *
* @author Mukul Gandhi <mu...@apache.org>
*
* @xsl.usage advanced
@@ -163,33 +161,41 @@ public class ElemIterateOnCompletion extends ElemTemplateElement implements Expr
if (transformer.isXslIterateOnCompletionActive()) {
XPathContext xctxt = transformer.getXPathContext();
+
+ final int prevCurrentNode = xctxt.getCurrentNode();
+ final int prevCurrExprNode = xctxt.getCurrentExpressionNode();
- // During evaluation of xsl:on-completion instruction, the XPath context item
- // is absent. We make following two changes to an active XPath context to
- // ensure this.
- xctxt.pushCurrentNode(DTM.NULL);
- xctxt.pushCurrentExpressionNode(DTM.NULL);
-
- if (xpathSelectPatternStr != null) {
- SerializationHandler rth = transformer.getResultTreeHandler();
+ try {
+ // During evaluation of xsl:on-completion instruction, an
+ // XPath context item is absent.
+ xctxt.pushCurrentNode(DTM.NULL);
+ xctxt.pushCurrentExpressionNode(DTM.NULL);
- try {
- m_selectExpression.executeCharsToContentHandler(xctxt, rth);
- }
- catch (TransformerException ex) {
- throw ex;
- }
- catch (SAXException ex) {
- throw new TransformerException(ex);
- }
+ if (xpathSelectPatternStr != null) {
+ SerializationHandler rth = transformer.getResultTreeHandler();
+
+ try {
+ m_selectExpression.executeCharsToContentHandler(xctxt, rth);
+ }
+ catch (TransformerException ex) {
+ throw ex;
+ }
+ catch (SAXException ex) {
+ throw new TransformerException(ex);
+ }
+ }
+ else {
+ for (ElemTemplateElement elemTemplate = this.m_firstChild; elemTemplate != null;
+ elemTemplate = elemTemplate.m_nextSibling) {
+ xctxt.setSAXLocator(elemTemplate);
+ transformer.setCurrentElement(elemTemplate);
+ elemTemplate.execute(transformer);
+ }
+ }
}
- else {
- for (ElemTemplateElement elemTemplate = this.m_firstChild; elemTemplate != null;
- elemTemplate = elemTemplate.m_nextSibling) {
- xctxt.setSAXLocator(elemTemplate);
- transformer.setCurrentElement(elemTemplate);
- elemTemplate.execute(transformer);
- }
+ finally {
+ xctxt.pushCurrentNode(prevCurrentNode);
+ xctxt.pushCurrentExpressionNode(prevCurrExprNode);
}
}
}
diff --git a/src/main/java/org/apache/xalan/templates/ElemTemplateElement.java b/src/main/java/org/apache/xalan/templates/ElemTemplateElement.java
index 6a5761a49..8dcdfe631 100644
--- a/src/main/java/org/apache/xalan/templates/ElemTemplateElement.java
+++ b/src/main/java/org/apache/xalan/templates/ElemTemplateElement.java
@@ -1841,14 +1841,11 @@ public class ElemTemplateElement extends UnImplNode
ElemTemplateElement xslInstrParentElement = xslInstr.m_parentNode;
if (xslInstrParentElement instanceof ElemIf) {
- result = isXslInstructionInTailPositionOfSequenceConstructor(
- xslInstrParentElement);
+ result = isXslInstructionInTailPositionOfSequenceConstructor(xslInstrParentElement);
}
- else if ((xslInstrParentElement instanceof ElemWhen) || (xslInstrParentElement
- instanceof ElemOtherwise)) {
+ else if ((xslInstrParentElement instanceof ElemWhen) || (xslInstrParentElement instanceof ElemOtherwise)) {
xslInstrParentElement = xslInstrParentElement.m_parentNode;
- result = isXslInstructionInTailPositionOfSequenceConstructor(
- xslInstrParentElement);
+ result = isXslInstructionInTailPositionOfSequenceConstructor(xslInstrParentElement);
}
}
else {
diff --git a/src/main/java/org/apache/xpath/operations/Variable.java b/src/main/java/org/apache/xpath/operations/Variable.java
index 92d8ae192..6aeadc041 100644
--- a/src/main/java/org/apache/xpath/operations/Variable.java
+++ b/src/main/java/org/apache/xpath/operations/Variable.java
@@ -22,11 +22,13 @@ package org.apache.xpath.operations;
import java.util.Map;
+import javax.xml.transform.SourceLocator;
import javax.xml.transform.TransformerException;
-import org.apache.xalan.res.XSLMessages;
import org.apache.xalan.templates.Constants;
import org.apache.xalan.templates.ElemCatch;
+import org.apache.xalan.templates.ElemIterateOnCompletion;
+import org.apache.xalan.templates.ElemVariable;
import org.apache.xalan.xslt.util.XslTransformData;
import org.apache.xml.utils.QName;
import org.apache.xpath.Expression;
@@ -163,7 +165,8 @@ public class Variable extends Expression implements PathComponent
java.lang.String nsUri = m_qname.getNamespaceURI();
if ((Constants.XSL_ERROR_NAMESACE).equals(nsUri)) {
if (Constants.XSL_ERROR_CODE.equals(varLocalName) || Constants.XSL_ERROR_DESCRIPTION.equals(varLocalName) ||
- Constants.XSL_ERROR_LINE_NUMBER.equals(varLocalName) || Constants.XSL_ERROR_COLUMN_NUMBER.equals(varLocalName)) {
+ Constants.XSL_ERROR_LINE_NUMBER.equals(varLocalName) ||
+ Constants.XSL_ERROR_COLUMN_NUMBER.equals(varLocalName)) {
return;
}
}
@@ -174,15 +177,6 @@ public class Variable extends Expression implements PathComponent
// like function item, "for", "let", "quantified" expressions.
return;
}
-
- if (XslTransformData.m_xpathNodeCombiningExprRhsStrBuff == null) {
- java.lang.String msg = XSLMessages.createXPATHMessage(XPATHErrorResources.ER_COULD_NOT_FIND_VAR,
- new Object[]{m_qname.toString()});
-
- TransformerException te = new TransformerException(msg, this);
-
- throw new org.apache.xml.utils.WrappedRuntimeException(te);
- }
}
@@ -242,6 +236,8 @@ public class Variable extends Expression implements PathComponent
XObject result = null;
+ SourceLocator srcLocator = xctxt.getSAXLocator();
+
Map<QName, XObject> xpathVarMap = xctxt.getXPathVarMap();
XObject varValue = xpathVarMap.get(m_qname);
@@ -257,7 +253,7 @@ public class Variable extends Expression implements PathComponent
}
try {
- if (m_fixUpWasCalled) {
+ if (m_fixUpWasCalled) {
if (m_isGlobal) {
result = xctxt.getVarStack().getGlobalVariable(xctxt, m_index, destructiveOK);
}
@@ -268,11 +264,19 @@ public class Variable extends Expression implements PathComponent
else {
result = xctxt.getVarStack().getVariableOrParam(xctxt, m_qname);
}
+
+ ElemVariable elemVariable = this.getElemVariable();
+ ExpressionNode exprNode = getExpressionOwner();
+ if ((elemVariable == null) && (exprNode instanceof ElemIterateOnCompletion)) {
+ throw new javax.xml.transform.TransformerException("XPST0008 : Variable $" + m_qname.toString() + " "
+ + "accessed before it is bound!", srcLocator);
+ }
}
catch (javax.xml.transform.TransformerException ex) {
java.lang.String exceptionMesg = ex.getMessage();
if ((m_qname == null) || ((exceptionMesg != null) && (exceptionMesg.startsWith("XTDE0050") || exceptionMesg.startsWith("XPTY")
- || exceptionMesg.startsWith("FOUT")))) {
+ || exceptionMesg.startsWith("FOUT")
+ || exceptionMesg.startsWith("XPST0008")))) {
throw ex;
}
else if (XslTransformData.m_xpathNodeCombiningExprRhsStrBuff != null) {
@@ -294,7 +298,7 @@ public class Variable extends Expression implements PathComponent
}
catch (TransformerException ex1) {
throw new javax.xml.transform.TransformerException("Variable $" + m_qname.toString() + " "
- + "accessed before it is bound!.");
+ + "accessed before it is bound!", srcLocator);
}
}
}
diff --git a/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/attr/_as-test-set_result.xml b/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/attr/_as-test-set_result.xml
index a05b523c2..3bfc070d6 100644
--- a/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/attr/_as-test-set_result.xml
+++ b/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/attr/_as-test-set_result.xml
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="UTF-8"?><testrun dateTime="2025-09-10T10:58:43Z" fail="31" name="as" pass="73" skipped="4" statusUnknown="1" totalRun="105">
+<?xml version="1.0" encoding="UTF-8"?><testrun dateTime="2025-09-16T13:24:39Z" fail="31" name="as" pass="73" skipped="4" statusUnknown="1" totalRun="105">
<testResult status="pass" testName="as-0101"/>
<testResult status="pass" testName="as-0102"/>
<testResult status="pass" testName="as-0103"/>
diff --git a/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/attr/_avt-test-set_result.xml b/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/attr/_avt-test-set_result.xml
index 0883ff4c8..96357db12 100644
--- a/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/attr/_avt-test-set_result.xml
+++ b/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/attr/_avt-test-set_result.xml
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="UTF-8"?><testrun dateTime="2025-09-10T10:58:47Z" fail="15" name="avt" pass="20" skipped="0" statusUnknown="0" totalRun="35">
+<?xml version="1.0" encoding="UTF-8"?><testrun dateTime="2025-09-16T13:24:39Z" fail="15" name="avt" pass="20" skipped="0" statusUnknown="0" totalRun="35">
<testResult status="pass" testName="avt-0101"/>
<testResult status="fail" testName="avt-0201"/>
<testResult status="pass" testName="avt-0202"/>
diff --git a/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/attr/_expand-text-test-set_result.xml b/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/attr/_expand-text-test-set_result.xml
index 3ed77aaa9..9365bf9cd 100644
--- a/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/attr/_expand-text-test-set_result.xml
+++ b/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/attr/_expand-text-test-set_result.xml
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="UTF-8"?><testrun dateTime="2025-09-10T11:00:00Z" fail="28" name="expand-text" pass="34" skipped="0" statusUnknown="0" totalRun="62">
+<?xml version="1.0" encoding="UTF-8"?><testrun dateTime="2025-09-16T13:25:25Z" fail="28" name="expand-text" pass="34" skipped="0" statusUnknown="0" totalRun="62">
<testResult status="pass" testName="cvt-001"/>
<testResult status="pass" testName="cvt-002"/>
<testResult status="pass" testName="cvt-003"/>
@@ -37,7 +37,7 @@
<testResult status="pass" testName="cvt-024"/>
<testResult status="fail" testName="cvt-025">
<outResult>
- <errTrace>Variable $d accessed before it is bound!.</errTrace>
+ <errTrace>Variable $d accessed before it is bound!</errTrace>
<errTrace>java.lang.NullPointerException</errTrace>
</outResult>
</testResult>
@@ -53,7 +53,7 @@
<testResult status="pass" testName="cvt-031"/>
<testResult status="fail" testName="cvt-032">
<outResult>
- <errTrace>Variable $stylesheet.attributes accessed before it is bound!.</errTrace>
+ <errTrace>Variable $stylesheet.attributes accessed before it is bound!</errTrace>
</outResult>
</testResult>
<testResult status="fail" testName="cvt-033">
diff --git a/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/attr/_match-test-set_result.xml b/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/attr/_match-test-set_result.xml
index 87197de6e..8d66403f6 100644
--- a/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/attr/_match-test-set_result.xml
+++ b/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/attr/_match-test-set_result.xml
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="UTF-8"?><testrun dateTime="2025-09-10T10:58:48Z" fail="59" name="match" pass="69" skipped="8" statusUnknown="1" totalRun="129">
+<?xml version="1.0" encoding="UTF-8"?><testrun dateTime="2025-09-16T13:24:40Z" fail="59" name="match" pass="69" skipped="8" statusUnknown="1" totalRun="129">
<testResult status="pass" testName="match-001"/>
<testResult status="pass" testName="match-002"/>
<testResult status="pass" testName="match-003"/>
diff --git a/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/attr/_select-test-set_result.xml b/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/attr/_select-test-set_result.xml
index 5e43f72df..8e5730ac0 100644
--- a/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/attr/_select-test-set_result.xml
+++ b/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/attr/_select-test-set_result.xml
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="UTF-8"?><testrun dateTime="2025-09-10T10:58:51Z" fail="5" name="select" pass="19" skipped="0" statusUnknown="1" totalRun="25">
+<?xml version="1.0" encoding="UTF-8"?><testrun dateTime="2025-09-16T13:24:40Z" fail="5" name="select" pass="19" skipped="0" statusUnknown="1" totalRun="25">
<testResult status="pass" testName="select-0101"/>
<testResult status="pass" testName="select-0102"/>
<testResult status="pass" testName="select-0201"/>
diff --git a/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/attr/_xpath-default-namespace-test-set_result.xml b/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/attr/_xpath-default-namespace-test-set_result.xml
index 770fb0a6c..61268b0a0 100644
--- a/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/attr/_xpath-default-namespace-test-set_result.xml
+++ b/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/attr/_xpath-default-namespace-test-set_result.xml
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="UTF-8"?><testrun dateTime="2025-09-10T11:00:00Z" fail="15" name="xpath-default-namespace" pass="11" skipped="0" statusUnknown="0" totalRun="26">
+<?xml version="1.0" encoding="UTF-8"?><testrun dateTime="2025-09-16T13:25:25Z" fail="15" name="xpath-default-namespace" pass="11" skipped="0" statusUnknown="0" totalRun="26">
<testResult status="pass" testName="xpath-default-namespace-0101"/>
<testResult status="pass" testName="xpath-default-namespace-0102"/>
<testResult status="pass" testName="xpath-default-namespace-0103"/>
diff --git a/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/decl/_attribute-set-test-set_result.xml b/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/decl/_attribute-set-test-set_result.xml
index 4a66e14fe..839931418 100644
--- a/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/decl/_attribute-set-test-set_result.xml
+++ b/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/decl/_attribute-set-test-set_result.xml
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="UTF-8"?><testrun dateTime="2025-09-10T10:59:26Z" fail="8" name="attribute-set" pass="41" skipped="1" statusUnknown="0" totalRun="49">
+<?xml version="1.0" encoding="UTF-8"?><testrun dateTime="2025-09-16T13:25:18Z" fail="8" name="attribute-set" pass="41" skipped="1" statusUnknown="0" totalRun="49">
<testResult status="pass" testName="attribute-set-0101"/>
<testResult status="fail" testName="attribute-set-0102">
<outResult/>
diff --git a/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/decl/_character-map-test-set_result.xml b/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/decl/_character-map-test-set_result.xml
index 94b064762..9515ba3a1 100644
--- a/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/decl/_character-map-test-set_result.xml
+++ b/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/decl/_character-map-test-set_result.xml
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="UTF-8"?><testrun dateTime="2025-09-10T10:59:26Z" fail="12" name="character-map" pass="15" skipped="1" statusUnknown="1" totalRun="28">
+<?xml version="1.0" encoding="UTF-8"?><testrun dateTime="2025-09-16T13:25:18Z" fail="12" name="character-map" pass="15" skipped="1" statusUnknown="1" totalRun="28">
<testResult status="pass" testName="character-map-001"/>
<testResult status="pass" testName="character-map-002"/>
<testResult status="pass" testName="character-map-003"/>
diff --git a/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/decl/_function-test-set_result.xml b/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/decl/_function-test-set_result.xml
index 12b884383..6a3b56f02 100644
--- a/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/decl/_function-test-set_result.xml
+++ b/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/decl/_function-test-set_result.xml
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="UTF-8"?><testrun dateTime="2025-09-10T10:59:07Z" fail="32" name="function" pass="56" skipped="22" statusUnknown="0" totalRun="88">
+<?xml version="1.0" encoding="UTF-8"?><testrun dateTime="2025-09-16T13:24:46Z" fail="32" name="function" pass="56" skipped="22" statusUnknown="0" totalRun="88">
<testResult status="fail" testName="function-0001">
<outResult/>
</testResult>
@@ -48,15 +48,7 @@
<testResult status="pass" testName="function-0602"/>
<testResult status="fail" testName="function-0701">
<outResult>
- <errTrace>XPST0008 : Could not find variable with the name of square-17</errTrace>
- <errTrace>XPST0008 : Could not find variable with the name of square-15</errTrace>
- <errTrace>XPST0008 : Could not find variable with the name of square-10</errTrace>
- <errTrace>XPST0008 : Could not find variable with the name of square-6</errTrace>
- <errTrace>XPST0008 : Could not find variable with the name of square-17</errTrace>
- <errTrace>XPST0008 : Could not find variable with the name of square-15</errTrace>
- <errTrace>XPST0008 : Could not find variable with the name of square-10</errTrace>
- <errTrace>XPST0008 : Could not find variable with the name of square-6</errTrace>
- <errTrace>java.lang.NullPointerException</errTrace>
+ <errTrace>java.lang.NumberFormatException</errTrace>
</outResult>
</testResult>
<testResult status="fail" testName="function-0901"/>
diff --git a/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/decl/_variable-test-set_result.xml b/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/decl/_variable-test-set_result.xml
index f7e16168b..8d1a20822 100644
--- a/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/decl/_variable-test-set_result.xml
+++ b/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/decl/_variable-test-set_result.xml
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="UTF-8"?><testrun dateTime="2025-09-10T10:58:40Z" fail="3" name="variable" pass="16" skipped="0" statusUnknown="1" totalRun="20">
+<?xml version="1.0" encoding="UTF-8"?><testrun dateTime="2025-09-16T13:24:37Z" fail="3" name="variable" pass="16" skipped="0" statusUnknown="1" totalRun="20">
<testResult status="pass" testName="variable-0101"/>
<testResult status="pass" testName="variable-0102"/>
<testResult status="pass" testName="variable-0103"/>
diff --git a/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/expr/_axes-test-set_result.xml b/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/expr/_axes-test-set_result.xml
index 750770197..f6cd6464a 100644
--- a/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/expr/_axes-test-set_result.xml
+++ b/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/expr/_axes-test-set_result.xml
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="UTF-8"?><testrun dateTime="2025-09-10T10:59:27Z" fail="18" name="axes" pass="183" skipped="0" statusUnknown="0" totalRun="201">
+<?xml version="1.0" encoding="UTF-8"?><testrun dateTime="2025-09-16T13:25:18Z" fail="18" name="axes" pass="183" skipped="0" statusUnknown="0" totalRun="201">
<testResult status="pass" testName="axes-001"/>
<testResult status="pass" testName="axes-002"/>
<testResult status="pass" testName="axes-003"/>
diff --git a/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/expr/_castable-test-set_result.xml b/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/expr/_castable-test-set_result.xml
index 61ee45755..da57d648b 100644
--- a/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/expr/_castable-test-set_result.xml
+++ b/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/expr/_castable-test-set_result.xml
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="UTF-8"?><testrun dateTime="2025-09-10T10:59:32Z" fail="5" name="castable" pass="4" skipped="0" statusUnknown="0" totalRun="9">
+<?xml version="1.0" encoding="UTF-8"?><testrun dateTime="2025-09-16T13:25:19Z" fail="5" name="castable" pass="4" skipped="0" statusUnknown="0" totalRun="9">
<testResult status="pass" testName="castable-001"/>
<testResult status="pass" testName="castable-002"/>
<testResult status="pass" testName="castable-003"/>
diff --git a/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/expr/_expression-test-set_result.xml b/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/expr/_expression-test-set_result.xml
index 3fcd67457..937173c64 100644
--- a/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/expr/_expression-test-set_result.xml
+++ b/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/expr/_expression-test-set_result.xml
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="UTF-8"?><testrun dateTime="2025-09-10T10:59:32Z" fail="0" name="expression" pass="9" skipped="0" statusUnknown="1" totalRun="10">
+<?xml version="1.0" encoding="UTF-8"?><testrun dateTime="2025-09-16T13:25:19Z" fail="0" name="expression" pass="9" skipped="0" statusUnknown="1" totalRun="10">
<testResult status="pass" testName="expression-0101"/>
<testResult status="pass" testName="expression-0301"/>
<testResult status="pass" testName="expression-0302"/>
diff --git a/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/expr/_for-test-set_result.xml b/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/expr/_for-test-set_result.xml
index 0e3595e57..3b2192546 100644
--- a/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/expr/_for-test-set_result.xml
+++ b/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/expr/_for-test-set_result.xml
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="UTF-8"?><testrun dateTime="2025-09-10T10:59:33Z" fail="2" name="for" pass="1" skipped="0" statusUnknown="1" totalRun="4">
+<?xml version="1.0" encoding="UTF-8"?><testrun dateTime="2025-09-16T13:25:19Z" fail="2" name="for" pass="1" skipped="0" statusUnknown="1" totalRun="4">
<testResult status="fail" testName="for-001"/>
<testResult status="fail" testName="for-002"/>
<testResult status="pass" testName="for-003"/>
diff --git a/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/expr/_higher-order-functions-test-set_result.xml b/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/expr/_higher-order-functions-test-set_result.xml
index 7ac635e21..bd466a257 100644
--- a/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/expr/_higher-order-functions-test-set_result.xml
+++ b/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/expr/_higher-order-functions-test-set_result.xml
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="UTF-8"?><testrun dateTime="2025-09-10T10:59:38Z" fail="48" name="higher-order-functions" pass="23" skipped="5" statusUnknown="0" totalRun="71">
+<?xml version="1.0" encoding="UTF-8"?><testrun dateTime="2025-09-16T13:25:21Z" fail="48" name="higher-order-functions" pass="23" skipped="5" statusUnknown="0" totalRun="71">
<testResult status="pass" testName="higher-order-functions-001"/>
<testResult status="pass" testName="higher-order-functions-002"/>
<testResult status="pass" testName="higher-order-functions-003"/>
diff --git a/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/expr/_math-test-set_result.xml b/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/expr/_math-test-set_result.xml
index 073034cfe..9fc605b21 100644
--- a/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/expr/_math-test-set_result.xml
+++ b/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/expr/_math-test-set_result.xml
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="UTF-8"?><testrun dateTime="2025-09-10T10:59:34Z" fail="25" name="math" pass="124" skipped="0" statusUnknown="1" totalRun="150">
+<?xml version="1.0" encoding="UTF-8"?><testrun dateTime="2025-09-16T13:25:21Z" fail="25" name="math" pass="124" skipped="0" statusUnknown="1" totalRun="150">
<testResult status="pass" testName="math-0101"/>
<testResult status="pass" testName="math-3315"/>
<testResult status="pass" testName="math-0101"/>
diff --git a/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/expr/_nodetest-test-set_result.xml b/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/expr/_nodetest-test-set_result.xml
index 7a667f36a..940f1bdd7 100644
--- a/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/expr/_nodetest-test-set_result.xml
+++ b/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/expr/_nodetest-test-set_result.xml
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="UTF-8"?><testrun dateTime="2025-09-10T10:59:37Z" fail="36" name="nodetest" pass="2" skipped="0" statusUnknown="0" totalRun="38">
+<?xml version="1.0" encoding="UTF-8"?><testrun dateTime="2025-09-16T13:25:21Z" fail="36" name="nodetest" pass="2" skipped="0" statusUnknown="0" totalRun="38">
<testResult status="pass" testName="nodetest-001"/>
<testResult status="pass" testName="nodetest-002"/>
<testResult status="fail" testName="nodetest-003">
diff --git a/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/expr/_path-test-set_result.xml b/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/expr/_path-test-set_result.xml
index f2372adf3..59edcc1ed 100644
--- a/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/expr/_path-test-set_result.xml
+++ b/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/expr/_path-test-set_result.xml
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="UTF-8"?><testrun dateTime="2025-09-10T10:59:38Z" fail="3" name="path" pass="7" skipped="0" statusUnknown="0" totalRun="10">
+<?xml version="1.0" encoding="UTF-8"?><testrun dateTime="2025-09-16T13:25:21Z" fail="3" name="path" pass="7" skipped="0" statusUnknown="0" totalRun="10">
<testResult status="pass" testName="path-001"/>
<testResult status="pass" testName="path-002"/>
<testResult status="pass" testName="path-003"/>
diff --git a/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/expr/_predicate-test-set_result.xml b/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/expr/_predicate-test-set_result.xml
index a80db9ca5..4f002be0a 100644
--- a/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/expr/_predicate-test-set_result.xml
+++ b/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/expr/_predicate-test-set_result.xml
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="UTF-8"?><testrun dateTime="2025-09-10T10:59:39Z" fail="7" name="predicate" pass="50" skipped="0" statusUnknown="0" totalRun="57">
+<?xml version="1.0" encoding="UTF-8"?><testrun dateTime="2025-09-16T13:25:22Z" fail="7" name="predicate" pass="50" skipped="0" statusUnknown="0" totalRun="57">
<testResult status="fail" testName="predicate-001"/>
<testResult status="fail" testName="predicate-002"/>
<testResult status="fail" testName="predicate-003"/>
diff --git a/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/fn/_deep-equal-test-set_result.xml b/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/fn/_deep-equal-test-set_result.xml
index 8d3a064ab..f16732433 100644
--- a/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/fn/_deep-equal-test-set_result.xml
+++ b/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/fn/_deep-equal-test-set_result.xml
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="UTF-8"?><testrun dateTime="2025-09-10T10:59:49Z" fail="0" name="deep-equal" pass="2" skipped="0" statusUnknown="0" totalRun="2">
+<?xml version="1.0" encoding="UTF-8"?><testrun dateTime="2025-09-16T13:25:24Z" fail="0" name="deep-equal" pass="2" skipped="0" statusUnknown="0" totalRun="2">
<testResult status="pass" testName="deep-equal-001"/>
<testResult status="pass" testName="deep-equal-002"/>
</testrun>
diff --git a/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/fn/_format-number-test-set_result.xml b/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/fn/_format-number-test-set_result.xml
index 701cd8aeb..8f17b25b1 100644
--- a/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/fn/_format-number-test-set_result.xml
+++ b/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/fn/_format-number-test-set_result.xml
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="UTF-8"?><testrun dateTime="2025-09-10T10:59:57Z" fail="32" name="format-number" pass="38" skipped="4" statusUnknown="0" totalRun="70">
+<?xml version="1.0" encoding="UTF-8"?><testrun dateTime="2025-09-16T13:25:25Z" fail="32" name="format-number" pass="38" skipped="4" statusUnknown="0" totalRun="70">
<testResult status="fail" testName="format-number-001"/>
<testResult status="fail" testName="format-number-002"/>
<testResult status="fail" testName="format-number-003"/>
diff --git a/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/fn/_json-to-xml-test-set_result.xml b/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/fn/_json-to-xml-test-set_result.xml
index 13bba875c..d43a80366 100644
--- a/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/fn/_json-to-xml-test-set_result.xml
+++ b/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/fn/_json-to-xml-test-set_result.xml
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="UTF-8"?><testrun dateTime="2025-09-10T11:00:02Z" fail="8" name="json-to-xml" pass="24" skipped="0" statusUnknown="1" totalRun="33">
+<?xml version="1.0" encoding="UTF-8"?><testrun dateTime="2025-09-16T13:25:25Z" fail="8" name="json-to-xml" pass="24" skipped="0" statusUnknown="1" totalRun="33">
<testResult status="pass" testName="json-to-xml-001"/>
<testResult status="pass" testName="json-to-xml-002"/>
<testResult status="pass" testName="json-to-xml-003"/>
diff --git a/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/fn/_key-test-set_result.xml b/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/fn/_key-test-set_result.xml
index 590eb8256..b3f97340d 100644
--- a/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/fn/_key-test-set_result.xml
+++ b/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/fn/_key-test-set_result.xml
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="UTF-8"?><testrun dateTime="2025-09-10T10:59:54Z" fail="29" name="key" pass="54" skipped="0" statusUnknown="0" totalRun="83">
+<?xml version="1.0" encoding="UTF-8"?><testrun dateTime="2025-09-16T13:25:25Z" fail="29" name="key" pass="54" skipped="0" statusUnknown="0" totalRun="83">
<testResult status="pass" testName="key-001"/>
<testResult status="fail" testName="key-002">
<outResult/>
diff --git a/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/fn/_position-test-set_result.xml b/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/fn/_position-test-set_result.xml
index 4fab364cf..6747f3b66 100644
--- a/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/fn/_position-test-set_result.xml
+++ b/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/fn/_position-test-set_result.xml
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="UTF-8"?><testrun dateTime="2025-09-10T10:59:49Z" fail="11" name="position" pass="126" skipped="0" statusUnknown="1" totalRun="138">
+<?xml version="1.0" encoding="UTF-8"?><testrun dateTime="2025-09-16T13:25:24Z" fail="11" name="position" pass="126" skipped="0" statusUnknown="1" totalRun="138">
<testResult status="pass" testName="position-0101"/>
<testResult status="fail" testName="position-0102"/>
<testResult status="fail" testName="position-0103"/>
diff --git a/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/fn/_root-test-set_result.xml b/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/fn/_root-test-set_result.xml
index e4217a5c8..d5dce1d82 100644
--- a/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/fn/_root-test-set_result.xml
+++ b/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/fn/_root-test-set_result.xml
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="UTF-8"?><testrun dateTime="2025-09-10T10:59:54Z" fail="3" name="root" pass="7" skipped="0" statusUnknown="0" totalRun="10">
+<?xml version="1.0" encoding="UTF-8"?><testrun dateTime="2025-09-16T13:25:25Z" fail="3" name="root" pass="7" skipped="0" statusUnknown="0" totalRun="10">
<testResult status="pass" testName="root-0101"/>
<testResult status="fail" testName="root-0102"/>
<testResult status="pass" testName="root-0103"/>
diff --git a/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/insn/_analyze-string-test-set_result.xml b/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/insn/_analyze-string-test-set_result.xml
index eb0e6d7ce..185cb1cb3 100644
--- a/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/insn/_analyze-string-test-set_result.xml
+++ b/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/insn/_analyze-string-test-set_result.xml
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="UTF-8"?><testrun dateTime="2025-09-10T10:59:52Z" fail="14" name="analyze-string" pass="39" skipped="5" statusUnknown="0" totalRun="53">
+<?xml version="1.0" encoding="UTF-8"?><testrun dateTime="2025-09-16T13:25:24Z" fail="14" name="analyze-string" pass="39" skipped="5" statusUnknown="0" totalRun="53">
<testResult status="pass" testName="analyze-string-001"/>
<testResult status="pass" testName="analyze-string-002"/>
<testResult status="pass" testName="analyze-string-003"/>
diff --git a/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/insn/_apply-templates-test-set_result.xml b/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/insn/_apply-templates-test-set_result.xml
index bd95e7290..007d0b2b5 100644
--- a/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/insn/_apply-templates-test-set_result.xml
+++ b/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/insn/_apply-templates-test-set_result.xml
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="UTF-8"?><testrun dateTime="2025-09-10T10:58:52Z" fail="25" name="apply-templates" pass="21" skipped="4" statusUnknown="0" totalRun="46">
+<?xml version="1.0" encoding="UTF-8"?><testrun dateTime="2025-09-16T13:24:40Z" fail="25" name="apply-templates" pass="21" skipped="4" statusUnknown="0" totalRun="46">
<testResult status="fail" testName="apply-templates-001">
<outResult><?xml version="1.0" encoding="UTF-8"?>
diff --git a/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/insn/_attribute-test-set_result.xml b/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/insn/_attribute-test-set_result.xml
index 86977332c..ef6852382 100644
--- a/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/insn/_attribute-test-set_result.xml
+++ b/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/insn/_attribute-test-set_result.xml
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="UTF-8"?><testrun dateTime="2025-09-10T10:58:56Z" fail="21" name="attribute" pass="8" skipped="0" statusUnknown="1" totalRun="30">
+<?xml version="1.0" encoding="UTF-8"?><testrun dateTime="2025-09-16T13:24:41Z" fail="21" name="attribute" pass="8" skipped="0" statusUnknown="1" totalRun="30">
<testResult status="fail" testName="attribute-0001"/>
<testResult status="fail" testName="attribute-0002"/>
<testResult status="fail" testName="attribute-0003"/>
diff --git a/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/insn/_call-template-test-set_result.xml b/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/insn/_call-template-test-set_result.xml
index 6ac7a0076..e221e2c9e 100644
--- a/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/insn/_call-template-test-set_result.xml
+++ b/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/insn/_call-template-test-set_result.xml
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="UTF-8"?><testrun dateTime="2025-09-10T10:58:57Z" fail="14" name="call-template" pass="27" skipped="1" statusUnknown="0" totalRun="41">
+<?xml version="1.0" encoding="UTF-8"?><testrun dateTime="2025-09-16T13:24:42Z" fail="14" name="call-template" pass="27" skipped="1" statusUnknown="0" totalRun="41">
<testResult status="fail" testName="call-template-0001">
<outResult><?xml version="1.0" encoding="UTF-8"?><out/></outResult>
</testResult>
diff --git a/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/insn/_choose-test-set_result.xml b/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/insn/_choose-test-set_result.xml
index 4ad7099cd..52c424032 100644
--- a/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/insn/_choose-test-set_result.xml
+++ b/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/insn/_choose-test-set_result.xml
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="UTF-8"?><testrun dateTime="2025-09-10T10:58:58Z" fail="3" name="choose" pass="20" skipped="0" statusUnknown="1" totalRun="24">
+<?xml version="1.0" encoding="UTF-8"?><testrun dateTime="2025-09-16T13:24:42Z" fail="3" name="choose" pass="20" skipped="0" statusUnknown="1" totalRun="24">
<testResult status="pass" testName="choose-0101"/>
<testResult status="pass" testName="choose-0102"/>
<testResult status="fail" testName="choose-0103"/>
diff --git a/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/insn/_copy-test-set_result.xml b/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/insn/_copy-test-set_result.xml
index 124855352..021e7b047 100644
--- a/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/insn/_copy-test-set_result.xml
+++ b/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/insn/_copy-test-set_result.xml
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="UTF-8"?><testrun dateTime="2025-09-10T10:59:00Z" fail="31" name="copy" pass="28" skipped="0" statusUnknown="1" totalRun="60">
+<?xml version="1.0" encoding="UTF-8"?><testrun dateTime="2025-09-16T13:24:43Z" fail="31" name="copy" pass="28" skipped="0" statusUnknown="1" totalRun="60">
<testResult status="pass" testName="copy-0101"/>
<testResult status="pass" testName="copy-0102"/>
<testResult status="pass" testName="copy-0103"/>
@@ -100,7 +100,7 @@
<outResult>
<errTrace>XTSE0010 : an instruction xsl:where-populated is not known to the XSLT processor.</errTrace>
<errTrace>XPST0003 : An XPath expression /out/comment() = "Boo!" has syntax error. Unknown op code : 0.</errTrace>
- <errTrace>java.lang.ArrayIndexOutOfBoundsException</errTrace>
+ <errTrace>java.lang.ArrayIndexOutOfBoundsException: -1</errTrace>
</outResult>
</testResult>
<testResult status="fail" testName="copy-1214">
@@ -112,7 +112,7 @@
<outResult>
<errTrace>XTTE0570 : The xs:string value 'Boo!' cannot be cast to a type node().</errTrace>
<errTrace>XPST0003 : An XPath expression /out/text() = "Boo!" has syntax error. Unknown op code : 0.</errTrace>
- <errTrace>java.lang.ArrayIndexOutOfBoundsException</errTrace>
+ <errTrace>java.lang.ArrayIndexOutOfBoundsException: -1</errTrace>
</outResult>
</testResult>
<testResult testName="copy-1216"/>
diff --git a/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/insn/_element-test-set_result.xml b/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/insn/_element-test-set_result.xml
index 3be841396..0e625e816 100644
--- a/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/insn/_element-test-set_result.xml
+++ b/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/insn/_element-test-set_result.xml
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="UTF-8"?><testrun dateTime="2025-09-10T10:59:04Z" fail="18" name="element" pass="11" skipped="0" statusUnknown="0" totalRun="29">
+<?xml version="1.0" encoding="UTF-8"?><testrun dateTime="2025-09-16T13:24:46Z" fail="18" name="element" pass="11" skipped="0" statusUnknown="0" totalRun="29">
<testResult status="fail" testName="element-0001">
<outResult/>
</testResult>
diff --git a/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/insn/_for-each-group-test-set_result.xml b/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/insn/_for-each-group-test-set_result.xml
index 6dbaadb57..4f2e7c725 100644
--- a/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/insn/_for-each-group-test-set_result.xml
+++ b/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/insn/_for-each-group-test-set_result.xml
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="UTF-8"?><testrun dateTime="2025-09-10T10:58:53Z" fail="24" name="for-each-group" pass="49" skipped="4" statusUnknown="1" totalRun="74">
+<?xml version="1.0" encoding="UTF-8"?><testrun dateTime="2025-09-16T13:24:40Z" fail="24" name="for-each-group" pass="49" skipped="4" statusUnknown="1" totalRun="74">
<testResult status="pass" testName="for-each-group-001"/>
<testResult status="skipped" testName="for-each-group-002a" xsltVersion="xslt 2.0 only"/>
<testResult status="pass" testName="for-each-group-002"/>
diff --git a/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/insn/_iterate-test-set_result.xml b/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/insn/_iterate-test-set_result.xml
index 22af001dc..82b2fbdc9 100644
--- a/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/insn/_iterate-test-set_result.xml
+++ b/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/insn/_iterate-test-set_result.xml
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="UTF-8"?><testrun dateTime="2025-09-10T10:59:02Z" fail="25" name="iterate" pass="19" skipped="0" statusUnknown="0" totalRun="44">
+<?xml version="1.0" encoding="UTF-8"?><testrun dateTime="2025-09-16T13:24:44Z" fail="22" name="iterate" pass="22" skipped="0" statusUnknown="0" totalRun="44">
<testResult status="pass" testName="iterate-001"/>
<testResult status="pass" testName="iterate-002"/>
<testResult status="pass" testName="iterate-003"/>
@@ -9,80 +9,10 @@
<errTrace>XTSE3120 : An xsl:break instruction doesn't have xsl:iterate instruction as ancestor.</errTrace>
</outResult>
</testResult>
- <testResult status="fail" testName="iterate-008">
- <outResult>
- <errTrace>org.apache.xml.utils.WrappedRuntimeException: XPST0008 : Could not find variable with the name of basketCost</errTrace>
- </outResult>
- </testResult>
- <testResult status="fail" testName="iterate-009">
- <outResult><?xml version="1.0" encoding="UTF-8"?><out xmlns:xs="http://www.w3.org/2001/XMLSchema">
-<item cost="0">
-<TITLE>Pride and Prejudice</TITLE>
-</item>
-<item cost="0">
-<TITLE>Wuthering Heights</TITLE>
-</item>
-<item cost="0">
-<TITLE>Tess of the d'Urbervilles</TITLE>
-</item>
-<item cost="0">
-<TITLE>Jude the Obscure</TITLE>
-</item>
-<item cost="0">
-<TITLE>The Big Over Easy</TITLE>
-</item>
-<item cost="0">
-<TITLE>The Eyre Affair</TITLE>
-</item>
-</out>
-</outResult>
- </testResult>
- <testResult status="fail" testName="iterate-010">
- <outResult><?xml version="1.0" encoding="UTF-8"?><out xmlns:xs="http://www.w3.org/2001/XMLSchema">
-<item cost="0">
-<TITLE>Pride and Prejudice</TITLE>
-</item>
-<item cost="0">
-<TITLE>Wuthering Heights</TITLE>
-</item>
-<item cost="0">
-<TITLE>Tess of the d'Urbervilles</TITLE>
-</item>
-<item cost="0">
-<TITLE>Jude the Obscure</TITLE>
-</item>
-<item cost="0">
-<TITLE>The Big Over Easy</TITLE>
-</item>
-<item cost="0">
-<TITLE>The Eyre Affair</TITLE>
-</item>
-</out>
-</outResult>
- </testResult>
- <testResult status="fail" testName="iterate-011">
- <outResult><?xml version="1.0" encoding="UTF-8"?><out xmlns:xs="http://www.w3.org/2001/XMLSchema">
-<item cost="0">
-<TITLE>Pride and Prejudice</TITLE>
-</item>
-<item cost="0">
-<TITLE>Wuthering Heights</TITLE>
-</item>
-<item cost="0">
-<TITLE>Tess of the d'Urbervilles</TITLE>
-</item>
-<item cost="0">
-<TITLE>Jude the Obscure</TITLE>
-</item>
-<item cost="0">
-<TITLE>The Big Over Easy</TITLE>
-</item>
-<item cost="0">
-<TITLE>The Eyre Affair</TITLE>
-</item>
-</out>
-</outResult>
- </testResult>
+ <testResult status="pass" testName="iterate-008"/>
+ <testResult status="pass" testName="iterate-009"/>
+ <testResult status="pass" testName="iterate-010"/>
+ <testResult status="pass" testName="iterate-011"/>
<testResult status="pass" testName="iterate-012"/>
<testResult status="pass" testName="iterate-013"/>
<testResult status="pass" testName="iterate-014"/>
@@ -94,10 +24,14 @@
<testResult status="fail" testName="iterate-020"/>
<testResult status="fail" testName="iterate-021"/>
<testResult status="pass" testName="iterate-022"/>
- <testResult status="pass" testName="iterate-023"/>
+ <testResult status="fail" testName="iterate-023">
+ <outResult>
+ <errTrace>XTSE3120 : An next-iteration instruction is not in a tail position of xsl:iterate's sequence constructor.</errTrace>
+ </outResult>
+ </testResult>
<testResult status="fail" testName="iterate-024">
<outResult>
- <errTrace>org.apache.xml.utils.WrappedRuntimeException: XPST0008 : Could not find variable with the name of count</errTrace>
+ <errTrace>XTSE3120 : An next-iteration instruction is not in a tail position of xsl:iterate's sequence constructor.</errTrace>
</outResult>
</testResult>
<testResult status="fail" testName="iterate-025">
@@ -108,20 +42,20 @@
<testResult status="fail" testName="iterate-028">
<outResult>
<errTrace>XPST0003 : An XPath expression /out/text()[. = "exit at 12 of 76"] has syntax error. Unknown op code : 0.</errTrace>
- <errTrace>java.lang.ArrayIndexOutOfBoundsException</errTrace>
+ <errTrace>java.lang.ArrayIndexOutOfBoundsException: -1</errTrace>
</outResult>
</testResult>
<testResult status="pass" testName="iterate-029"/>
<testResult status="fail" testName="iterate-030">
<outResult>
- <errTrace>XTSE0010 : An xsl:next-iteration instruction is not in a tail position within the sequence constructor of an xsl:iterate instruction.</errTrace>
+ <errTrace>XTSE3120 : An next-iteration instruction is not in a tail position of xsl:iterate's sequence constructor.</errTrace>
<errTrace>XPST0003 : An XPath expression /out/text()["count 2"] has syntax error. Unknown op code : 0.</errTrace>
- <errTrace>java.lang.ArrayIndexOutOfBoundsException</errTrace>
+ <errTrace>java.lang.ArrayIndexOutOfBoundsException: -1</errTrace>
</outResult>
</testResult>
<testResult status="fail" testName="iterate-031">
<outResult>
- <errTrace>XTSE0010 : An xsl:next-iteration instruction is not in a tail position within the sequence constructor of an xsl:iterate instruction.</errTrace>
+ <errTrace>XTSE3120 : An next-iteration instruction is not in a tail position of xsl:iterate's sequence constructor.</errTrace>
</outResult>
</testResult>
<testResult status="pass" testName="iterate-032"/>
@@ -129,7 +63,7 @@
<testResult status="fail" testName="iterate-034">
<outResult/>
</testResult>
- <testResult status="pass" testName="iterate-035"/>
+ <testResult status="fail" testName="iterate-035"/>
<testResult status="fail" testName="iterate-036">
<outResult>
<errTrace>FOAR0001 : An integer division by zero error.</errTrace>
@@ -157,11 +91,7 @@
<testResult status="fail" testName="iterate-043">
<outResult/>
</testResult>
- <testResult status="fail" testName="iterate-901">
- <outResult>
- <errTrace>org.apache.xml.utils.WrappedRuntimeException: XPST0008 : Could not find variable with the name of basketCost</errTrace>
- </outResult>
- </testResult>
+ <testResult status="pass" testName="iterate-901"/>
<testResult status="fail" testName="iterate-902">
<outResult>
<errTrace>XTTE0590 : The value to parameter 'basketCost' cannot be assigned. Either the parameter's input is not available or parameter's value cannot be cast to an expected type.</errTrace>
diff --git a/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/insn/_sequence-test-set_result.xml b/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/insn/_sequence-test-set_result.xml
index 45717d0eb..b1d55aa45 100644
--- a/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/insn/_sequence-test-set_result.xml
+++ b/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/insn/_sequence-test-set_result.xml
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="UTF-8"?><testrun dateTime="2025-09-10T10:59:02Z" fail="17" name="sequence" pass="8" skipped="1" statusUnknown="1" totalRun="26">
+<?xml version="1.0" encoding="UTF-8"?><testrun dateTime="2025-09-16T13:24:44Z" fail="17" name="sequence" pass="8" skipped="1" statusUnknown="1" totalRun="26">
<testResult status="fail" testName="sequence-0101"/>
<testResult status="fail" testName="sequence-0102"/>
<testResult status="pass" testName="sequence-0103"/>
@@ -6,17 +6,17 @@
<testResult status="fail" testName="sequence-0105"/>
<testResult status="fail" testName="sequence-0106">
<outResult>
- <errTrace>XPST0081 : An XML namespace prefix 'xs' hasn't been declared within an XSL stylesheet, or hasn't been set for XPath API invocation</errTrace>
+ <errTrace>XPST0081 : An XML namespace prefix 'xs' hasn't been declared within an XSL stylesheet, or hasn't been set for XPath API invocation.</errTrace>
</outResult>
</testResult>
<testResult status="fail" testName="sequence-0107">
<outResult>
- <errTrace>XPST0081 : An XML namespace prefix 'xs' hasn't been declared within an XSL stylesheet, or hasn't been set for XPath API invocation</errTrace>
+ <errTrace>XPST0081 : An XML namespace prefix 'xs' hasn't been declared within an XSL stylesheet, or hasn't been set for XPath API invocation.</errTrace>
</outResult>
</testResult>
<testResult status="fail" testName="sequence-0108">
<outResult>
- <errTrace>XPST0081 : An XML namespace prefix 'xs' hasn't been declared within an XSL stylesheet, or hasn't been set for XPath API invocation</errTrace>
+ <errTrace>XPST0081 : An XML namespace prefix 'xs' hasn't been declared within an XSL stylesheet, or hasn't been set for XPath API invocation.</errTrace>
</outResult>
</testResult>
<testResult status="pass" testName="sequence-0109"/>
@@ -26,7 +26,7 @@
<testResult status="fail" testName="sequence-0113"/>
<testResult status="fail" testName="sequence-0114">
<outResult>
- <errTrace>XPST0081 : An XML namespace prefix 'xs' hasn't been declared within an XSL stylesheet, or hasn't been set for XPath API invocation</errTrace>
+ <errTrace>XPST0081 : An XML namespace prefix 'xs' hasn't been declared within an XSL stylesheet, or hasn't been set for XPath API invocation.</errTrace>
</outResult>
</testResult>
<testResult status="fail" testName="sequence-0115">
diff --git a/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/insn/_sort-test-set_result.xml b/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/insn/_sort-test-set_result.xml
index 720ed721d..90988be52 100644
--- a/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/insn/_sort-test-set_result.xml
+++ b/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/insn/_sort-test-set_result.xml
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="UTF-8"?><testrun dateTime="2025-09-10T10:59:05Z" fail="31" name="sort" pass="50" skipped="0" statusUnknown="0" totalRun="81">
+<?xml version="1.0" encoding="UTF-8"?><testrun dateTime="2025-09-16T13:24:46Z" fail="31" name="sort" pass="50" skipped="0" statusUnknown="0" totalRun="81">
<testResult status="pass" testName="sort-003"/>
<testResult status="pass" testName="sort-001"/>
<testResult status="pass" testName="sort-002"/>
diff --git a/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/insn/_try-test-set_result.xml b/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/insn/_try-test-set_result.xml
index aeb22e357..2622a6e14 100644
--- a/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/insn/_try-test-set_result.xml
+++ b/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/insn/_try-test-set_result.xml
@@ -1,8 +1,6 @@
-<?xml version="1.0" encoding="UTF-8"?><testrun dateTime="2025-09-10T10:58:55Z" fail="22" name="try" pass="15" skipped="5" statusUnknown="0" totalRun="37">
+<?xml version="1.0" encoding="UTF-8"?><testrun dateTime="2025-09-16T13:24:41Z" fail="21" name="try" pass="16" skipped="5" statusUnknown="0" totalRun="37">
<testResult status="pass" testName="try-001"/>
- <testResult status="fail" testName="try-002">
- <outResult/>
- </testResult>
+ <testResult status="fail" testName="try-002"/>
<testResult status="fail" testName="try-003">
<outResult>
<errTrace>Could not find function: {http://www.w3.org/2005/xpath-functions}error()</errTrace>
@@ -10,14 +8,8 @@
<errTrace>java.lang.NullPointerException</errTrace>
</outResult>
</testResult>
- <testResult status="fail" testName="try-004">
- <outResult/>
- </testResult>
- <testResult status="fail" testName="try-005">
- <outResult>
- <errTrace>org.apache.xml.utils.WrappedRuntimeException: XPST0008 : Could not find variable with the name of {http://www.w3.org/2005/xqt-errors}module</errTrace>
- </outResult>
- </testResult>
+ <testResult status="fail" testName="try-004"/>
+ <testResult status="pass" testName="try-005"/>
<testResult status="pass" testName="try-006"/>
<testResult status="pass" testName="try-007"/>
<testResult status="pass" testName="try-008"/>
@@ -34,22 +26,28 @@
<testResult status="skipped" testName="try-015" xsltVersion="xslt 2.0 only"/>
<testResult status="fail" testName="try-016"/>
<testResult status="skipped" testName="try-017" xsltVersion="xslt 2.0 only"/>
- <testResult status="fail" testName="try-018">
- <outResult/>
- </testResult>
+ <testResult status="fail" testName="try-018"/>
<testResult status="fail" testName="try-019"/>
<testResult status="pass" testName="try-020"/>
<testResult status="fail" testName="try-021">
<outResult/>
</testResult>
<testResult status="fail" testName="try-022">
- <outResult/>
+ <outResult>
+ <errTrace>XPTY0004 : An exception occured while evaluating an xsl:result-document instruction. Following run-time error occured : d:\xslt30-test-master\tests\insn\try (Access is denied).</errTrace>
+ <errTrace>XPST0081 : An XML namespace prefix '' hasn't been declared within an XSL stylesheet, or hasn't been set for XPath API invocation.</errTrace>
+ <errTrace>XPST0081 : An XML namespace prefix '' hasn't been declared within an XSL stylesheet, or hasn't been set for XPath API invocation.</errTrace>
+ </outResult>
</testResult>
<testResult status="fail" testName="try-023">
<outResult/>
</testResult>
<testResult status="fail" testName="try-024">
- <outResult/>
+ <outResult>
+ <errTrace>XPST0081 : An XML namespace prefix '' hasn't been declared within an XSL stylesheet, or hasn't been set for XPath API invocation.</errTrace>
+ <errTrace>XPST0003 : An XPath expression /output/output/note = "secondary document written" /output/output/*:error/@code[contains(.,"FOAR0001")] contains(/output/output/*:error/message, "zero") has syntax error. Unknown op code : 21.</errTrace>
+ <errTrace>java.lang.ArrayIndexOutOfBoundsException: -1</errTrace>
+ </outResult>
</testResult>
<testResult status="skipped" testName="try-025" xsltVersion="xslt 2.0 only"/>
<testResult status="skipped" testName="try-026" xsltVersion="xslt 2.0 only"/>
diff --git a/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/insn/_xsl-document-test-set_result.xml b/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/insn/_xsl-document-test-set_result.xml
index 97069012f..569ad6807 100644
--- a/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/insn/_xsl-document-test-set_result.xml
+++ b/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/insn/_xsl-document-test-set_result.xml
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="UTF-8"?><testrun dateTime="2025-09-10T10:59:59Z" fail="13" name="xsl-document" pass="12" skipped="0" statusUnknown="0" totalRun="25">
+<?xml version="1.0" encoding="UTF-8"?><testrun dateTime="2025-09-16T13:25:25Z" fail="13" name="xsl-document" pass="12" skipped="0" statusUnknown="0" totalRun="25">
<testResult status="pass" testName="xsl-document-0101"/>
<testResult status="fail" testName="xsl-document-0102">
<outResult>
@@ -16,7 +16,7 @@
<testResult status="pass" testName="xsl-document-0203"/>
<testResult status="fail" testName="xsl-document-0301">
<outResult>
- <errTrace>XPST0081 : An XML namespace prefix '' hasn't been declared within an XSL stylesheet, or hasn't been set for XPath API invocation</errTrace>
+ <errTrace>XPST0081 : An XML namespace prefix '' hasn't been declared within an XSL stylesheet, or hasn't been set for XPath API invocation.</errTrace>
<errTrace>XPST0003 : An XPath expression /out/node()[1][self::*:e1][namespace-uri()="http://www.example.org/foo"][@t1="1"][@t2="2"][@t3="3"] has syntax error. Unknown op code : 0.</errTrace>
<errTrace>java.lang.ArrayIndexOutOfBoundsException: -1</errTrace>
</outResult>
diff --git a/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/misc/_regex-test-set_result.xml b/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/misc/_regex-test-set_result.xml
index 7937e4e91..0bc894884 100644
--- a/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/misc/_regex-test-set_result.xml
+++ b/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/misc/_regex-test-set_result.xml
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="UTF-8"?><testrun dateTime="2025-09-10T10:59:58Z" fail="12" name="regex" pass="32" skipped="1" statusUnknown="0" totalRun="44">
+<?xml version="1.0" encoding="UTF-8"?><testrun dateTime="2025-09-16T13:25:25Z" fail="12" name="regex" pass="32" skipped="1" statusUnknown="0" totalRun="44">
<testResult status="pass" testName="regex-001"/>
<testResult status="fail" testName="regex-002"/>
<testResult status="pass" testName="regex-003"/>
diff --git a/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/type/_boolean-test-set_result.xml b/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/type/_boolean-test-set_result.xml
index 027270c27..80debe6c8 100644
--- a/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/type/_boolean-test-set_result.xml
+++ b/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/type/_boolean-test-set_result.xml
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="UTF-8"?><testrun dateTime="2025-09-10T10:59:41Z" fail="25" name="boolean" pass="87" skipped="0" statusUnknown="0" totalRun="112">
+<?xml version="1.0" encoding="UTF-8"?><testrun dateTime="2025-09-16T13:25:22Z" fail="25" name="boolean" pass="87" skipped="0" statusUnknown="0" totalRun="112">
<testResult status="pass" testName="boolean-001"/>
<testResult status="pass" testName="boolean-002"/>
<testResult status="pass" testName="boolean-003"/>
diff --git a/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/type/_date-test-set_result.xml b/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/type/_date-test-set_result.xml
index ba2d7d15b..99b295e2f 100644
--- a/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/type/_date-test-set_result.xml
+++ b/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/type/_date-test-set_result.xml
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="UTF-8"?><testrun dateTime="2025-09-10T10:59:46Z" fail="28" name="date" pass="56" skipped="0" statusUnknown="1" totalRun="85">
+<?xml version="1.0" encoding="UTF-8"?><testrun dateTime="2025-09-16T13:25:22Z" fail="28" name="date" pass="56" skipped="0" statusUnknown="1" totalRun="85">
<testResult status="pass" testName="date-001"/>
<testResult status="pass" testName="date-002"/>
<testResult status="pass" testName="date-003"/>
diff --git a/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/type/_node-test-set_result.xml b/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/type/_node-test-set_result.xml
index d27049e87..6b706acb3 100644
--- a/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/type/_node-test-set_result.xml
+++ b/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/type/_node-test-set_result.xml
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="UTF-8"?><testrun dateTime="2025-09-10T10:59:43Z" fail="15" name="node" pass="17" skipped="0" statusUnknown="0" totalRun="32">
+<?xml version="1.0" encoding="UTF-8"?><testrun dateTime="2025-09-16T13:25:22Z" fail="15" name="node" pass="17" skipped="0" statusUnknown="0" totalRun="32">
<testResult status="pass" testName="node-0101"/>
<testResult status="pass" testName="node-0201"/>
<testResult status="fail" testName="node-0301">
diff --git a/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/type/_string-test-set_result.xml b/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/type/_string-test-set_result.xml
index acd829f26..6605bfa3b 100644
--- a/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/type/_string-test-set_result.xml
+++ b/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/type/_string-test-set_result.xml
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="UTF-8"?><testrun dateTime="2025-09-10T10:59:44Z" fail="8" name="string" pass="128" skipped="0" statusUnknown="0" totalRun="136">
+<?xml version="1.0" encoding="UTF-8"?><testrun dateTime="2025-09-16T13:25:22Z" fail="8" name="string" pass="128" skipped="0" statusUnknown="0" totalRun="136">
<testResult status="pass" testName="string-001"/>
<testResult status="pass" testName="string-002"/>
<testResult status="pass" testName="string-003"/>
diff --git a/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/w3c_xslt3_testsuite_xalan-j_result.xml b/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/w3c_xslt3_testsuite_xalan-j_result.xml
index 7c52c55e9..0c8bddba8 100644
--- a/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/w3c_xslt3_testsuite_xalan-j_result.xml
+++ b/src/test/java/org/apache/xalan/tests/w3c/xslt3/result/w3c_xslt3_testsuite_xalan-j_result.xml
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<testResult dateTime="2025-09-10T11:00:12Z" desc="W3C XSLT 3.0 test suite results" fail="781" pass="1635" skipped="66" success="67.23%" totalRun="2432" xslt_processor="Xalan-J XSLT 3.0 development code">
+<testResult dateTime="2025-09-16T13:25:38Z" desc="W3C XSLT 3.0 test suite results" fail="777" pass="1639" skipped="66" success="67.39%" totalRun="2432" xslt_processor="Xalan-J XSLT 3.0 development code">
<attr>
<as fail="31" pass="73" skipped="4" success="69.52%" totalRun="105"/>
<avt fail="15" pass="20" skipped="0" success="57.14%" totalRun="35"/>
@@ -42,10 +42,10 @@
<copy fail="31" pass="28" skipped="0" success="46.67%" totalRun="60"/>
<element fail="18" pass="11" skipped="0" success="37.93%" totalRun="29"/>
<for-each-group fail="24" pass="49" skipped="4" success="66.22%" totalRun="74"/>
- <iterate fail="25" pass="19" skipped="0" success="43.18%" totalRun="44"/>
+ <iterate fail="22" pass="22" skipped="0" success="50.0%" totalRun="44"/>
<sequence fail="17" pass="8" skipped="1" success="30.77%" totalRun="26"/>
<sort fail="31" pass="50" skipped="0" success="61.73%" totalRun="81"/>
- <try fail="22" pass="15" skipped="5" success="40.54%" totalRun="37"/>
+ <try fail="21" pass="16" skipped="5" success="43.24%" totalRun="37"/>
<xsl-document fail="13" pass="12" skipped="0" success="48.0%" totalRun="25"/>
</insn>
<misc>
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@xalan.apache.org
For additional commands, e-mail: commits-help@xalan.apache.org