chiark
/
gitweb
/
~ian
/
chiark-tcl.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
working on compiling out of troglodyte; before relegage maskmap
[chiark-tcl.git]
/
base
/
scriptinv.c
diff --git
a/base/scriptinv.c
b/base/scriptinv.c
index 1ac7e82ea14967943949bdf7f21f42aa2d236394..3bc383d9c847cf2857573f0efc7bd8784ca3f7f8 100644
(file)
--- a/
base/scriptinv.c
+++ b/
base/scriptinv.c
@@
-1,31
+1,31
@@
/*
*/
/*
*/
-#include "
hbytes
.h"
+#include "
chiark-tcl-base
.h"
-void scriptinv_init(ScriptToInvoke *si) {
+void
cht_
scriptinv_init(ScriptToInvoke *si) {
si->obj= 0;
si->obj= 0;
+ si->xargs= 0;
}
}
-void scriptinv_cancel(ScriptToInvoke *si) {
- if (si->obj) {
- Tcl_DecrRefCount(si->obj);
- si->obj= 0;
- }
+void cht_scriptinv_cancel(ScriptToInvoke *si) {
+ if (si->obj) { Tcl_DecrRefCount(si->obj); si->obj= 0; }
+ if (si->xargs) { Tcl_DecrRefCount(si->xargs); si->xargs= 0; }
}
}
-int scriptinv_set(ScriptToInvoke *si, Tcl_Interp *ip,
+int
cht_
scriptinv_set(ScriptToInvoke *si, Tcl_Interp *ip,
Tcl_Obj *newscript, Tcl_Obj *xargs) {
Tcl_Obj *newscript, Tcl_Obj *xargs) {
- int rc;
+ int rc
, xlength
;
- scriptinv_cancel(si);
+
cht_
scriptinv_cancel(si);
rc= Tcl_ListObjLength(ip, newscript, &si->llength); if (rc) return rc;
Tcl_IncrRefCount(newscript);
if (xargs) {
rc= Tcl_ListObjLength(ip, newscript, &si->llength); if (rc) return rc;
Tcl_IncrRefCount(newscript);
if (xargs) {
- rc= Tcl_ListObjLength(ip, xargs, &
si->l
length); if (rc) return rc;
+ rc= Tcl_ListObjLength(ip, xargs, &
x
length); if (rc) return rc;
Tcl_IncrRefCount(xargs);
Tcl_IncrRefCount(xargs);
+ si->llength += xlength;
}
si->obj= newscript;
}
si->obj= newscript;
@@
-34,13
+34,13
@@
int scriptinv_set(ScriptToInvoke *si, Tcl_Interp *ip,
return 0;
}
return 0;
}
-void
scriptinv_invoke(ScriptToInvoke *si, int argc, Tcl_Obj *
*argv) {
+void
cht_scriptinv_invoke(ScriptToInvoke *si, int argc, Tcl_Obj *const
*argv) {
Tcl_Obj *invoke=0;
int i, rc;
assert(si->obj);
Tcl_Obj *invoke=0;
int i, rc;
assert(si->obj);
-
for (i=0; i<argc; i++) Tcl_IncrRefCount(argv[i]);
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);
@@
-50,7
+50,6
@@
void scriptinv_invoke(ScriptToInvoke *si, int argc, Tcl_Obj **argv) {
}
rc= Tcl_ListObjReplace(si->ip, invoke,si->llength,0, argc,argv);
}
rc= Tcl_ListObjReplace(si->ip, invoke,si->llength,0, argc,argv);
- for (i=0; i<argc; i++) { Tcl_DecrRefCount(argv[i]); argv[i]= 0; }
if (rc) goto x_rc;
rc= Tcl_EvalObjEx(si->ip,invoke,TCL_EVAL_GLOBAL|TCL_EVAL_DIRECT);
if (rc) goto x_rc;
rc= Tcl_EvalObjEx(si->ip,invoke,TCL_EVAL_GLOBAL|TCL_EVAL_DIRECT);
@@
-59,6
+58,7
@@
void scriptinv_invoke(ScriptToInvoke *si, int argc, Tcl_Obj **argv) {
rc= 0;
x_rc:
rc= 0;
x_rc:
+ for (i=0; i<argc; i++) Tcl_DecrRefCount(argv[i]);
if (invoke) Tcl_DecrRefCount(invoke);
if (rc) Tcl_BackgroundError(si->ip);
}
if (invoke) Tcl_DecrRefCount(invoke);
if (rc) Tcl_BackgroundError(si->ip);
}