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/08/27 11:58:39 UTC

(xalan-java) branch xalan-j_xslt3.0_mvn updated: committing few xalan-j xslt 3.0 code improvements

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 f450c3b31 committing few xalan-j xslt 3.0 code improvements
f450c3b31 is described below

commit f450c3b316a022049ee475662e4ca2cc1754efd4
Author: Mukul Gandhi <ga...@gmail.com>
AuthorDate: Wed Aug 27 17:28:04 2025 +0530

    committing few xalan-j xslt 3.0 code improvements
---
 .../apache/xalan/processor/XSLTAttributeDef.java   |   4 +-
 .../org/apache/xalan/templates/ElemFunction.java   |  33 +++--
 .../org/apache/xalan/templates/ElemSequence.java   |  21 +++
 .../org/apache/xalan/templates/ElemValueOf.java    | 141 +++++++++++++++++++--
 .../org/apache/xalan/templates/ElemVariable.java   | 112 ++++++++++++++--
 .../java/org/apache/xalan/transformer/MsgMgr.java  |   6 +-
 src/main/java/org/apache/xalan/xslt/Process.java   |   8 +-
 .../org/apache/xalan/xslt/util/StringUtil.java     | 121 ++++++++++++++++++
 .../xslt/util/XslTransformEvaluationHelper.java    | 105 ---------------
 .../xpath/axes/FilterExprIteratorSimple.java       |   2 +-
 .../org/apache/xpath/axes/LocPathIterator.java     |   1 -
 .../org/apache/xpath/compiler/XPathParser.java     |  62 +++++----
 .../org/apache/xpath/composite/XPathLetExpr.java   |  13 +-
 .../xpath/composite/XPathSequenceConstructor.java  |  34 ++++-
 .../java/org/apache/xpath/functions/FuncDoc.java   |   3 +-
 .../apache/xpath/functions/FuncFunctionArity.java  |  38 +++++-
 .../apache/xpath/functions/FuncFunctionName.java   |  39 +++++-
 .../apache/xpath/functions/FuncUnparsedText.java   |   3 +-
 .../apache/xpath/functions/json/FuncJsonDoc.java   |   3 +-
 .../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   |   2 +-
 .../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      |   2 +-
 .../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    |  10 +-
 .../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    |   2 +-
 .../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 |   2 +-
 .../result/insn/_sequence-test-set_result.xml      |   2 +-
 .../xslt3/result/insn/_sort-test-set_result.xml    |   2 +-
 .../w3c/xslt3/result/insn/_try-test-set_result.xml |   2 +-
 .../result/insn/_xsl-document-test-set_result.xml  |   6 +-
 .../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  |   4 +-
 src/test/resources/fn_json_doc/test3.xsl           |  13 +-
 src/test/resources/fn_parse_json/test12.xsl        |  13 +-
 .../resources/xsl_higher_order_functions/test9.xsl |   4 +-
 66 files changed, 626 insertions(+), 255 deletions(-)

diff --git a/src/main/java/org/apache/xalan/processor/XSLTAttributeDef.java b/src/main/java/org/apache/xalan/processor/XSLTAttributeDef.java
index 050a225cb..fd6c396a1 100644
--- a/src/main/java/org/apache/xalan/processor/XSLTAttributeDef.java
+++ b/src/main/java/org/apache/xalan/processor/XSLTAttributeDef.java
@@ -35,7 +35,7 @@ import org.apache.xalan.templates.AVT;
 import org.apache.xalan.templates.Constants;
 import org.apache.xalan.templates.ElemForEachGroup;
 import org.apache.xalan.templates.ElemTemplateElement;
-import org.apache.xalan.xslt.util.XslTransformEvaluationHelper;
+import org.apache.xalan.xslt.util.StringUtil;
 import org.apache.xml.utils.NamespaceSupport2;
 import org.apache.xml.utils.QName;
 import org.apache.xml.utils.StringToIntTable;
@@ -1839,7 +1839,7 @@ public class XSLTAttributeDef
 		  }
 	  }
 	  
-	  if (!XslTransformEvaluationHelper.isStrHasBalancedParentheses(result, '(', ')')) {
+	  if (!StringUtil.isStrHasBalancedParentheses(result, '(', ')')) {
 		  throw new TransformerException("An xsl:for-each-group instruction's group-by value \"" + 
 										                                  groupByStrValue + "\" doesn't have or evaluates to a string "
 										                                  + "having balanced parenthesis pairs '(' and ')'."); 
diff --git a/src/main/java/org/apache/xalan/templates/ElemFunction.java b/src/main/java/org/apache/xalan/templates/ElemFunction.java
index 4064c3562..6c2027626 100644
--- a/src/main/java/org/apache/xalan/templates/ElemFunction.java
+++ b/src/main/java/org/apache/xalan/templates/ElemFunction.java
@@ -17,6 +17,7 @@
  */
 package org.apache.xalan.templates;
 
+import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.Collection;
 import java.util.HashMap;
@@ -28,8 +29,8 @@ import javax.xml.transform.SourceLocator;
 import javax.xml.transform.TransformerException;
 
 import org.apache.xalan.transformer.TransformerImpl;
-import org.apache.xalan.xslt.util.XslTransformEvaluationHelper;
 import org.apache.xalan.xslt.util.XslTransformData;
+import org.apache.xalan.xslt.util.XslTransformEvaluationHelper;
 import org.apache.xerces.xs.XSTypeDefinition;
 import org.apache.xml.dtm.DTMCursorIterator;
 import org.apache.xml.dtm.ref.DTMNodeList;
@@ -488,7 +489,7 @@ public class ElemFunction extends ElemTemplate
       String funcAsAttrStrVal = getAs();
       
       if (funcAsAttrStrVal != null) {
-    	 // Process xsl:function's evaluation result with "as" attribute
+    	  // Process xsl:function's evaluation result with "as" attribute
     	  
     	  try {
     		SequenceTypeData seqExpectedTypeData = SequenceTypeSupport.getSequenceTypeDataFromSeqTypeStr(funcAsAttrStrVal, xctxt, srcLocator);
@@ -534,8 +535,7 @@ public class ElemFunction extends ElemTemplate
 																			            				 funcAsAttrStrVal + ".", srcLocator);
             	 }             	            	              	
              }
-             else if (((XslTransformData.m_xpathNamedFunctionRefSequence).size() > 0) && 
-            		                                                                      !ElemVariable.m_isXPathNamedFunctionRefSequenceVar) {            	
+             else if (((XslTransformData.m_xpathNamedFunctionRefSequence).size() > 0) && !ElemVariable.m_isXPathNamedFunctionRefSequenceVar) {            
             	int funcItemSeqSize = (XslTransformData.m_xpathNamedFunctionRefSequence).size();
         		
         		SequenceTypeFunctionTest sequenceTypeFunctionTest = seqExpectedTypeData.getSequenceTypeFunctionTest();
@@ -591,16 +591,12 @@ public class ElemFunction extends ElemTemplate
                                                                                                                              ", doesn't match the declared function result type " + funcAsAttrStrVal + 
                                                                                                                              ". The function arity specification doesn't match.", srcLocator); 
         						   }        						   
-        					   }
-        					   else {
-        						   // REVISIT
-        					   }
+        					   }        					   
         					}
         					
         					(XslTransformData.m_xpathNamedFunctionRefSequence).remove(0);
         				}
         				else {
-        					// REVISIT
         					funcResultConvertedVal = XslTransformData.m_xpathNamedFunctionRefSequence;
         					(XslTransformData.m_xpathNamedFunctionRefSequence).clear();
         				}
@@ -631,6 +627,9 @@ public class ElemFunction extends ElemTemplate
          catch (TransformerException ex) {
             throw new TransformerException(ex.getMessage(), srcLocator); 
          }
+    	 finally {
+    		ElemVariable.m_isXPathNamedFunctionRefSequenceVar = false;    		 
+    	 }
       }
       
       if (funcResultConvertedVal instanceof ResultSequence) {
@@ -1206,5 +1205,21 @@ public class ElemFunction extends ElemTemplate
     public boolean isOverrideExtensionFunctionAttrDeclared() {
     	return m_override_extension_function_attr_declared;
     }
+    
+    /**
+     * Method definition, to get xsl:function's parameter information.
+     * 
+     * @return                   List of ElemParam objects, or null.
+     */
+    public List<ElemParam> getFuncParamList() {
+    	List<ElemParam> funcParamList = new ArrayList<ElemParam>();
+    	
+    	ElemTemplateElement elemTemplateElem = this.getFirstChildElem();
+    	if (elemTemplateElem instanceof ElemParam) {
+    	   funcParamList.add((ElemParam)elemTemplateElem);
+    	}
+    	
+    	return funcParamList; 
+    }
 
 }
diff --git a/src/main/java/org/apache/xalan/templates/ElemSequence.java b/src/main/java/org/apache/xalan/templates/ElemSequence.java
index ef9dba609..90c58c1f4 100644
--- a/src/main/java/org/apache/xalan/templates/ElemSequence.java
+++ b/src/main/java/org/apache/xalan/templates/ElemSequence.java
@@ -352,6 +352,27 @@ public class ElemSequence extends ElemTemplateElement
 						  return; 
 					  }
 			      }
