From 4236d80d173728a1e6e7e8a013e19b564218e9ef Mon Sep 17 00:00:00 2001 From: Steve Bennett Date: Mon, 31 Jul 2023 17:30:58 +1000 Subject: 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 --- jim.c | 8 ++++---- jim.h | 2 +- 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 */ -- cgit v1.1