chiark / gitweb /
put xargs in right place
[chiark-tcl.git] / base / scriptinv.c
index 1ac7e82ea14967943949bdf7f21f42aa2d236394..cdaec8b3011af0f8610623b75a9b687932483df0 100644 (file)
@@ -16,7 +16,7 @@ void scriptinv_cancel(ScriptToInvoke *si) {
 
 int scriptinv_set(ScriptToInvoke *si, Tcl_Interp *ip,
                  Tcl_Obj *newscript, Tcl_Obj *xargs) {
 
 int scriptinv_set(ScriptToInvoke *si, Tcl_Interp *ip,
                  Tcl_Obj *newscript, Tcl_Obj *xargs) {
-  int rc;
+  int rc, xlength;
   
   scriptinv_cancel(si);
 
   
   scriptinv_cancel(si);
 
@@ -24,8 +24,9 @@ int scriptinv_set(ScriptToInvoke *si, Tcl_Interp *ip,
   Tcl_IncrRefCount(newscript);
 
   if (xargs) {
   Tcl_IncrRefCount(newscript);
 
   if (xargs) {
-    rc= Tcl_ListObjLength(ip, xargs, &si->llength);  if (rc) return rc;
+    rc= Tcl_ListObjLength(ip, xargs, &xlength);  if (rc) return rc;
     Tcl_IncrRefCount(xargs);
     Tcl_IncrRefCount(xargs);
+    si->llength += xlength;
   }
 
   si->obj= newscript;
   }
 
   si->obj= newscript;
@@ -41,6 +42,7 @@ void scriptinv_invoke(ScriptToInvoke *si, int argc, Tcl_Obj **argv) {
   assert(si->obj);
 
   for (i=0; i<argc; i++) Tcl_IncrRefCount(argv[i]);
   assert(si->obj);
 
   for (i=0; i<argc; i++) Tcl_IncrRefCount(argv[i]);
+
   invoke= Tcl_DuplicateObj(si->obj);
   Tcl_IncrRefCount(invoke);
 
   invoke= Tcl_DuplicateObj(si->obj);
   Tcl_IncrRefCount(invoke);