+				  else if (xObjTemp instanceof ResultSequence) {
+					  ResultSequence rSeq = (ResultSequence)xObjTemp;
+					  boolList = new ArrayList<Boolean>();
+					  for (int idx = 0; idx < rSeq.size(); idx++) {
+						  XObject xObj = rSeq.item(idx);
+						  if (xObj instanceof XPathNamedFunctionReference) {
+							  boolList.add(Boolean.valueOf(true));
+						  }
+					  }
+					  
+					  if (boolList.size() == rSeq.size()) {
+						  for (int idx = 0; idx < rSeq.size(); idx++) {
+							  XObject xObj = rSeq.item(idx);
+							  (XslTransformData.m_xpathNamedFunctionRefSequence).add((XPathNamedFunctionReference)xObj);
+						  }
+					  }
+					  
+					  if ((XslTransformData.m_xpathNamedFunctionRefSequence).size() > 0) {
+						  return; 
+					  }
+				  }
 			  }
 			  else if (selectExpression instanceof XPathArrayConstructor) {
 				  XPathArrayConstructor xpathArrayCons = (XPathArrayConstructor)selectExpression;
diff --git a/src/main/java/org/apache/xalan/templates/ElemValueOf.java b/src/main/java/org/apache/xalan/templates/ElemValueOf.java
index bcff61247..74f7223b8 100644
--- a/src/main/java/org/apache/xalan/templates/ElemValueOf.java
+++ b/src/main/java/org/apache/xalan/templates/ElemValueOf.java
@@ -24,8 +24,8 @@ import javax.xml.transform.SourceLocator;
 import javax.xml.transform.TransformerException;
 
 import org.apache.xalan.transformer.TransformerImpl;
-import org.apache.xalan.xslt.util.XslTransformEvaluationHelper;
 import org.apache.xalan.xslt.util.XslTransformData;
+import org.apache.xalan.xslt.util.XslTransformEvaluationHelper;
 import org.apache.xml.dtm.DTM;
 import org.apache.xml.dtm.DTMCursorIterator;
 import org.apache.xml.dtm.DTMManager;
@@ -36,6 +36,7 @@ import org.apache.xpath.XPathContext;
 import org.apache.xpath.axes.LocPathIterator;
 import org.apache.xpath.composite.XPathIfExpr;
 import org.apache.xpath.composite.XPathLetExpr;
+import org.apache.xpath.composite.XPathNamedFunctionReference;
 import org.apache.xpath.functions.FuncRound;
 import org.apache.xpath.functions.Function;
 import org.apache.xpath.functions.WrongNumberArgsException;
@@ -619,15 +620,16 @@ public class ElemValueOf extends ElemTemplateElement {
                      Function func = locPathIterator.getFuncExpr();
                      XPathDynamicFunctionCall dfc = locPathIterator.getDynamicFuncCallExpr();
                      
-                     DTMCursorIterator dtmIter = null;                     
+                     DTMCursorIterator dtmIter = null;
+                     boolean isLocPathIterOk = true;
                      try {
                         dtmIter = locPathIterator.asIterator(xctxt, current);
                      }
                      catch (Exception ex) {
-                    	// NO OP 
-                     }                     
+                    	isLocPathIterOk = false;
+                     }
                      
-                     if (dtmIter != null) {                        
+                     if ((dtmIter != null) && isLocPathIterOk) {                        
                         StringBuffer strBuff = new StringBuffer();
                         int nextNode;
                         while ((nextNode = dtmIter.nextNode()) != DTM.NULL)
@@ -663,10 +665,13 @@ public class ElemValueOf extends ElemTemplateElement {
                         String xpathPatternStr = m_selectExpression.getPatternString();
                         
                         if (xpathPatternStr.startsWith("$") && xpathPatternStr.contains("[") && 
-                                                                                    xpathPatternStr.endsWith("]")) {
-                           // Within this 'if' clause, we handle the case, where the XPath expression is
-                           // syntactically of type $varName[expr], for example $varName[1], $varName[$idx],
-                           // $varName[funcCall(arg)] etc, and $varName resolves to a 'ResultSequence' object.
+                                                                                    xpathPatternStr.endsWith("]") && 
+                                                                                    !(xpathPatternStr.contains("(") || xpathPatternStr.contains(")"))) {
+                           /**
+                            * Here, we handle the case where the XPath expression is of type $varName[expr],
+                            * for example $varName[1], $varName[$idx], $varName[funcCall(arg)] etc, and
+                            * $varName resolves to a 'ResultSequence' object.
+                            */
                             
                            String varRefXPathExprStr = "$" + xpathPatternStr.substring(1, xpathPatternStr.indexOf('['));
                            String xpathIndexExprStr = xpathPatternStr.substring(xpathPatternStr.indexOf('[') + 1, 
@@ -744,6 +749,124 @@ public class ElemValueOf extends ElemTemplateElement {
                               }
                            }                           
                         }
+                        else if (xpathPatternStr.startsWith("$")) {
+                           /**
+                            * Evaluating an XPath expression like $varRef[a](b,..)[c]. A typical 
+                            * example is, an XPath expression $varRef[a] is a 'function item' 
+                            * reference that is provided arguments (b,..). The function call 
+                            * result of, expression $varRef[a](b,..) is filtered with index 
+                            * accessor [c].
+                            */
+                        	
+                           int idx = xpathPatternStr.indexOf('[');
+                           if (idx > -1) {
+                        	   String prefix1 = xpathPatternStr.substring(0, idx);
+                        	   String suffix1 = null;
+                        	   if (idx > 0) {
+                        	      suffix1 = xpathPatternStr.substring(idx);
+                        	   }
+
+                        	   ElemTemplateElement elemTemplateElement = (ElemTemplateElement)xctxt.getNamespaceContext();
+                        	   List<XMLNSDecl> prefixTable = null;
+                        	   if (elemTemplateElement != null) {
+                        		   prefixTable = (List<XMLNSDecl>)elemTemplateElement.getPrefixTable();
+                        	   }
+
+                        	   if (prefixTable != null) {
+                        		   prefix1 = XslTransformEvaluationHelper.replaceNsUrisWithPrefixesOnXPathStr(prefix1, prefixTable);
+                        	   }
+
+                        	   XPath xpathObj = new XPath(prefix1, srcLocator, xctxt.getNamespaceContext(), XPath.SELECT, null);
+                        	   if (m_vars != null) {
+                        		  xpathObj.fixupVariables(m_vars, m_globals_size);                            
+                        	   }
+
+                        	   XObject prefixEvalResult = xpathObj.execute(xctxt, xctxt.getCurrentNode(), xctxt.getNamespaceContext());
+                        	   if (prefixEvalResult instanceof XPathNamedFunctionReference) {
+                        		   XPathNamedFunctionReference xpathNamedFunctionReference = (XPathNamedFunctionReference)prefixEvalResult;                        		   
+                        		   ResultSequence rSeq = new ResultSequence();
+                        		   rSeq.add(xpathNamedFunctionReference);                        		   
+                        		   prefixEvalResult = rSeq; 
+                        	   }
+                        	   
+                        	   try {
+                        		   if (prefixEvalResult instanceof ResultSequence) {
+                        			   ResultSequence rSeq = (ResultSequence)prefixEvalResult;
+                        			   int i = suffix1.indexOf('(');
+                        			   int j = suffix1.indexOf(')');
+                        			   String a1 = null;
+                        			   String[] b1 = null;
+                        			   String c1 = null;
+                        			   if ((i > -1) && (j > -1) && (i < j)) {
+                        				   String str1 = suffix1.substring(0, i);
+                        				   if (str1.startsWith("[") && str1.endsWith("]")) {
+                        					   int strLen1 = str1.length();
+                        					   a1 = str1.substring(1, strLen1 - 1);
+                        				   }
+                        				   
+                        				   String str2 = suffix1.substring(i + 1, j);
+                        				   b1 = str2.split(",");                        				   
+                        				   String str3 = suffix1.substring(j + 1);
+                        				   if (str3.startsWith("[") && str3.endsWith("]")) {
+                        					   int strLen3 = str3.length();
+                        					   c1 = str3.substring(1, strLen3 - 1);
+                        				   }
+                        			   }
+                        			   
+                        			   XPath xpath = new XPath(a1, srcLocator, xctxt.getNamespaceContext(), XPath.SELECT, null);
+        							   if (m_vars != null) {
+        								   xpath.fixupVariables(m_vars, m_globals_size);                            
+        							   }
+
+        							   XObject aXObj = xpath.execute(xctxt, xctxt.getCurrentNode(), xctxt.getNamespaceContext());
+        							   Integer aInt = Integer.valueOf(XslTransformEvaluationHelper.getStrVal(aXObj));
+                        			   XObject xObj = rSeq.item(aInt - 1);
+                        			   
+                        			   if ((xObj != null) && (xObj instanceof XPathNamedFunctionReference)) {
+                        				   XPathNamedFunctionReference xpathNamedFunctionReference = (XPathNamedFunctionReference)xObj;
+                        				   ElemFunction elemFunction = xpathNamedFunctionReference.getXslStylesheetFunction();
+                        				   if (elemFunction != null) {
+                        					   int argCount = b1.length; 
+                        					   if (elemFunction.getArity() == argCount) {
+                        						   ResultSequence argResultSeq = new ResultSequence();
+                        						   for (int idx2 = 0; idx2 < argCount; idx2++) {
+                        							   XPath argXpathObj = new XPath(b1[idx2], srcLocator, xctxt.getNamespaceContext(), XPath.SELECT, null);
+                        							   if (m_vars != null) {
+                        								   argXpathObj.fixupVariables(m_vars, m_globals_size);                            
+                        							   }
+
+                        							   XObject argXObj = argXpathObj.execute(xctxt, xctxt.getCurrentNode(), xctxt.getNamespaceContext());
+                        							   argResultSeq.add(argXObj);
+                        						   }
+
+                        						   XObject xslFuncEvalResult = elemFunction.evaluateXslFunction(transformer, argResultSeq);
+                        						   if (xslFuncEvalResult instanceof ResultSequence) {
+                        							   ResultSequence rSeq2 = (ResultSequence)xslFuncEvalResult;
+                        							   xpath = new XPath(c1, srcLocator, xctxt.getNamespaceContext(), XPath.SELECT, null);
+                        							   if (m_vars != null) {
+                        								   xpath.fixupVariables(m_vars, m_globals_size);                            
+                        							   }
+
+                        							   XObject cXObj = xpath.execute(xctxt, xctxt.getCurrentNode(), xctxt.getNamespaceContext());
+                        							   Integer cInt = Integer.valueOf(XslTransformEvaluationHelper.getStrVal(cXObj));
+                        							   if (cInt > 0) {
+                        								   xslFuncEvalResult = rSeq2.item(cInt - 1); 
+                        							   }
+                        						   }
+
+                        						   String strValue = XslTransformEvaluationHelper.getStrVal(xslFuncEvalResult);
+
+                        						   (new XString(strValue)).dispatchCharactersEvents(rth);
+                        					   }
+                        				   }
+                        			   }
+                        		   }
+                        	   }
+                        	   catch (Exception ex) {
+                        		   // NO OP
+                        	   }
+                           }
+                        }
                      }
                   }
                   else if (expr instanceof XPathLetExpr) {
diff --git a/src/main/java/org/apache/xalan/templates/ElemVariable.java b/src/main/java/org/apache/xalan/templates/ElemVariable.java
index 9bf200778..4f3ae4369 100644
--- a/src/main/java/org/apache/xalan/templates/ElemVariable.java
+++ b/src/main/java/org/apache/xalan/templates/ElemVariable.java
@@ -26,8 +26,8 @@ import javax.xml.transform.TransformerException;
 
 import org.apache.xalan.res.XSLTErrorResources;
 import org.apache.xalan.transformer.TransformerImpl;
-import org.apache.xalan.xslt.util.XslTransformEvaluationHelper;
 import org.apache.xalan.xslt.util.XslTransformData;
+import org.apache.xalan.xslt.util.XslTransformEvaluationHelper;
 import org.apache.xml.dtm.DTM;
 import org.apache.xml.dtm.DTMCursorIterator;
 import org.apache.xml.utils.PrefixResolver;
@@ -950,18 +950,112 @@ public class ElemVariable extends ElemTemplateElement
     		}
     		
     		if (!isSeqCardinalityOk) {
-    			throw new TransformerException("XTTE0505 : The variable " + m_qname.getLocalName() + "'s value doesn't conform to XPath sequence "
-    					                                                                           + "type's occurence indicator, implying that an XDM value's "
-    					                                                                           + "cardinality found as " + funcItemSeqSize + " is incorrect. "
-    					                                                                           + "The sequence type has been specified as " + m_asAttr + ".", srcLocator);
+    			throw new TransformerException("XTTE0505 : An xsl:variable " + m_qname.getLocalName() + "'s value doesn't conform to XPath sequence "
+    					                                                                              + "type's occurence indicator, implying that an xdm value's "
+    					                                                                              + "cardinality found as " + funcItemSeqSize + " is incorrect. "
+    					                                                                              + "The sequence type has been specified as " + m_asAttr + ".", srcLocator);
     		}
     		
-    		if ((sequenceTypeFunctionTest != null) && sequenceTypeFunctionTest.isAnyFunctionTest()) {
-    		   if ((XslTransformData.m_xpathNamedFunctionRefSequence).size() == 1) {
-    			  var = (XslTransformData.m_xpathNamedFunctionRefSequence).item(0);
+    		if (sequenceTypeFunctionTest != null) {
+    		   int funcRefCount = (XslTransformData.m_xpathNamedFunctionRefSequence).size();
+    		   if (sequenceTypeFunctionTest.isAnyFunctionTest()) {	
+    			   if (funcRefCount == 1) {
+    				   var = (XslTransformData.m_xpathNamedFunctionRefSequence).item(0);
+    			   }
+    			   else {
+    				   var = XslTransformData.m_xpathNamedFunctionRefSequence;
+    			   }
     		   }
     		   else {
-    		      var = XslTransformData.m_xpathNamedFunctionRefSequence;
+    			   List<String> funcParamSpecList = sequenceTypeFunctionTest.getTypedFunctionTestParamSpecList();
+    			   String funcReturnTypeSpec = sequenceTypeFunctionTest.getTypedFunctionTestReturnType();
+    			   
+    			   List<XMLNSDecl> prefixTable = (List<XMLNSDecl>)this.getPrefixTable();
+    			   
+    			   for (int idx = 0; idx < funcRefCount; idx++) {
+    				  XPathNamedFunctionReference funcRef1 = (XPathNamedFunctionReference)((XslTransformData.m_xpathNamedFunctionRefSequence).item(idx));
+    				  ElemFunction elemFunction = funcRef1.getXslStylesheetFunction();
+    				  if (elemFunction != null) {
+    					  int xpathNamedFuncRefArity = funcRef1.getArity();
+    					  int funcTypeSpecArity = funcParamSpecList.size();
+    					  if (xpathNamedFuncRefArity == funcTypeSpecArity) {
+    						 List<ElemParam> elemFuncParamList = elemFunction.getFuncParamList();
+    						 for (int i = 0; i < elemFuncParamList.size(); i++) {
+    							 boolean ok1 = false;
+    							 for (int j = 0; j < funcParamSpecList.size(); j++) {
+                                    if (i == j) {
+                                       ElemParam elemParam1 = elemFuncParamList.get(i);
+                                       String paramSpec1 = funcParamSpecList.get(j);
+                                       String elemParamAs = elemParam1.getAs();
+                                       if (elemParamAs == null) {                                    	  
+                                    	  ok1 = true;
+                                    	  break;  
+                                       }
+                                       else {
+                                    	  // Check equality of data type objects, corresponding to 
+                                    	  // paramSpec1 and elemParamAs at the same positional index.
+                                    	   
+                                    	  elemParamAs = XslTransformEvaluationHelper.replaceNsUrisWithPrefixesOnXPathStr(elemParamAs, prefixTable);                                    	   
+                                    	  XPath seqTypeXPath1 = new XPath(elemParamAs, srcLocator, xctxt.getNamespaceContext(), XPath.SELECT, null, true);    	    	                                       	
+                                       	  XObject seqTypeExpressionEvalResult1 = seqTypeXPath1.execute(xctxt, xctxt.getContextNode(), xctxt.getNamespaceContext());                                       	
+                                       	  SequenceTypeData seqExpectedTypeData1 = (SequenceTypeData)seqTypeExpressionEvalResult1;
+                                       	  
+                                       	  paramSpec1 = XslTransformEvaluationHelper.replaceNsUrisWithPrefixesOnXPathStr(paramSpec1, prefixTable);
+                                       	  XPath seqTypeXPath2 = new XPath(paramSpec1, srcLocator, xctxt.getNamespaceContext(), XPath.SELECT, null, true);    	    	                                       	
+                                     	  XObject seqTypeExpressionEvalResult2 = seqTypeXPath2.execute(xctxt, xctxt.getContextNode(), xctxt.getNamespaceContext());                                       	
+                                     	  SequenceTypeData seqExpectedTypeData2 = (SequenceTypeData)seqTypeExpressionEvalResult2;
+                                     	  
+                                     	  if (!seqExpectedTypeData1.equal(seqExpectedTypeData2)) {
+                                     		 throw new TransformerException("XPTY0004 : An xsl:variable " + m_qname.getLocalName() + "'s value doesn't conform to "
+                                     		 		                                                                               + "xsl:variable's type specification " + m_asAttr + ". The "
+                                     		 		                                                                               + "function parameter specifications doesn't match.", srcLocator);
+                                     	  }
+                                       }
+                                    }
+    							 }
+    							 
+    							 if (ok1) {
+    								continue; 
+    							 }
+    						 }
+    					  }
+    					  else {
+    						  throw new TransformerException("XPTY0004 : An xsl:variable " + m_qname.getLocalName() + "'s value doesn't conform to "
+                                                                                                                    + "xsl:variable's type specification " + m_asAttr + ". The "
+                                                                                                                    + "function arities doesn't match.", srcLocator); 
+    					  }
+    					  
+    					  String elemFuncAs = elemFunction.getAs();
+    					  if ((elemFuncAs != null) && (funcReturnTypeSpec != null)) {
+    						  elemFuncAs = XslTransformEvaluationHelper.replaceNsUrisWithPrefixesOnXPathStr(elemFuncAs, prefixTable);
+    						  XPath seqTypeXPath1 = new XPath(elemFuncAs, srcLocator, xctxt.getNamespaceContext(), XPath.SELECT, null, true);    	    	                                       	
+    						  XObject seqTypeExpressionEvalResult1 = seqTypeXPath1.execute(xctxt, xctxt.getContextNode(), xctxt.getNamespaceContext());                                       	
+    						  SequenceTypeData seqExpectedTypeData1 = (SequenceTypeData)seqTypeExpressionEvalResult1;
+
+    						  funcReturnTypeSpec = XslTransformEvaluationHelper.replaceNsUrisWithPrefixesOnXPathStr(funcReturnTypeSpec, prefixTable);
+    						  XPath seqTypeXPath2 = new XPath(funcReturnTypeSpec, srcLocator, xctxt.getNamespaceContext(), XPath.SELECT, null, true);    	    	                                       	
+    						  XObject seqTypeExpressionEvalResult2 = seqTypeXPath2.execute(xctxt, xctxt.getContextNode(), xctxt.getNamespaceContext());                                       	
+    						  SequenceTypeData seqExpectedTypeData2 = (SequenceTypeData)seqTypeExpressionEvalResult2;
+
+    						  if (!seqExpectedTypeData1.equal(seqExpectedTypeData2)) {
+    							  throw new TransformerException("XPTY0004 : An xsl:variable " + m_qname.getLocalName() + "'s value doesn't conform to "
+    									                                                                                + "xsl:variable's type specification " + m_asAttr + ". The "
+    									                                                                                + "function return types doesn't match.", srcLocator);
+    						  }
+    					  }
+    				  }
+    				  else {
+    					  // REVISIT     To possibly handle other types of function references, 
+    					  //             that XPathNamedFunctionReference represents.
+    				  }
+    			   }
+    			   
+    			   if (funcRefCount == 1) {
+    				   var = (XslTransformData.m_xpathNamedFunctionRefSequence).item(0);
+    			   }
+    			   else {
+    				   var = XslTransformData.m_xpathNamedFunctionRefSequence;
+    			   }
     		   }
     		   
     		   m_isXPathNamedFunctionRefSequenceVar = true;
diff --git a/src/main/java/org/apache/xalan/transformer/MsgMgr.java b/src/main/java/org/apache/xalan/transformer/MsgMgr.java
index c09d6759e..e7681c61d 100644
--- a/src/main/java/org/apache/xalan/transformer/MsgMgr.java
+++ b/src/main/java/org/apache/xalan/transformer/MsgMgr.java
@@ -299,11 +299,7 @@ public class MsgMgr
   {
 
     String formattedMsg = XSLMessages.createMessage(msg, args);
-
-    // Locator locator = m_stylesheetLocatorStack.isEmpty()
-    //                   ? null :
-    //                    ((Locator)m_stylesheetLocatorStack.peek());
-    // Locator locator = null;
+    
     ErrorListener errHandler = m_transformer.getErrorListener();
 
     if (null != errHandler)
diff --git a/src/main/java/org/apache/xalan/xslt/Process.java b/src/main/java/org/apache/xalan/xslt/Process.java
index 5b3c63f93..f4a1abe46 100644
--- a/src/main/java/org/apache/xalan/xslt/Process.java
+++ b/src/main/java/org/apache/xalan/xslt/Process.java
@@ -213,7 +213,7 @@ public class Process
 		  try
 		  {
 			  tfactory = TransformerFactory.newInstance();
-			  tfactory.setErrorListener(new DefaultErrorHandler(false));
+			  tfactory.setErrorListener(new DefaultErrorHandler(true));
 		  }
 		  catch (TransformerFactoryConfigurationError err)
 		  {
@@ -829,7 +829,7 @@ public class Process
 					  ((TransformerImpl)transformer).setProperty(TransformerImpl.XSL_EVALUATE_PROPERTY, Boolean.TRUE);
 				  }
 
-				  transformer.setErrorListener(new DefaultErrorHandler(false));
+				  transformer.setErrorListener(new DefaultErrorHandler(true));
 
 				  // Override the output format?
 				  if (null != outputType)
@@ -907,7 +907,7 @@ public class Process
 
 						  // Now serialize output to disk with identity transformer
 						  Transformer identityTransformer = stf.newTransformer();
-						  identityTransformer.setErrorListener(new DefaultErrorHandler(false));
+						  identityTransformer.setErrorListener(new DefaultErrorHandler(true));
 
 						  Properties serializationProps = stylesheet.getOutputProperties();
 
@@ -941,7 +941,7 @@ public class Process
 
 						  // Now serialize output to disk with identity transformer
 						  Transformer identityTransformer = stf.newTransformer();
-						  identityTransformer.setErrorListener(new DefaultErrorHandler(false));
+						  identityTransformer.setErrorListener(new DefaultErrorHandler(true));
 
 						  Properties serializationProps = stylesheet.getOutputProperties();
 
diff --git a/src/main/java/org/apache/xalan/xslt/util/StringUtil.java b/src/main/java/org/apache/xalan/xslt/util/StringUtil.java
new file mode 100644
index 000000000..b9c96b1ca
--- /dev/null
+++ b/src/main/java/org/apache/xalan/xslt/util/StringUtil.java
@@ -0,0 +1,121 @@
+package org.apache.xalan.xslt.util;
+
+import java.io.BufferedReader;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.InputStreamReader;
+import java.net.URL;
+import java.util.Stack;
+
+/**
+ * A class definition, defining few utility methods for 
+ * string information handling.
+ * 
+ * @author Mukul Gandhi <mu...@apache.org>
+ * 
+ * @xsl.usage general
+ */
+public class StringUtil {
+	
+	/**
+     * Method definition to check, whether the supplied string value 
+     * has balanced parentheses pairs.
+     */
+    public static boolean isStrHasBalancedParentheses(String strValue, char lParenChar, char rParenChar) {
+       
+       boolean result = true;
+       
+       Stack<Character> charStack = new Stack<Character>();
+       
+       int strLen = strValue.length();
+       
+       for(int idx = 0; idx < strLen; idx++) {
+           char ch = strValue.charAt(idx);
+           if (ch == lParenChar) {
+              charStack.push(ch); 
+           }
+           else if (ch == rParenChar){
+              if (charStack.isEmpty() || (charStack.pop() != lParenChar)) {
+                 // Unbalanced parentheses
+                 result = false;
+                 break;
+              }   
+           }
+       }
+       
+       if (!charStack.isEmpty()) {
+          result = false;
+       }
+       
+       return result; 
+    }
+    
+    /**
+     * Method definition to check, whether the supplied string value 
+     * has balanced XPath comment delimiters. XPath comments have
+     * lexical form (: comment text :)
+     */
+    public static boolean isStrHasBalancedXPathCommentDelim(String strValue) {
+        
+        boolean result = true;
+        
+        // Sufficiently random character strings, that're unlikely 
+        // to occur within an XPath expression.        
+        String lDelimStr = new String(new int[] { 2 }, 0, 1);
+        String rDelimStr = new String(new int[] { 3 }, 0, 1);
+        
+        char lDelimChar = lDelimStr.charAt(0);
+        char rDelimChar = rDelimStr.charAt(0);
+        
+        strValue = strValue.replace("(:", lDelimStr);        
+        strValue = strValue.replace(":)", rDelimStr);
+        
+        Stack<Character> charStack = new Stack<Character>();
+        
+        int strLen = strValue.length();
+        
+        for(int idx = 0; idx < strLen; idx++) {
+            char ch = strValue.charAt(idx);
+            if (ch == lDelimChar) {
+               charStack.push(ch); 
+            }
+            else if (ch == rDelimChar){
+               if (charStack.isEmpty() || (charStack.pop() != lDelimChar)) {
+                  // Unbalanced comment string
+                  result = false;
+                  break;
+               }   
+            }
+        }
+        
+        if (!charStack.isEmpty()) {
+           result = false;
+        }
+        
+        return result; 
+    }
+    
+    /**
+     * Method definition, to get the string contents from a URL 
+     * resource.
+     */
+    public static String getStringContentFromUrl(URL url) throws IOException {            	
+    	
+    	StringBuilder strBuilder = new StringBuilder();
+        
+        InputStream inpStream = url.openStream();        
+        try {                    
+            BufferedReader buffReader = new BufferedReader(new InputStreamReader(inpStream));
+            int c;
+            while ((c = buffReader.read()) != -1) {
+               strBuilder.append((char)c);
+            }
+        } 
+        finally {
+            inpStream.close();
+        }
+     
+        return strBuilder.toString();
+    }
+
+}
diff --git a/src/main/java/org/apache/xalan/xslt/util/XslTransformEvaluationHelper.java b/src/main/java/org/apache/xalan/xslt/util/XslTransformEvaluationHelper.java
index b0f279ed7..72bfd1855 100644
--- a/src/main/java/org/apache/xalan/xslt/util/XslTransformEvaluationHelper.java
+++ b/src/main/java/org/apache/xalan/xslt/util/XslTransformEvaluationHelper.java
@@ -16,17 +16,11 @@
  */
 package org.apache.xalan.xslt.util;
 
-import java.io.BufferedReader;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.InputStreamReader;
-import java.net.URL;
 import java.util.ArrayList;
 import java.util.Iterator;
 import java.util.List;
 import java.util.Map;
 import java.util.Set;
-import java.util.Stack;
 import java.util.stream.IntStream;
 
 import javax.xml.transform.SourceLocator;
@@ -558,27 +552,6 @@ public class XslTransformEvaluationHelper {
     	return resultStr;
     }
     
-    /**
-     * Get the string contents from an URL.
-     */
-    public static String getStringContentFromUrl(URL url) throws IOException {
-        StringBuilder strBuilder = new StringBuilder();
-        
-        InputStream inpStream = url.openStream();        
-        try {                    
-            BufferedReader buffReader = new BufferedReader(new InputStreamReader(inpStream));
-            int c;
-            while ((c = buffReader.read()) != -1) {
-               strBuilder.append((char)c);
-            }
-        } 
-        finally {
-            inpStream.close();
-        }
-     
-        return strBuilder.toString();
-    }
-    
     /**
      * This method checks whether, an XSL xsl:with-param/xsl:param 
      * tunnel attribute's value is true (i.e, having string 
@@ -594,84 +567,6 @@ public class XslTransformEvaluationHelper {
        return result;
     }
     
-    /**
-     * Method definition to check, whether the supplied string value 
-     * has balanced parentheses pairs.
-     */
-    public static boolean isStrHasBalancedParentheses(String strValue, char lParenChar, char rParenChar) {
-       
-       boolean result = true;
-       
-       Stack<Character> charStack = new Stack<Character>();
-       
-       int strLen = strValue.length();
-       
-       for(int idx = 0; idx < strLen; idx++) {
-           char ch = strValue.charAt(idx);
-           if (ch == lParenChar) {
-              charStack.push(ch); 
-           }
-           else if (ch == rParenChar){
-              if (charStack.isEmpty() || (charStack.pop() != lParenChar)) {
-                 // Unbalanced parentheses
-                 result = false;
-                 break;
-              }   
-           }
-       }
-       
-       if (!charStack.isEmpty()) {
-          result = false;
-       }
-       
-       return result; 
-    }
-    
-    /**
-     * Method definition to check, whether the supplied string value 
-     * has balanced XPath comment delimiters. XPath comments have
-     * lexical form (: comment text :)
-     */
-    public static boolean isStrHasBalancedXPathCommentDelim(String strValue) {
-        
-        boolean result = true;
-        
-        // Sufficiently random character strings, that're unlikely 
-        // to occur within an XPath expression.        
-        String lDelimStr = new String(new int[] { 2 }, 0, 1);
-        String rDelimStr = new String(new int[] { 3 }, 0, 1);
-        
-        char lDelimChar = lDelimStr.charAt(0);
-        char rDelimChar = rDelimStr.charAt(0);
-        
-        strValue = strValue.replace("(:", lDelimStr);        
-        strValue = strValue.replace(":)", rDelimStr);
-        
-        Stack<Character> charStack = new Stack<Character>();
-        
-        int strLen = strValue.length();
-        
-        for(int idx = 0; idx < strLen; idx++) {
-            char ch = strValue.charAt(idx);
-            if (ch == lDelimChar) {
-               charStack.push(ch); 
-            }
-            else if (ch == rDelimChar){
-               if (charStack.isEmpty() || (charStack.pop() != lDelimChar)) {
-                  // Unbalanced comment string
-                  result = false;
-                  break;
-               }   
-            }
-        }
-        
-        if (!charStack.isEmpty()) {
-           result = false;
-        }
-        
-        return result; 
-    }
-    
     /**
      * Method definition to check whether, all the values of the 
      * supplied input sequence are XPath atomic values.
diff --git a/src/main/java/org/apache/xpath/axes/FilterExprIteratorSimple.java b/src/main/java/org/apache/xpath/axes/FilterExprIteratorSimple.java
index f122f1309..01add4df0 100644
--- a/src/main/java/org/apache/xpath/axes/FilterExprIteratorSimple.java
+++ b/src/main/java/org/apache/xpath/axes/FilterExprIteratorSimple.java
@@ -161,7 +161,7 @@ public class FilterExprIteratorSimple extends LocPathIterator
            result = new XMLNodeCursorImpl(nodeHandleList, dtmMgr);
         }
         else {
-        	obj1 = exprEvalResult.object();	
+           obj1 = exprEvalResult.object();	
         }
         
         if (result == null) {
diff --git a/src/main/java/org/apache/xpath/axes/LocPathIterator.java b/src/main/java/org/apache/xpath/axes/LocPathIterator.java
index cd607715e..e301495e1 100644
--- a/src/main/java/org/apache/xpath/axes/LocPathIterator.java
+++ b/src/main/java/org/apache/xpath/axes/LocPathIterator.java
@@ -285,7 +285,6 @@ public abstract class LocPathIterator extends PredicatedNodeTest
             throws javax.xml.transform.TransformerException
   {
     XMLNodeCursorImpl iter = new XMLNodeCursorImpl((LocPathIterator)m_clones.getInstance());
-
     iter.setRoot(contextNode, xctxt);
 
     return iter;
diff --git a/src/main/java/org/apache/xpath/compiler/XPathParser.java b/src/main/java/org/apache/xpath/compiler/XPathParser.java
index a27bb8765..ccd8d78b9 100644
--- a/src/main/java/org/apache/xpath/compiler/XPathParser.java
+++ b/src/main/java/org/apache/xpath/compiler/XPathParser.java
@@ -61,8 +61,8 @@ import org.apache.xalan.templates.ElemValueOf;
 import org.apache.xalan.templates.ElemVariable;
 import org.apache.xalan.templates.ElemWhen;
 import org.apache.xalan.templates.StylesheetRoot;
+import org.apache.xalan.xslt.util.StringUtil;
 import org.apache.xalan.xslt.util.XslTransformData;
-import org.apache.xalan.xslt.util.XslTransformEvaluationHelper;
 import org.apache.xerces.dom.DOMInputImpl;
 import org.apache.xerces.impl.xs.XSLoaderImpl;
 import org.apache.xerces.xs.XSModel;
@@ -310,6 +310,8 @@ public class XPathParser
   
   private String m_xpathDefaultNamespace = null;
   
+  private boolean m_op_group_parse = false;
+
   
   /**
    * The parser constructor.
@@ -362,7 +364,7 @@ public class XPathParser
     
     // Remove XPath expression comments from the supplied expression,
     // before parse of an XPath expression.
-    if (XslTransformEvaluationHelper.isStrHasBalancedXPathCommentDelim(expression)) {
+    if (StringUtil.isStrHasBalancedXPathCommentDelim(expression)) {
        expression = expression.replaceAll("\\(:.*:\\)", "");
     }
     else {
@@ -397,7 +399,7 @@ public class XPathParser
         	   boolean isXPathExprStrHasBalancedParens = true;
         	   for (int idx = 0; idx < strArr.length; idx++) {
         		  String str1 = strArr[idx];
-        		  if (!XslTransformEvaluationHelper.isStrHasBalancedParentheses(str1, '(', ')')) {
+        		  if (!StringUtil.isStrHasBalancedParentheses(str1, '(', ')')) {
         			  isXPathExprStrHasBalancedParens = false; 
         		  }
         	   }
@@ -1097,7 +1099,7 @@ public class XPathParser
       else {
          String argDetailsAccumulatedStrSoFar = "(" + getStrValueFromStrList(
                                                                   argDetailsStrPartsList) + ")";         
-         if (!XslTransformEvaluationHelper.isStrHasBalancedParentheses(argDetailsAccumulatedStrSoFar, '(', ')')) {
+         if (!StringUtil.isStrHasBalancedParentheses(argDetailsAccumulatedStrSoFar, '(', ')')) {
             argDetailsStrPartsList.add(m_token);
             nextToken();
             isXpathDynamicFuncCallParseAhead = true;
@@ -1564,7 +1566,7 @@ public class XPathParser
             	 StringBuffer arrStrBuff = new StringBuffer();
             	 arrStrBuff.append(m_token);
             	 nextToken();
-            	 while (!((tokenIs(',') && XslTransformEvaluationHelper.isStrHasBalancedParentheses(arrStrBuff.toString(), '[',']')) || 
+            	 while (!((tokenIs(',') && StringUtil.isStrHasBalancedParentheses(arrStrBuff.toString(), '[',']')) || 
             			                                                                                           (isSequenceConstructor && tokenIs(')')) || 
             			                                                                                           (isSquareArrayConstructor && tokenIs(']')) || 
             			                                                                                            (m_token == null))) {           		 
@@ -1700,7 +1702,7 @@ public class XPathParser
             	 rParenChar = '}'; 
              }
              
-             boolean isStrHasBalancedParentheses = XslTransformEvaluationHelper.isStrHasBalancedParentheses(
+             boolean isStrHasBalancedParentheses = StringUtil.isStrHasBalancedParentheses(
 								            		                                                    seqOrArrayMemberXPathExprStr, 
 								            		                                                    lParenChar, rParenChar);
              if (!isStrHasBalancedParentheses) {
@@ -2401,7 +2403,7 @@ public class XPathParser
 			strBuff.append(strList.get(idx)); 
 		 }
 		 
-		 if (XslTransformEvaluationHelper.isStrHasBalancedParentheses(strBuff.toString(), '(', ')')) {
+		 if (StringUtil.isStrHasBalancedParentheses(strBuff.toString(), '(', ')')) {
 			 result = true; 
 		 }
 	  }
@@ -2709,7 +2711,7 @@ public class XPathParser
          else if (tokenIs(',') && (",".equals(prevTokenStrBeforeFor) || "(".equals(prevTokenStrBeforeFor))) {
         	String lstStrJoin = xPathReturnExprStrPartsList.toString();
         	lstStrJoin = lstStrJoin.substring(1, lstStrJoin.length()-1);
-        	if (XslTransformEvaluationHelper.isStrHasBalancedParentheses(lstStrJoin, '(', ')')) {        	
+        	if (StringUtil.isStrHasBalancedParentheses(lstStrJoin, '(', ')')) {        	
         	   break;
         	}
         	else {
@@ -2990,7 +2992,7 @@ public class XPathParser
       
       String probableBranchConditionExprStr = probableBranchConditionXPathStrBuff.toString();
       int thenTokenComputedRevisedIdx = 0;
-      while (!XslTransformEvaluationHelper.isStrHasBalancedParentheses(probableBranchConditionExprStr, '(', ')')) {
+      while (!StringUtil.isStrHasBalancedParentheses(probableBranchConditionExprStr, '(', ')')) {
     	  boolean isBreak = false;
     	  for (int idx = (thenTokenEffectiveComputedIdx + 1); idx < tokenQueueSize; idx++) {
     		 Object tokenObj = (m_ops.m_tokenQueue).elementAt(idx);
@@ -2998,7 +3000,7 @@ public class XPathParser
         	 if (!"then".equals(tokenStrValue)) {
         	    probableBranchConditionExprStr += tokenStrValue;  
         	 }
-        	 else if (XslTransformEvaluationHelper.isStrHasBalancedParentheses(probableBranchConditionExprStr, '(', ')')) {
+        	 else if (StringUtil.isStrHasBalancedParentheses(probableBranchConditionExprStr, '(', ')')) {
         		thenTokenComputedRevisedIdx = idx;
         		isBreak = true;
         		break; 
@@ -3033,7 +3035,7 @@ public class XPathParser
       
       String probableElseExprStr = probableElseExprStrBuff.toString();
       int elseTokenComputedRevisedIdx = 0;
-      while (!XslTransformEvaluationHelper.isStrHasBalancedParentheses(probableElseExprStr, '(', ')')) {
+      while (!StringUtil.isStrHasBalancedParentheses(probableElseExprStr, '(', ')')) {
     	  boolean isBreak = false;
     	  for (int idx = (elseTokenEffectiveComputedIdx - 1); idx >= 0; idx--) {
     		  Object tokenObj = (m_ops.m_tokenQueue).elementAt(idx);
@@ -3045,7 +3047,7 @@ public class XPathParser
         			probableElseExprStr += (tokenObj.toString() + " "); 
         		 }
         		 probableElseExprStr = probableElseExprStr.trim();
-        		 if (XslTransformEvaluationHelper.isStrHasBalancedParentheses(probableElseExprStr, '(', ')')) {
+        		 if (StringUtil.isStrHasBalancedParentheses(probableElseExprStr, '(', ')')) {
         			elseTokenComputedRevisedIdx = idx; 
         			isBreak = true;
         			break; 
@@ -3273,7 +3275,7 @@ public class XPathParser
                  
                  char lParenChar = '(';
                  char rParenChar = ')';                 
-                 boolean isStrHasBalancedParentheses = XslTransformEvaluationHelper.isStrHasBalancedParentheses(
+                 boolean isStrHasBalancedParentheses = StringUtil.isStrHasBalancedParentheses(
 								                		                                                    seqItemXPathExprStr, 
 								                		                                                    lParenChar, rParenChar);
                  if (!isStrHasBalancedParentheses) {
@@ -3476,7 +3478,7 @@ public class XPathParser
         			
         			char lParenChar = '(';
         			char rParenChar = ')';                 
-        			boolean isStrHasBalancedParentheses = XslTransformEvaluationHelper.isStrHasBalancedParentheses(seqItemXPathExprStr, 
+        			boolean isStrHasBalancedParentheses = StringUtil.isStrHasBalancedParentheses(seqItemXPathExprStr, 
         					                                                          												lParenChar, rParenChar);
         			if (!isStrHasBalancedParentheses) {
         				isXPathParseOkToProceed = false;
@@ -4473,8 +4475,10 @@ public class XPathParser
     else if (m_tokenChar == '(')
     {
       nextToken();
-      appendOp(2, OpCodes.OP_GROUP);     
+      appendOp(2, OpCodes.OP_GROUP);
+      m_op_group_parse = true;
       Expr();
+      m_op_group_parse = false;
       consumeExpected(')');      
       
       m_ops.setOp(opPos + OpMap.MAPINDEX_LENGTH,
@@ -6178,7 +6182,7 @@ public class XPathParser
  		  if (!(tokenIs(',') || tokenIs(rParen))) {
  			  xpathExpr += m_token;
  			  nextToken();
- 			  if (tokenIs(rParen) && !XslTransformEvaluationHelper.isStrHasBalancedParentheses(lParen + xpathExpr, lParen, rParen)) {
+ 			  if (tokenIs(rParen) && !StringUtil.isStrHasBalancedParentheses(lParen + xpathExpr, lParen, rParen)) {
  				  if (lookahead(null, 1)) {
  					  xpathExprPartList.add(xpathExpr);
  					  break;
@@ -6198,7 +6202,7 @@ public class XPathParser
  				  }
  				  nextToken();
  				  if (tokenIs(rParen)) {
- 					  if (XslTransformEvaluationHelper.isStrHasBalancedParentheses(lParen + xpathExpr + rParen, lParen, rParen) 
+ 					  if (StringUtil.isStrHasBalancedParentheses(lParen + xpathExpr + rParen, lParen, rParen) 
  							                                                    									&& !lookahead(rParen, 1)) {
  						  xpathExpr = (lParen + xpathExpr + m_token); 
  						  nextToken();
@@ -6394,7 +6398,11 @@ public class XPathParser
        else if (tokenIs("function")) {
      	   parseFunctionItemSequenceType(xpathSequenceTypeExpr);
      	   if (m_token != null) {
-              setSequenceTypeOccurenceIndicator(xpathSequenceTypeExpr, isXPathInlineFunctionParse);  
+              setSequenceTypeOccurenceIndicator(xpathSequenceTypeExpr, isXPathInlineFunctionParse);
+              if (m_op_group_parse) {
+            	  m_token = ")";
+            	  m_tokenChar = ')';
+              }
            }
        }
        else if (tokenIs("map")) {
@@ -6860,7 +6868,7 @@ public class XPathParser
  				   nextToken();
  				}
  				else if (tokenIs(',')) {
- 				   if (!XslTransformEvaluationHelper.isStrHasBalancedParentheses(typedFunctionTestParamSpec, '(', ')')) {
+ 				   if (!StringUtil.isStrHasBalancedParentheses(typedFunctionTestParamSpec, '(', ')')) {
  				      typedFunctionTestParamSpec = typedFunctionTestParamSpec + m_token;
  				      nextToken();
  				   }
@@ -6901,9 +6909,19 @@ public class XPathParser
  		  consumeExpected("as");
  		  
  		  String typedFunctionTestReturnType = "";
- 		  while (m_token != null) {
- 			 typedFunctionTestReturnType = typedFunctionTestReturnType + m_token;
- 			 nextToken();
+ 		  if (m_op_group_parse) {
+ 			  while (m_token != null && !(lookahead(null, 1) || lookahead(null, 2))) {
+ 				  typedFunctionTestReturnType = typedFunctionTestReturnType + m_token; 			    
+ 				  nextToken();
+ 			  }
+
+ 			  consumeExpected(')'); 
+ 		  }
+ 		  else {
+ 			  while (m_token != null) {
+ 				  typedFunctionTestReturnType = typedFunctionTestReturnType + m_token;
+ 				  nextToken();
+ 			  } 			  
  		  }
  		  
  		  if (!"".equals(typedFunctionTestReturnType)) {
diff --git a/src/main/java/org/apache/xpath/composite/XPathLetExpr.java b/src/main/java/org/apache/xpath/composite/XPathLetExpr.java
index f812e7c9a..7385b931c 100644
--- a/src/main/java/org/apache/xpath/composite/XPathLetExpr.java
+++ b/src/main/java/org/apache/xpath/composite/XPathLetExpr.java
@@ -17,7 +17,6 @@
 package org.apache.xpath.composite;
 
 import java.util.ArrayList;
-import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 import java.util.Vector;
@@ -85,7 +84,7 @@ public class XPathLetExpr extends Expression {
           prefixTable = (List<XMLNSDecl>)elemTemplateElement.getPrefixTable();
        }              
        
-       Map<QName, XObject> letExprVarBindingMap = new HashMap<QName, XObject>();
+       Map<QName, XObject> xpathVarMap = xctxt.getXPathVarMap();
        
        for (int idx = 0; idx < m_letExprVarBindingList.size(); idx++) {          
           LetExprVarBinding letExprVarBinding = m_letExprVarBindingList.get(idx);
@@ -124,6 +123,9 @@ public class XPathLetExpr extends Expression {
           else if (expr instanceof XPathNamedFunctionReference) {
         	  xpathNamedFuncRef = (XPathNamedFunctionReference)expr; 
           }
+          else if (expr instanceof Function) {
+        	  varBindingEvalResult = expr.execute(xctxt);
+          }
           
           if (xpathNamedFuncRef != null) {
         	  String funcNamespace = xpathNamedFuncRef.getFuncNamespace();
@@ -181,12 +183,9 @@ public class XPathLetExpr extends Expression {
           
           m_xpathVarList.add(new QName(varName));
           
-          letExprVarBindingMap.put(new QName(varName), varBindingEvalResult);
+          xpathVarMap.put(new QName(varName), varBindingEvalResult);
        }              
        
-       Map<QName, XObject> xpathVarMap = xctxt.getXPathVarMap();
-       xpathVarMap.putAll(letExprVarBindingMap);
-       
        if (prefixTable != null) {
           m_returnExprXPathStr = XslTransformEvaluationHelper.replaceNsUrisWithPrefixesOnXPathStr(
                                                                                 m_returnExprXPathStr, prefixTable);
@@ -202,7 +201,7 @@ public class XPathLetExpr extends Expression {
        evalResult = returnExprXpath.execute(xctxt, contextNode, xctxt.getNamespaceContext());
        
        if (evalResult == null) {
-          // To return an empty sequence
+          // Return an empty sequence
           evalResult = new ResultSequence();   
        }
         
diff --git a/src/main/java/org/apache/xpath/composite/XPathSequenceConstructor.java b/src/main/java/org/apache/xpath/composite/XPathSequenceConstructor.java
index 7a109c0ed..4edb3362b 100644
--- a/src/main/java/org/apache/xpath/composite/XPathSequenceConstructor.java
+++ b/src/main/java/org/apache/xpath/composite/XPathSequenceConstructor.java
@@ -44,6 +44,7 @@ import org.apache.xpath.objects.XBooleanStatic;
 import org.apache.xpath.objects.XMLNodeCursorImpl;
 import org.apache.xpath.objects.XNumber;
 import org.apache.xpath.objects.XObject;
+import org.apache.xpath.patterns.NodeTest;
 
 import xml.xpath31.processor.types.XSBoolean;
 import xml.xpath31.processor.types.XSNumericType;
@@ -109,7 +110,7 @@ public class XPathSequenceConstructor extends Expression {
         
         int contextNode = xctxt.getContextNode();
         
-        ElemTemplateElement elemTemplateElement = (ElemTemplateElement)xctxt.getNamespaceContext();
+        ElemTemplateElement elemTemplateElement = (ElemTemplateElement)(xctxt.getNamespaceContext());
         List<XMLNSDecl> prefixTable = null;
         if (elemTemplateElement != null) {
             prefixTable = (List<XMLNSDecl>)elemTemplateElement.getPrefixTable();
@@ -123,7 +124,8 @@ public class XPathSequenceConstructor extends Expression {
         
         ResultSequence resultSeq = new ResultSequence();
         
-        for (int idx = 0; idx < m_sequenceConstructorXPathParts.size(); idx++) {
+        int seqConstructorPartsSize = m_sequenceConstructorXPathParts.size();
+        for (int idx = 0; idx < seqConstructorPartsSize; idx++) {
            String xpathExprStr = m_sequenceConstructorXPathParts.get(idx);
            
            if (prefixTable != null) {
@@ -152,10 +154,31 @@ public class XPathSequenceConstructor extends Expression {
                
                if (dtmIter != null) {
                   int nextNode;
+                  boolean isEmptyNodeSet = true;
                   while ((nextNode = dtmIter.nextNode()) != DTM.NULL)
                   {
+                	  isEmptyNodeSet = false;
                       XMLNodeCursorImpl xNodeSetItem = new XMLNodeCursorImpl(nextNode, xctxt);
-                      resultSeq.add(xNodeSetItem);
+                      resultSeq.add(xNodeSetItem);                                            
+                  }
+                  
+                  if (isEmptyNodeSet) {
+                	  String funcNameRef = ((NodeTest)xpathExpr).getLocalName();
+                	  XSL3FunctionService xslFunctionService = XSLFunctionBuilder.getXSLFunctionService();
+                	  int hashCharIdx = funcNameRef.indexOf('#');
+                	  if ((hashCharIdx > -1) && xslFunctionService.isFuncArityWellFormed(funcNameRef)) {
+                		  if (prefixTable != null) {
+                			  xpathExprStr = XslTransformEvaluationHelper.replaceNsUrisWithPrefixesOnXPathStr(xpathExprStr, prefixTable);
+                		  }
+
+                		  XPath xpathObj2 = new XPath(xpathExprStr, srcLocator, xctxt.getNamespaceContext(), XPath.SELECT, null);
+                		  if (m_vars != null) {
+                			  xpathObj2.fixupVariables(m_vars, m_globals_size);
+                		  }
+
+                		  Expression xpathExpr2 = xpathObj2.getExpression();
+                		  resultSeq.add((XPathNamedFunctionReference)xpathExpr2);
+                	  }
                   }
                }
                else if (xpathExprStr.startsWith("$") && xpathExprStr.contains("[") && 
@@ -229,6 +252,9 @@ public class XPathSequenceConstructor extends Expression {
         	   XObject funcEvalResult = xsl3ConstructorOrExtensionFunction.execute(xctxt);        	           	           	          	   
         	   resultSeq.add(funcEvalResult);
            }
+           else if (xpathExpr instanceof XPathNamedFunctionReference) {
+        	   resultSeq.add((XPathNamedFunctionReference)xpathExpr);
+           }
            else {
         	   if (m_vars != null) {
         		   xpathObj.fixupVariables(m_vars, m_globals_size);
@@ -345,7 +371,7 @@ public class XPathSequenceConstructor extends Expression {
         	result = newResultSeq;
         }
         else {
-           result = resultSeq; 	
+        	result = resultSeq;
         }
         
         return result;
diff --git a/src/main/java/org/apache/xpath/functions/FuncDoc.java b/src/main/java/org/apache/xpath/functions/FuncDoc.java
index bb60bc107..5da43c6ec 100644
--- a/src/main/java/org/apache/xpath/functions/FuncDoc.java
+++ b/src/main/java/org/apache/xpath/functions/FuncDoc.java
@@ -25,6 +25,7 @@ import java.net.URL;
 import javax.xml.transform.SourceLocator;
 import javax.xml.transform.TransformerException;
 
+import org.apache.xalan.xslt.util.StringUtil;
 import org.apache.xalan.xslt.util.XslTransformEvaluationHelper;
 import org.apache.xpath.ExpressionNode;
 import org.apache.xpath.XPathContext;
@@ -126,7 +127,7 @@ public class FuncDoc extends FunctionOneArg {
         		}
         	}
 
-        	String urlResourceStrContents = XslTransformEvaluationHelper.getStringContentFromUrl(resolvedArg0Url);
+        	String urlResourceStrContents = StringUtil.getStringContentFromUrl(resolvedArg0Url);
 
         	result = FuncParseXml.getNodeSetFromStr(urlResourceStrContents, xctxt, m_errorHandler);
         }
diff --git a/src/main/java/org/apache/xpath/functions/FuncFunctionArity.java b/src/main/java/org/apache/xpath/functions/FuncFunctionArity.java
index 8b310cb8b..ace49eca4 100644
--- a/src/main/java/org/apache/xpath/functions/FuncFunctionArity.java
+++ b/src/main/java/org/apache/xpath/functions/FuncFunctionArity.java
@@ -19,12 +19,14 @@ package org.apache.xpath.functions;
 
 import java.util.Arrays;
 import java.util.List;
+import java.util.Map;
 
 import javax.xml.XMLConstants;
 import javax.xml.transform.SourceLocator;
 import javax.xml.transform.TransformerException;
 
 import org.apache.xalan.templates.ElemFunction;
+import org.apache.xalan.templates.ElemVariable;
 import org.apache.xalan.templates.StylesheetRoot;
 import org.apache.xalan.transformer.TransformerImpl;
 import org.apache.xalan.xslt.util.XslTransformEvaluationHelper;
@@ -81,9 +83,31 @@ public class FuncFunctionArity extends FunctionDef1Arg
 		
 		if (arg0 instanceof Variable) {
 		   Variable var1 = (Variable)arg0;
-		   org.apache.xpath.XPath xpathSelectExpr = (var1.getElemVariable()).getSelect();
-		   Expression selectExpr = xpathSelectExpr.getExpression();
+		   Expression selectExpr = null;
+		   ElemVariable elemVariable = var1.getElemVariable();
+		   if (elemVariable != null) {
+			  org.apache.xpath.XPath xpathSelectExpr = elemVariable.getSelect();
+			  selectExpr = xpathSelectExpr.getExpression();
+		   }
+		   else {
+			   Map<QName,XObject> xpathVarMap = xctxt.getXPathVarMap();
+			   QName varQName = var1.getQName();
+			   XObject varValue = xpathVarMap.get(varQName);
+			   if (varValue != null) {
+				   Object obj1 = varValue.object();
+				   if (obj1 instanceof Function) {
+					   Function func1 = (Function)obj1;
+					   // REVISIT   function arity may have more than one value
+					   short arity = (func1.getDefinedArity())[0];					   
+					   result = new XSInteger("" + arity);
+					   
+					   return result;
+				   }
+			   }
+		   }
+		   
 		   XObject xObj = var1.execute(xctxt);
+		   
 		   if (xObj instanceof XPathNamedFunctionReference) {
 			   XPathNamedFunctionReference xpathNamedFunctionReference = (XPathNamedFunctionReference)xObj;
 			   
@@ -211,9 +235,8 @@ public class FuncFunctionArity extends FunctionDef1Arg
 		 * This is an XPath function's arity value, computed mainly during
 		 * XPath parse of function expression specified within an XSL
 		 * stylesheet or an XPath literal expression. This arity value is
-		 * further verified below with an XPath function's arity value 
-		 * defined within XPath 3.1 F&O spec and correspondingly configured
-		 * within Xalan-J code.
+		 * verified below with an XPath function's arity value defined within 
+		 * XPath 3.1 F&O spec and correspondingly configured within Xalan-J code.
 		 */
 		final Short runTimeArity = xpathNamedFunctionReference.getArity();
 		
@@ -224,6 +247,8 @@ public class FuncFunctionArity extends FunctionDef1Arg
 		
 		String funcNameRefStr = "{" + funcNamespace + "}" + funcName + "#" + runTimeArity;
 		
+		ElemFunction elemFunction = xpathNamedFunctionReference.getXslStylesheetFunction();
+		
 		if ((FunctionTable.XPATH_BUILT_IN_FUNCS_NS_URI).equals(funcNamespace) || (FunctionTable.XPATH_BUILT_IN_MATH_FUNCS_NS_URI).equals(funcNamespace) ||
 				                                                                 (FunctionTable.XPATH_BUILT_IN_MAP_FUNCS_NS_URI).equals(funcNamespace) || 
 				                                                                 (FunctionTable.XPATH_BUILT_IN_ARRAY_FUNCS_NS_URI).equals(funcNamespace) ||
@@ -251,6 +276,9 @@ public class FuncFunctionArity extends FunctionDef1Arg
 			}
 			
 		}
+		else if (elemFunction != null) {
+			result = new XSInteger("" + elemFunction.getArity()); 
+		}
 		
 		if (result == null) {
 			throw new TransformerException("XPST0017 : An XSL function definition for function reference " + funcNameRefStr 
diff --git a/src/main/java/org/apache/xpath/functions/FuncFunctionName.java b/src/main/java/org/apache/xpath/functions/FuncFunctionName.java
index 873ba8f5f..66c2047d9 100644
--- a/src/main/java/org/apache/xpath/functions/FuncFunctionName.java
+++ b/src/main/java/org/apache/xpath/functions/FuncFunctionName.java
@@ -19,12 +19,14 @@ package org.apache.xpath.functions;
 
 import java.util.Arrays;
 import java.util.List;
+import java.util.Map;
 
 import javax.xml.XMLConstants;
 import javax.xml.transform.SourceLocator;
 import javax.xml.transform.TransformerException;
 
 import org.apache.xalan.templates.ElemFunction;
+import org.apache.xalan.templates.ElemVariable;
 import org.apache.xalan.templates.StylesheetRoot;
 import org.apache.xalan.xslt.util.XslTransformEvaluationHelper;
 import org.apache.xml.utils.QName;
@@ -80,8 +82,39 @@ public class FuncFunctionName extends FunctionDef1Arg
 		
 		if (arg0 instanceof Variable) {
 			Variable var1 = (Variable)arg0;
-			org.apache.xpath.XPath xpathSelectExpr = (var1.getElemVariable()).getSelect();
-			Expression selectExpr = xpathSelectExpr.getExpression();
+			Expression selectExpr = null;
+			ElemVariable elemVariable = var1.getElemVariable();
+			if (elemVariable != null) {
+			   org.apache.xpath.XPath xpathSelectExpr = elemVariable.getSelect();
+			   selectExpr = xpathSelectExpr.getExpression();
+			}
+			else {
+			   Map<QName,XObject> xpathVarMap = xctxt.getXPathVarMap();
+			   QName varQName = var1.getQName();
+			   XObject varValue = xpathVarMap.get(varQName);
+			   if (varValue != null) {
+				   Object obj1 = varValue.object();				   
+				   if (obj1 instanceof XSL3ConstructorOrExtensionFunction) {
+					   XSL3ConstructorOrExtensionFunction xsl3ConstructorOrExtensionFunction = (XSL3ConstructorOrExtensionFunction)obj1;
+					   String localName = xsl3ConstructorOrExtensionFunction.getFunctionName();
+					   String namespace = xsl3ConstructorOrExtensionFunction.getNamespace();
+					   
+					   result = new XSQName(null, localName, namespace);
+
+					   return result;
+				   }
+				   else if (obj1 instanceof Function) {
+					   Function func1 = (Function)obj1;
+					   String localName = func1.getLocalName();
+					   String namespace = func1.getNamespace();
+					   
+					   result = new XSQName(null, localName, namespace);
+
+					   return result;
+				   }
+			   }
+			}
+			
 			XObject xObj = var1.execute(xctxt);
 			if (xObj instanceof XPathNamedFunctionReference) {
 			   XPathNamedFunctionReference xpathNamedFunctionReference = (XPathNamedFunctionReference)xObj;
@@ -257,7 +290,7 @@ public class FuncFunctionName extends FunctionDef1Arg
 			result = new XSQName(prefix, localName, namespace);
 		}
 		else {
-			// REVISIT
+			result = new XSQName(prefix, localName, namespace);
 		}
 		
 		return result;
diff --git a/src/main/java/org/apache/xpath/functions/FuncUnparsedText.java b/src/main/java/org/apache/xpath/functions/FuncUnparsedText.java
index eabfade54..04ad1b142 100644
--- a/src/main/java/org/apache/xpath/functions/FuncUnparsedText.java
+++ b/src/main/java/org/apache/xpath/functions/FuncUnparsedText.java
@@ -26,6 +26,7 @@ import java.net.URL;
 import javax.xml.transform.SourceLocator;
 
 import org.apache.xalan.res.XSLMessages;
+import org.apache.xalan.xslt.util.StringUtil;
 import org.apache.xalan.xslt.util.XslTransformEvaluationHelper;
 import org.apache.xpath.ExpressionNode;
 import org.apache.xpath.XPathContext;
@@ -112,7 +113,7 @@ public class FuncUnparsedText extends Function2Args {
         	  }
           }
               
-          String urlStrContents = XslTransformEvaluationHelper.getStringContentFromUrl(resolvedArg0Url);
+          String urlStrContents = StringUtil.getStringContentFromUrl(resolvedArg0Url);
 
           String resultStr = null;
           if (encodingStr != null) {
diff --git a/src/main/java/org/apache/xpath/functions/json/FuncJsonDoc.java b/src/main/java/org/apache/xpath/functions/json/FuncJsonDoc.java
index 1e74947dc..809bc2133 100644
--- a/src/main/java/org/apache/xpath/functions/json/FuncJsonDoc.java
+++ b/src/main/java/org/apache/xpath/functions/json/FuncJsonDoc.java
@@ -31,6 +31,7 @@ import java.util.Set;
 import javax.xml.transform.SourceLocator;
 
 import org.apache.xalan.res.XSLMessages;
+import org.apache.xalan.xslt.util.StringUtil;
 import org.apache.xalan.xslt.util.XslTransformEvaluationHelper;
 import org.apache.xpath.Expression;
 import org.apache.xpath.XPathContext;
@@ -238,7 +239,7 @@ public class FuncJsonDoc extends JsonFunction {
 				resolvedArg0Url = new URL(hrefStrVal);   
 			}
 
-			String urlStrContents = XslTransformEvaluationHelper.getStringContentFromUrl(resolvedArg0Url);
+			String urlStrContents = StringUtil.getStringContentFromUrl(resolvedArg0Url);
 			
 			result = getJsonXdmValueFromStr(urlStrContents, optionIsLiberal, optionDuplicatesValStr);
 
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 f9949db1f..bcbd16bba 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-08-21T15:07:36Z" fail="31" name="as" pass="73" skipped="4" statusUnknown="1" totalRun="105">
+<?xml version="1.0" encoding="UTF-8"?><testrun dateTime="2025-08-27T11:53:47Z" 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 8eaba4088..6748ecd3d 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-08-21T15:07:37Z" fail="15" name="avt" pass="20" skipped="0" statusUnknown="0" totalRun="35">
+<?xml version="1.0" encoding="UTF-8"?><testrun dateTime="2025-08-27T11:53:50Z" 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 3cd8edfb1..df1097fd5 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-08-21T15:07:58Z" fail="29" name="expand-text" pass="33" skipped="0" statusUnknown="0" totalRun="62">
+<?xml version="1.0" encoding="UTF-8"?><testrun dateTime="2025-08-27T11:54:58Z" fail="29" name="expand-text" pass="33" skipped="0" statusUnknown="0" totalRun="62">
    <testResult status="pass" testName="cvt-001"/>
    <testResult status="pass" testName="cvt-002"/>
    <testResult status="pass" testName="cvt-003"/>
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 62496a2e2..0ee66b0a4 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-08-21T15:07:37Z" fail="59" name="match" pass="69" skipped="8" statusUnknown="1" totalRun="129">
+<?xml version="1.0" encoding="UTF-8"?><testrun dateTime="2025-08-27T11:53:51Z" 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 8fc2baec5..de12fc664 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-08-21T15:07:38Z" fail="5" name="select" pass="19" skipped="0" statusUnknown="1" totalRun="25">
+<?xml version="1.0" encoding="UTF-8"?><testrun dateTime="2025-08-27T11:53:55Z" 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 b286d4a7f..09114c0bd 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-08-21T15:07:58Z" fail="15" name="xpath-default-namespace" pass="11" skipped="0" statusUnknown="0" totalRun="26">
+<?xml version="1.0" encoding="UTF-8"?><testrun dateTime="2025-08-27T11:54:57Z" 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 43ae20a56..c2ac0445e 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-08-21T15:07:51Z" fail="8" name="attribute-set" pass="41" skipped="1" statusUnknown="0" totalRun="49">
+<?xml version="1.0" encoding="UTF-8"?><testrun dateTime="2025-08-27T11:54:23Z" 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 266a8cf62..875ff2ab7 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-08-21T15:07:51Z" fail="12" name="character-map" pass="15" skipped="1" statusUnknown="1" totalRun="28">
+<?xml version="1.0" encoding="UTF-8"?><testrun dateTime="2025-08-27T11:54:22Z" 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 8a36c207f..f212b78f9 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-08-21T15:07:43Z" fail="18" name="function" pass="50" skipped="4" statusUnknown="1" totalRun="69">
+<?xml version="1.0" encoding="UTF-8"?><testrun dateTime="2025-08-27T11:54:13Z" fail="18" name="function" pass="50" skipped="4" statusUnknown="1" totalRun="69">
    <testResult status="fail" testName="function-0001">
       <outResult/>
    </testResult>
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 edca9e945..82c49daf3 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-08-21T15:07:34Z" fail="3" name="variable" pass="16" skipped="0" statusUnknown="1" totalRun="20">
+<?xml version="1.0" encoding="UTF-8"?><testrun dateTime="2025-08-27T11:53:44Z" 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 115e13d1e..7e96d94b0 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-08-21T15:07:51Z" fail="18" name="axes" pass="183" skipped="0" statusUnknown="0" totalRun="201">
+<?xml version="1.0" encoding="UTF-8"?><testrun dateTime="2025-08-27T11:54:24Z" 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 31d5c6cc0..cfbc2dfe2 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-08-21T15:07:52Z" fail="5" name="castable" pass="4" skipped="0" statusUnknown="0" totalRun="9">
+<?xml version="1.0" encoding="UTF-8"?><testrun dateTime="2025-08-27T11:54:29Z" 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 15502f6af..1ffc09c3a 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-08-21T15:07:52Z" fail="0" name="expression" pass="9" skipped="0" statusUnknown="1" totalRun="10">
+<?xml version="1.0" encoding="UTF-8"?><testrun dateTime="2025-08-27T11:54:30Z" 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 b8539c7eb..d36d7a5c6 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-08-21T15:07:52Z" fail="2" name="for" pass="1" skipped="0" statusUnknown="1" totalRun="4">
+<?xml version="1.0" encoding="UTF-8"?><testrun dateTime="2025-08-27T11:54:30Z" 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 293fb3b03..36776a051 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-08-21T15:07:54Z" fail="6" name="higher-order-functions" pass="18" skipped="0" statusUnknown="1" totalRun="25">
+<?xml version="1.0" encoding="UTF-8"?><testrun dateTime="2025-08-27T11:54:36Z" fail="2" name="higher-order-functions" pass="22" skipped="0" statusUnknown="1" totalRun="25">
    <testResult status="pass" testName="higher-order-functions-001"/>
    <testResult status="pass" testName="higher-order-functions-002"/>
    <testResult status="pass" testName="higher-order-functions-003"/>
@@ -9,7 +9,7 @@
    <testResult status="pass" testName="higher-order-functions-008"/>
    <testResult status="pass" testName="higher-order-functions-009"/>
    <testResult status="pass" testName="higher-order-functions-010"/>
-   <testResult status="fail" testName="higher-order-functions-011"/>
+   <testResult status="pass" testName="higher-order-functions-011"/>
    <testResult status="pass" testName="higher-order-functions-012"/>
    <testResult status="pass" testName="higher-order-functions-013"/>
    <testResult status="pass" testName="higher-order-functions-014"/>
@@ -18,9 +18,9 @@
    <testResult status="pass" testName="higher-order-functions-017"/>
    <testResult status="pass" testName="higher-order-functions-018"/>
    <testResult status="pass" testName="higher-order-functions-019"/>
-   <testResult status="fail" testName="higher-order-functions-020"/>
-   <testResult status="fail" testName="higher-order-functions-021"/>
-   <testResult status="fail" testName="higher-order-functions-022"/>
+   <testResult status="pass" testName="higher-order-functions-020"/>
+   <testResult status="pass" testName="higher-order-functions-021"/>
+   <testResult status="pass" testName="higher-order-functions-022"/>
    <testResult status="fail" testName="higher-order-functions-023"/>
    <testResult status="fail" testName="higher-order-functions-024"/>
    <testResult testName="higher-order-functions-025"/>
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 e3963e9dc..81fc5a7a3 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-08-21T15:07:53Z" fail="25" name="math" pass="124" skipped="0" statusUnknown="1" totalRun="150">
+<?xml version="1.0" encoding="UTF-8"?><testrun dateTime="2025-08-27T11:54:31Z" 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 8098b0c10..14effe6ee 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-08-21T15:07:54Z" fail="36" name="nodetest" pass="2" skipped="0" statusUnknown="0" totalRun="38">
+<?xml version="1.0" encoding="UTF-8"?><testrun dateTime="2025-08-27T11:54:34Z" 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 955c3c0e6..0aeb83213 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-08-21T15:07:54Z" fail="3" name="path" pass="7" skipped="0" statusUnknown="0" totalRun="10">
+<?xml version="1.0" encoding="UTF-8"?><testrun dateTime="2025-08-27T11:54:36Z" 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 ffdbed97f..1a98927a8 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-08-21T15:07:55Z" fail="7" name="predicate" pass="50" skipped="0" statusUnknown="0" totalRun="57">
+<?xml version="1.0" encoding="UTF-8"?><testrun dateTime="2025-08-27T11:54:37Z" 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 a36400496..36625c1b3 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-08-21T15:07:57Z" fail="0" name="deep-equal" pass="2" skipped="0" statusUnknown="0" totalRun="2">
+<?xml version="1.0" encoding="UTF-8"?><testrun dateTime="2025-08-27T11:54:47Z" 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 ddfa3957f..97f0809c8 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-08-21T15:07:58Z" fail="32" name="format-number" pass="38" skipped="4" statusUnknown="0" totalRun="70">
+<?xml version="1.0" encoding="UTF-8"?><testrun dateTime="2025-08-27T11:54:54Z" 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 e2e0967c6..3ffaf3840 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-08-21T15:07:58Z" fail="8" name="json-to-xml" pass="24" skipped="0" statusUnknown="1" totalRun="33">
+<?xml version="1.0" encoding="UTF-8"?><testrun dateTime="2025-08-27T11:55:00Z" 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 8d98753ff..8081da90a 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-08-21T15:07:57Z" fail="3" name="key" pass="21" skipped="0" statusUnknown="1" totalRun="25">
+<?xml version="1.0" encoding="UTF-8"?><testrun dateTime="2025-08-27T11:54:53Z" fail="3" name="key" pass="21" skipped="0" statusUnknown="1" totalRun="25">
    <testResult status="pass" testName="key-001"/>
    <testResult status="fail" testName="key-002"/>
    <testResult status="pass" testName="key-003"/>
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 5c3edbfed..fc8cab667 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-08-21T15:07:57Z" fail="11" name="position" pass="126" skipped="0" statusUnknown="1" totalRun="138">
+<?xml version="1.0" encoding="UTF-8"?><testrun dateTime="2025-08-27T11:54:47Z" 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 7ad644f64..3a2648812 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-08-21T15:07:57Z" fail="3" name="root" pass="7" skipped="0" statusUnknown="0" totalRun="10">
+<?xml version="1.0" encoding="UTF-8"?><testrun dateTime="2025-08-27T11:54:53Z" 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 c35fda173..c92296198 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-08-21T15:07:57Z" fail="14" name="analyze-string" pass="39" skipped="5" statusUnknown="0" totalRun="53">
+<?xml version="1.0" encoding="UTF-8"?><testrun dateTime="2025-08-27T11:54:51Z" 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 4765bc032..00edd93da 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-08-21T15:07:38Z" fail="24" name="apply-templates" pass="22" skipped="4" statusUnknown="0" totalRun="46">
+<?xml version="1.0" encoding="UTF-8"?><testrun dateTime="2025-08-27T11:53:56Z" fail="24" name="apply-templates" pass="22" skipped="4" statusUnknown="0" totalRun="46">
    <testResult status="fail" testName="apply-templates-001">
       <outResult>&lt;?xml version="1.0" encoding="UTF-8"?&gt;&#13;
 &#13;
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 13c115fb7..2e634084a 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-08-21T15:07:39Z" fail="21" name="attribute" pass="8" skipped="0" statusUnknown="1" totalRun="30">
+<?xml version="1.0" encoding="UTF-8"?><testrun dateTime="2025-08-27T11:54:00Z" 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 1fa688dfe..d53e44158 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-08-21T15:07:39Z" fail="14" name="call-template" pass="27" skipped="1" statusUnknown="0" totalRun="41">
+<?xml version="1.0" encoding="UTF-8"?><testrun dateTime="2025-08-27T11:54:01Z" fail="14" name="call-template" pass="27" skipped="1" statusUnknown="0" totalRun="41">
    <testResult status="fail" testName="call-template-0001">
       <outResult>&lt;?xml version="1.0" encoding="UTF-8"?&gt;&lt;out/&gt;</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 d0fadff61..c501ab3f3 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-08-21T15:07:39Z" fail="3" name="choose" pass="20" skipped="0" statusUnknown="1" totalRun="24">
+<?xml version="1.0" encoding="UTF-8"?><testrun dateTime="2025-08-27T11:54:02Z" 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 12acce01a..5679503c5 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-08-21T15:07:40Z" fail="41" name="copy" pass="18" skipped="0" statusUnknown="1" totalRun="60">
+<?xml version="1.0" encoding="UTF-8"?><testrun dateTime="2025-08-27T11:54:04Z" fail="41" name="copy" pass="18" skipped="0" statusUnknown="1" totalRun="60">
    <testResult status="fail" testName="copy-0101"/>
    <testResult status="pass" testName="copy-0102"/>
    <testResult status="fail" testName="copy-0103"/>
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 880b4325f..450cc900c 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-08-21T15:07:42Z" fail="18" name="element" pass="11" skipped="0" statusUnknown="0" totalRun="29">
+<?xml version="1.0" encoding="UTF-8"?><testrun dateTime="2025-08-27T11:54:10Z" 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 77541e80e..0bbeade74 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-08-21T15:07:38Z" fail="24" name="for-each-group" pass="49" skipped="4" statusUnknown="1" totalRun="74">
+<?xml version="1.0" encoding="UTF-8"?><testrun dateTime="2025-08-27T11:53:57Z" 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 07122de1d..781348c80 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-08-21T15:07:41Z" fail="25" name="iterate" pass="19" skipped="0" statusUnknown="0" totalRun="44">
+<?xml version="1.0" encoding="UTF-8"?><testrun dateTime="2025-08-27T11:54:06Z" fail="25" name="iterate" pass="19" skipped="0" statusUnknown="0" totalRun="44">
    <testResult status="pass" testName="iterate-001"/>
    <testResult status="pass" testName="iterate-002"/>
    <testResult status="pass" testName="iterate-003"/>
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 9ce82aade..10dfbcbad 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-08-21T15:07:41Z" fail="17" name="sequence" pass="8" skipped="1" statusUnknown="1" totalRun="26">
+<?xml version="1.0" encoding="UTF-8"?><testrun dateTime="2025-08-27T11:54:08Z" 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"/>
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 52f12040c..375b94b28 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-08-21T15:07:43Z" fail="31" name="sort" pass="50" skipped="0" statusUnknown="0" totalRun="81">
+<?xml version="1.0" encoding="UTF-8"?><testrun dateTime="2025-08-27T11:54:10Z" 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 24d27ddbe..6c59c2fb8 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,4 +1,4 @@
-<?xml version="1.0" encoding="UTF-8"?><testrun dateTime="2025-08-21T15:07:39Z" fail="22" name="try" pass="15" skipped="5" statusUnknown="0" totalRun="37">
+<?xml version="1.0" encoding="UTF-8"?><testrun dateTime="2025-08-27T11:53:59Z" fail="22" name="try" pass="15" skipped="5" statusUnknown="0" totalRun="37">
    <testResult status="pass" testName="try-001"/>
    <testResult status="fail" testName="try-002">
       <outResult/>
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 f76a6c965..10b80652e 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,9 +1,9 @@
-<?xml version="1.0" encoding="UTF-8"?><testrun dateTime="2025-08-21T15:07:58Z" fail="13" name="xsl-document" pass="12" skipped="0" statusUnknown="0" totalRun="25">
+<?xml version="1.0" encoding="UTF-8"?><testrun dateTime="2025-08-27T11:54:57Z" 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>
          <errTrace>XPST0003 : An XPath expression /out/node()[1][self::comment()][.="Valuable comment"] 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="xsl-document-0103"/>
@@ -17,7 +17,7 @@
    <testResult status="fail" testName="xsl-document-0301">
       <outResult>
          <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</errTrace>
+         <errTrace>java.lang.ArrayIndexOutOfBoundsException: -1</errTrace>
       </outResult>
    </testResult>
    <testResult status="pass" testName="xsl-document-0302"/>
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 607dafeac..ef312f537 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-08-21T15:07:58Z" fail="12" name="regex" pass="32" skipped="1" statusUnknown="0" totalRun="44">
+<?xml version="1.0" encoding="UTF-8"?><testrun dateTime="2025-08-27T11:54:56Z" 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 f480fbcd4..8c45dca43 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-08-21T15:07:55Z" fail="25" name="boolean" pass="87" skipped="0" statusUnknown="0" totalRun="112">
+<?xml version="1.0" encoding="UTF-8"?><testrun dateTime="2025-08-27T11:54:38Z" 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 103d0953a..0a040391e 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-08-21T15:07:55Z" fail="28" name="date" pass="56" skipped="0" statusUnknown="1" totalRun="85">
+<?xml version="1.0" encoding="UTF-8"?><testrun dateTime="2025-08-27T11:54:44Z" 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 548e72db5..35d8e9c85 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-08-21T15:07:55Z" fail="17" name="node" pass="15" skipped="0" statusUnknown="0" totalRun="32">
+<?xml version="1.0" encoding="UTF-8"?><testrun dateTime="2025-08-27T11:54:40Z" fail="17" name="node" pass="15" 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 b492026df..ea98b48d8 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-08-21T15:07:55Z" fail="8" name="string" pass="128" skipped="0" statusUnknown="0" totalRun="136">
+<?xml version="1.0" encoding="UTF-8"?><testrun dateTime="2025-08-27T11:54:41Z" 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 e87b391ca..1300559a0 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-08-21T15:08:09Z" desc="W3C XSLT 3.0 test suite results" fail="711" pass="1579" skipped="43" success="68.38%" totalRun="2309" xslt_processor="Xalan-J XSLT 3.0 development code">
+<testResult dateTime="2025-08-27T11:55:11Z" desc="W3C XSLT 3.0 test suite results" fail="707" pass="1583" skipped="43" success="68.56%" totalRun="2309" 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"/>
@@ -19,7 +19,7 @@
     <castable fail="5" pass="4" skipped="0" success="44.44%" totalRun="9"/>
     <expression fail="0" pass="9" skipped="0" success="90.0%" totalRun="10"/>
     <for fail="2" pass="1" skipped="0" success="25.0%" totalRun="4"/>
-    <higher-order-functions fail="6" pass="18" skipped="0" success="72.0%" totalRun="25"/>
+    <higher-order-functions fail="2" pass="22" skipped="0" success="88.0%" totalRun="25"/>
     <math fail="25" pass="124" skipped="0" success="82.67%" totalRun="150"/>
     <nodetest fail="36" pass="2" skipped="0" success="5.26%" totalRun="38"/>
     <path fail="3" pass="7" skipped="0" success="70.0%" totalRun="10"/>
diff --git a/src/test/resources/fn_json_doc/test3.xsl b/src/test/resources/fn_json_doc/test3.xsl
index fb85c629b..396e445e3 100644
--- a/src/test/resources/fn_json_doc/test3.xsl
+++ b/src/test/resources/fn_json_doc/test3.xsl
@@ -41,12 +41,13 @@
 	   <xsl:variable name="size" select="map:get($info,'size')" as="xs:double"/>
 	   <xsl:variable name="weight" select="map:get($info,'weight')" as="xs:double"/>
 	   <xsl:variable name="color" select="map:get($info,'color')" as="xs:string"/>
-	   <xsl:sequence select="let $m1 := map {}, $m1 := map:put($m1,'id',$id), 
-	                                            $m1 := map:put($m1,'desc',$desc),
-								                $i1 := map {}, $i1 := map:put($i1,'size',$size),
-											    $i1 := map:put($i1,'weight',$weight),
-										        $i1 := map:put($i1,'color',$color),
-											    $m1 := map:put($m1,'info',$i1) return $m1"/>
+	   <xsl:sequence select="map {'id' : $id, 
+                                  'desc' : $desc, 
+                                  'info' : map {'size' : $size, 
+                                                'weight' : $weight, 
+                                                'color' : $color
+                                               }
+                                 }"/>
 	</xsl:function>
 	
 	<!--
diff --git a/src/test/resources/fn_parse_json/test12.xsl b/src/test/resources/fn_parse_json/test12.xsl
index 7dfadfd45..5704e51ae 100644
--- a/src/test/resources/fn_parse_json/test12.xsl
+++ b/src/test/resources/fn_parse_json/test12.xsl
@@ -41,12 +41,13 @@
 	   <xsl:variable name="size" select="map:get($info,'size')" as="xs:double"/>
 	   <xsl:variable name="weight" select="map:get($info,'weight')" as="xs:double"/>
 	   <xsl:variable name="color" select="map:get($info,'color')" as="xs:string"/>
-	   <xsl:sequence select="let $m1 := map {}, $m1 := map:put($m1,'id',$id), 
-	                                            $m1 := map:put($m1,'desc',$desc),
-								                $i1 := map {}, $i1 := map:put($i1,'size',$size),
-											    $i1 := map:put($i1,'weight',$weight),
-										        $i1 := map:put($i1,'color',$color),
-											    $m1 := map:put($m1,'info',$i1) return $m1"/>
+       <xsl:sequence select="map {'id' : $id, 
+                                  'desc' : $desc, 
+                                  'info' : map {'size' : $size, 
+                                                'weight' : $weight, 
+                                                'color' : $color
+                                               }
+                                 }"/>											    
 	</xsl:function>
 	
 	<!--
diff --git a/src/test/resources/xsl_higher_order_functions/test9.xsl b/src/test/resources/xsl_higher_order_functions/test9.xsl
index 99960de29..7d27a2ea1 100644
--- a/src/test/resources/xsl_higher_order_functions/test9.xsl
+++ b/src/test/resources/xsl_higher_order_functions/test9.xsl
@@ -23,9 +23,7 @@
        <xsl:sequence select="$x + 2"/>
     </xsl:function>
     
-    <xsl:variable name="f" as="function(*)*">
-      <xsl:sequence select="(fn0:g#1, fn0:h#1)"/>
-    </xsl:variable>
+    <xsl:variable name="f" select="(fn0:g#1, fn0:h#1)" as="function(*)*"/>
     
     <xsl:template name="main">
        <result>


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@xalan.apache.org
For additional commands, e-mail: commits-help@xalan.apache.org