Part of fix for Jira issue XALANJ-2375.

Added a new constructor and corresponding reset method that allow the caller
to specify the initial size for the arrays contained in a VariableStack.  This
is important for XPath expression evaluation, where additional stack entries
are never needed.  Previously, the arrays were always allocated based on the
maximum recursion depth permitted by the XSLT processor, which was caused
unnecessary initialization overhead using the various XPath APIs.

Also added two new XPathContext constructors which accept a boolean argument
that indicates whether the context for variables needs to be push/popable.
When it's false, the XPathContext will create a minimally-sized VariableStack.

Reviewed by Christine Li (jycli () ca ! ibm ! com).

diff --git a/src/org/apache/xpath/CachedXPathAPI.java b/src/org/apache/xpath/CachedXPathAPI.java
index d411f3e..ebc6c79 100644
--- a/src/org/apache/xpath/CachedXPathAPI.java
+++ b/src/org/apache/xpath/CachedXPathAPI.java
@@ -72,7 +72,9 @@
    */
   public CachedXPathAPI()
   {
-    xpathSupport = new XPathContext();
+    // Create an XPathContext that doesn't support pushing and popping of
+    // variable resolution scopes.  Sufficient for simple XPath 1.0 expressions.
+    xpathSupport = new XPathContext(false);
   }
   
   /**
@@ -326,8 +328,11 @@
     // Create the XPath object.
     XPath xpath = new XPath(str, null, prefixResolver, XPath.SELECT, null);
 
+    // Create an XPathContext that doesn't support pushing and popping of
+    // variable resolution scopes.  Sufficient for simple XPath 1.0 expressions.
+    XPathContext xpathSupport = new XPathContext(false);
+
     // Execute the XPath, and have it return the result
-    XPathContext xpathSupport = new XPathContext();
     int ctxtNode = xpathSupport.getDTMHandleFromNode(contextNode);
 
     return xpath.execute(xpathSupport, ctxtNode, prefixResolver);