diff options
author | Steve Bennett <steveb@workware.net.au> | 2020-12-26 18:06:48 +1000 |
---|---|---|
committer | Steve Bennett <steveb@workware.net.au> | 2020-12-26 18:07:16 +1000 |
commit | a905122e48ae2f5208b037d8bfc08631b753cb63 (patch) | |
tree | 9a8ded57cd9f2ef2ffbbb78941d49d63b56844d7 | |
parent | d296f2f7cd5f4f0168e9c80c19ba499a4595c6fa (diff) | |
download | jimtcl-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>
-rw-r--r-- | jim.c | 10 |
1 files changed, 10 insertions, 0 deletions
@@ -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. */ |