From 7105ca3fa2560546f8dad38d4053a14ff681cb1a Mon Sep 17 00:00:00 2001 From: Gordon Williams Date: Thu, 10 Oct 2024 10:26:23 +0100 Subject: [PATCH] Fix debugging of switch statements (fix #2562) --- src/jsparse.c | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/jsparse.c b/src/jsparse.c index 956bccbea..27b801731 100644 --- a/src/jsparse.c +++ b/src/jsparse.c @@ -2481,7 +2481,7 @@ NO_INLINE JsVar *jspeStatementSwitch() { JSP_ASSERT_MATCH(LEX_R_SWITCH); JSP_MATCH('('); JsVar *switchOn = jspeExpression(); - JsExecFlags preservedExecState = execInfo.execute&EXEC_IN_LOOP; + JsExecFlags preservedExecState = execInfo.execute&(EXEC_IN_LOOP|EXEC_DEBUGGER_MASK); JSP_SAVE_EXECUTE(); bool execute = JSP_SHOULD_EXECUTE; JSP_MATCH_WITH_CLEANUP_AND_RETURN(')', jsvUnLock(switchOn), 0); @@ -2496,6 +2496,11 @@ NO_INLINE JsVar *jspeStatementSwitch() { if (execute) execInfo.execute=EXEC_YES|EXEC_IN_SWITCH|preservedExecState; // we do the match after setting execute so that we're definitely allocating a string (we don't if we're not executing) JSP_MATCH_WITH_CLEANUP_AND_RETURN(LEX_R_CASE, jsvUnLock(switchOn), 0); + #ifdef USE_DEBUGGER + if ((execInfo.execute&EXEC_DEBUGGER_NEXT_LINE) && JSP_SHOULD_EXECUTE) { + jsiDebuggerLoop(); + } + #endif JsVar *test = jspeAssignmentExpression(); execInfo.execute = oldFlags|EXEC_IN_SWITCH; JSP_MATCH_WITH_CLEANUP_AND_RETURN(':', jsvUnLock2(switchOn, test), 0);