aboutsummaryrefslogtreecommitdiff
path: root/jim.c
diff options
context:
space:
mode:
Diffstat (limited to 'jim.c')
-rw-r--r--jim.c17
1 files changed, 9 insertions, 8 deletions
diff --git a/jim.c b/jim.c
index 23d249b..9a6f556 100644
--- a/jim.c
+++ b/jim.c
@@ -10239,6 +10239,10 @@ static int JimCallProcedure(Jim_Interp *interp, Jim_Cmd *cmd, Jim_Obj *fileNameO
Jim_IncrRefCount(cmd->u.proc.bodyObjPtr);
interp->framePtr = callFramePtr;
+ /* Install a new stack for local procs */
+ prevLocalProcs = interp->localProcs;
+ interp->localProcs = NULL;
+
/* How many optional args are available */
optargs = (argc - 1 - cmd->u.proc.reqArity);
@@ -10281,17 +10285,9 @@ static int JimCallProcedure(Jim_Interp *interp, Jim_Cmd *cmd, Jim_Obj *fileNameO
}
}
- /* Install a new stack for local procs */
- prevLocalProcs = interp->localProcs;
- interp->localProcs = NULL;
-
/* Eval the body */
retcode = Jim_EvalObj(interp, cmd->u.proc.bodyObjPtr);
- /* Delete any local procs */
- JimDeleteLocalProcs(interp);
- interp->localProcs = prevLocalProcs;
-
badargset:
/* Destroy the callframe */
interp->framePtr = interp->framePtr->parentCallFrame;
@@ -10330,6 +10326,11 @@ badargset:
interp->errorProc = argv[0];
Jim_IncrRefCount(interp->errorProc);
}
+
+ /* Delete any local procs */
+ JimDeleteLocalProcs(interp);
+ interp->localProcs = prevLocalProcs;
+
return retcode;
}