diff options
author | Steve Bennett <steveb@workware.net.au> | 2023-07-31 17:30:58 +1000 |
---|---|---|
committer | Steve Bennett <steveb@workware.net.au> | 2023-07-31 17:30:58 +1000 |
commit | 4236d80d173728a1e6e7e8a013e19b564218e9ef (patch) | |
tree | 4f9864044c8ad705645e1e1c0ced15db4f473545 | |
parent | 067a64f3ffccf38cfadbfe0f906d59634f869352 (diff) | |
download | jimtcl-4236d80d173728a1e6e7e8a013e19b564218e9ef.zip jimtcl-4236d80d173728a1e6e7e8a013e19b564218e9ef.tar.gz jimtcl-4236d80d173728a1e6e7e8a013e19b564218e9ef.tar.bz2 |
core: fix error level in try/catch
When the multi-level break/continue support was added in
1b151f816f14b11f1c1ef10b171411e21b9a504e it reused returnLevel,
but this interferred with the return level returned by try/catch.
Use a separate variable for the break/continue level.
Signed-off-by: Steve Bennett <steveb@workware.net.au>
-rw-r--r-- | jim.c | 8 | ||||
-rw-r--r-- | jim.h | 2 |
2 files changed, 5 insertions, 5 deletions
@@ -12265,15 +12265,15 @@ static int Jim_UnsetCoreCommand(Jim_Interp *interp, int argc, Jim_Obj *const *ar /** * All commands that support break, continue from a loop (while, loop, foreach, for) - * use this to check for returnLevel. + * use this to check for break_level. * - * If returnLevel is > 0, decrements the returnLevel and returns 1. + * If break_level is > 0, decrements the break_level and returns 1. * Otherwise returns 0 */ static int JimCheckLoopRetcode(Jim_Interp *interp, int retval) { if (retval == JIM_BREAK || retval == JIM_CONTINUE) { - if (--interp->returnLevel > 0) { + if (--interp->break_level > 0) { return 1; } } @@ -13837,7 +13837,7 @@ static int JimBreakContinueHelper(Jim_Interp *interp, int argc, Jim_Obj *const * if (ret != JIM_OK) { return ret; } - interp->returnLevel = level; + interp->break_level = level; } return retcode; } @@ -542,7 +542,7 @@ typedef struct Jim_Interp { Jim_Obj *result; /* object returned by the last command called. */ int unused_errorLine; /* Error line where an error occurred. */ Jim_Obj *currentFilenameObj; /* filename of current Jim_EvalFile() */ - int unused_addStackTrace; + int break_level; /* break/continue level */ int maxCallFrameDepth; /* Used for infinite loop detection. */ int maxEvalDepth; /* Used for infinite loop detection. */ int evalDepth; /* Current eval depth */ |