summaryrefslogtreecommitdiffstats
path: root/modules/gdscript/gdscript_parser.cpp
diff options
context:
space:
mode:
authorDmitrii Maganov <vonagam@gmail.com>2023-02-23 04:13:09 +0200
committerDmitrii Maganov <vonagam@gmail.com>2023-02-23 10:49:06 +0200
commitb0b1eaeb6de20bd364a471132cd2e29a21b5e738 (patch)
tree70e3841aae56d05cf9f9bde7ffce3f39a4196723 /modules/gdscript/gdscript_parser.cpp
parent19c9fd6926b958016d562e3b2e93b0e9480300f5 (diff)
downloadredot-engine-b0b1eaeb6de20bd364a471132cd2e29a21b5e738.tar.gz
GDScript: Fix parsing unexpected break/continue in lambda
Diffstat (limited to 'modules/gdscript/gdscript_parser.cpp')
-rw-r--r--modules/gdscript/gdscript_parser.cpp13
1 files changed, 13 insertions, 0 deletions
diff --git a/modules/gdscript/gdscript_parser.cpp b/modules/gdscript/gdscript_parser.cpp
index b32313dad4..c402b63f7b 100644
--- a/modules/gdscript/gdscript_parser.cpp
+++ b/modules/gdscript/gdscript_parser.cpp
@@ -3138,6 +3138,14 @@ GDScriptParser::ExpressionNode *GDScriptParser::parse_lambda(ExpressionNode *p_p
bool previous_in_lambda = in_lambda;
in_lambda = true;
+ // Save break/continue state.
+ bool could_break = can_break;
+ bool could_continue = can_continue;
+
+ // Disallow break/continue.
+ can_break = false;
+ can_continue = false;
+
function->body = parse_suite("lambda declaration", body, true);
complete_extents(function);
complete_extents(lambda);
@@ -3155,6 +3163,11 @@ GDScriptParser::ExpressionNode *GDScriptParser::parse_lambda(ExpressionNode *p_p
current_function = previous_function;
in_lambda = previous_in_lambda;
lambda->function = function;
+
+ // Reset break/continue state.
+ can_break = could_break;
+ can_continue = could_continue;
+
return lambda;
}