aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSteve Bennett <steveb@workware.net.au>2023-07-31 17:30:58 +1000
committerSteve Bennett <steveb@workware.net.au>2023-07-31 17:30:58 +1000
commit4236d80d173728a1e6e7e8a013e19b564218e9ef (patch)
tree4f9864044c8ad705645e1e1c0ced15db4f473545
parent067a64f3ffccf38cfadbfe0f906d59634f869352 (diff)
downloadjimtcl-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.c8
-rw-r--r--jim.h2
2 files changed, 5 insertions, 5 deletions
diff --git a/jim.c b/jim.c
index d8682e4..c8dc5ce 100644
--- a/jim.c
+++ b/jim.c
@@ -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;
}
diff --git a/jim.h b/jim.h
index 46ea66f..66eb95c 100644
--- a/jim.h
+++ b/jim.h
@@ -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 */