aboutsummaryrefslogtreecommitdiff
path: root/jim.c
diff options
context:
space:
mode:
authorSteve Bennett <steveb@workware.net.au>2020-12-26 18:06:48 +1000
committerSteve Bennett <steveb@workware.net.au>2020-12-26 18:07:16 +1000
commita905122e48ae2f5208b037d8bfc08631b753cb63 (patch)
tree9a8ded57cd9f2ef2ffbbb78941d49d63b56844d7 /jim.c
parentd296f2f7cd5f4f0168e9c80c19ba499a4595c6fa (diff)
downloadjimtcl-a905122e48ae2f5208b037d8bfc08631b753cb63.zip
jimtcl-a905122e48ae2f5208b037d8bfc08631b753cb63.tar.gz
jimtcl-a905122e48ae2f5208b037d8bfc08631b753cb63.tar.bz2
Revert "core: remove procargs and procbody from callframe"
This reverts commit 6b287b9c6b6ec8fbc62f1cbaad48547cf5a4b65c. These are needed for reference counting. Signed-off-by: Steve Bennett <steveb@workware.net.au>
Diffstat (limited to 'jim.c')
-rw-r--r--jim.c10
1 files changed, 10 insertions, 0 deletions
diff --git a/jim.c b/jim.c
index 95070fc..2ccd769 100644
--- a/jim.c
+++ b/jim.c
@@ -5050,6 +5050,8 @@ static Jim_CallFrame *JimCreateCallFrame(Jim_Interp *interp, Jim_CallFrame *pare
cf->argv = NULL;
cf->argc = 0;
+ cf->procArgsObjPtr = NULL;
+ cf->procBodyObjPtr = NULL;
cf->next = NULL;
cf->staticVars = NULL;
cf->localCommands = NULL;
@@ -5167,6 +5169,10 @@ static void JimFreeCallFrame(Jim_Interp *interp, Jim_CallFrame *cf, int action)
{
JimDeleteLocalProcs(interp, cf->localCommands);
+ if (cf->procArgsObjPtr)
+ Jim_DecrRefCount(interp, cf->procArgsObjPtr);
+ if (cf->procBodyObjPtr)
+ Jim_DecrRefCount(interp, cf->procBodyObjPtr);
Jim_DecrRefCount(interp, cf->nsObj);
if (action == JIM_FCF_FULL || cf->vars.size != JIM_HT_INITIAL_SIZE)
Jim_FreeHashTable(&cf->vars);
@@ -11136,6 +11142,8 @@ int Jim_EvalNamespace(Jim_Interp *interp, Jim_Obj *scriptObj, Jim_Obj *nsObj)
callFramePtr = JimCreateCallFrame(interp, interp->framePtr, nsObj);
callFramePtr->argv = &interp->emptyObj;
callFramePtr->argc = 0;
+ callFramePtr->procArgsObjPtr = NULL;
+ callFramePtr->procBodyObjPtr = scriptObj;
callFramePtr->staticVars = NULL;
callFramePtr->fileNameObj = interp->emptyObj;
callFramePtr->line = 0;
@@ -11196,6 +11204,8 @@ static int JimCallProcedure(Jim_Interp *interp, Jim_Cmd *cmd, int argc, Jim_Obj
callFramePtr = JimCreateCallFrame(interp, interp->framePtr, cmd->u.proc.nsObj);
callFramePtr->argv = argv;
callFramePtr->argc = argc;
+ callFramePtr->procArgsObjPtr = cmd->u.proc.argListObjPtr;
+ callFramePtr->procBodyObjPtr = cmd->u.proc.bodyObjPtr;
callFramePtr->staticVars = cmd->u.proc.staticVars;
/* Remember where we were called from. */