--- /home/cpdev/src/classpath/gnu/xml/transform/CallTemplateNode.java	2005-07-10 05:32:33.000000000 +0000
+++ gnu/xml/transform/CallTemplateNode.java	2005-06-30 05:34:21.000000000 +0000
@@ -39,7 +39,6 @@
 
 import java.util.ArrayList;
 import java.util.Iterator;
-import java.util.LinkedList;
 import java.util.List;
 import javax.xml.namespace.QName;
 import javax.xml.transform.TransformerException;
@@ -58,8 +57,10 @@
   final QName name;
   final List withParams;
 
-  CallTemplateNode(QName name, List withParams)
+  CallTemplateNode(TemplateNode children, TemplateNode next,
+                   QName name, List withParams)
   {
+    super(children, next);
     this.name = name;
     this.withParams = withParams;
   }
@@ -72,16 +73,11 @@
       {
         withParams2.add(((WithParam) withParams.get(i)).clone(stylesheet));
       }
-    TemplateNode ret = new CallTemplateNode(name, withParams2);
-    if (children != null)
-      {
-        ret.children = children.clone(stylesheet);
-      }
-    if (next != null)
-      {
-        ret.next = next.clone(stylesheet);
-      }
-    return ret;
+    return new CallTemplateNode((children == null) ? null :
+                                children.clone(stylesheet),
+                                (next == null) ? null :
+                                next.clone(stylesheet),
+                                name, withParams2);
   }
 
   void doApply(Stylesheet stylesheet, QName mode,
@@ -91,30 +87,14 @@
   {
     if (withParams != null)
       {
-        // compute the parameter values
-        LinkedList values = new LinkedList();
+        // push the parameter context
+        stylesheet.bindings.push(false);
+        // set the parameters
         for (Iterator i = withParams.iterator(); i.hasNext(); )
           {
             WithParam p = (WithParam) i.next();
             Object value = p.getValue(stylesheet, mode, context, pos, len);
-            Object[] pair = new Object[2];
-            pair[0] = p.name;
-            pair[1] = value;
-            values.add(pair);
-          }
-        // push the parameter context
-        stylesheet.bindings.push(Bindings.WITH_PARAM);
-        // set the parameters
-        for (Iterator i = values.iterator(); i.hasNext(); )
-          {
-            Object[] pair = (Object[]) i.next();
-            QName name = (QName) pair[0];
-            Object value = pair[1];
-            stylesheet.bindings.set(name, value, Bindings.WITH_PARAM);
-            if (stylesheet.debug)
-              {
-                System.err.println("with-param: " + name + " = " + value);
-              }
+            stylesheet.bindings.set(p.name, value, false);
           }
       }
     TemplateNode t = stylesheet.getTemplate(mode, name);
@@ -126,7 +106,7 @@
     if (withParams != null)
       {
         // pop the variable context
-        stylesheet.bindings.pop(Bindings.WITH_PARAM);
+        stylesheet.bindings.pop(false);
       }
     // call-template doesn't have processable children
     if (next != null)
@@ -137,21 +117,6 @@
       }
   }
   
-  public boolean references(QName var)
-  {
-    if (withParams != null)
-      {
-        for (Iterator i = withParams.iterator(); i.hasNext(); )
-          {
-            if (((WithParam) i.next()).references(var))
-              {
-                return true;
-              }
-          }
-      }
-    return super.references(var);
-  }
-  
   public String toString()
   {
     StringBuffer buf = new StringBuffer(getClass().getName());
