diff options
author | Steve Bennett <steveb@workware.net.au> | 2017-10-16 08:28:55 +1000 |
---|---|---|
committer | Steve Bennett <steveb@workware.net.au> | 2017-10-16 09:53:20 +1000 |
commit | 4be55f10c4d2071f493b9a1b60197c5e20f3203d (patch) | |
tree | 822791cf728825874e8a45d740fe180f8405fe13 /jim.c | |
parent | b04d7cc4745a9fefc539ad9ee8888d2733811778 (diff) | |
download | jimtcl-4be55f10c4d2071f493b9a1b60197c5e20f3203d.zip jimtcl-4be55f10c4d2071f493b9a1b60197c5e20f3203d.tar.gz jimtcl-4be55f10c4d2071f493b9a1b60197c5e20f3203d.tar.bz2 |
jim: cmdPrivData needs to be saved and restored
If a C command invokes another C command (including indirectly),
cmdPrivData was being changed but not restored
Diffstat (limited to 'jim.c')
-rw-r--r-- | jim.c | 3 |
1 files changed, 3 insertions, 0 deletions
@@ -10132,6 +10132,7 @@ static int JimInvokeCommand(Jim_Interp *interp, int objc, Jim_Obj *const *objv) { int retcode; Jim_Cmd *cmdPtr; + void *prevPrivData; #if 0 printf("invoke"); @@ -10161,6 +10162,7 @@ static int JimInvokeCommand(Jim_Interp *interp, int objc, Jim_Obj *const *objv) goto out; } interp->evalDepth++; + prevPrivData = interp->cmdPrivData; /* Call it -- Make sure result is an empty object. */ Jim_SetEmptyResult(interp); @@ -10171,6 +10173,7 @@ static int JimInvokeCommand(Jim_Interp *interp, int objc, Jim_Obj *const *objv) interp->cmdPrivData = cmdPtr->u.native.privData; retcode = cmdPtr->u.native.cmdProc(interp, objc, objv); } + interp->cmdPrivData = prevPrivData; interp->evalDepth--; out: |