From 4256c29b61d833fc663b88f68f471e31a41d7449 Mon Sep 17 00:00:00 2001 From: paxcut Date: Tue, 7 Apr 2026 18:56:35 -0700 Subject: [PATCH 1/2] fix: issue 221 The return control flow was not being processed in two of the dynamic array types. --- lib/source/pl/core/ast/ast_node_array_variable_decl.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lib/source/pl/core/ast/ast_node_array_variable_decl.cpp b/lib/source/pl/core/ast/ast_node_array_variable_decl.cpp index 87c17482..a75cbad6 100644 --- a/lib/source/pl/core/ast/ast_node_array_variable_decl.cpp +++ b/lib/source/pl/core/ast/ast_node_array_variable_decl.cpp @@ -367,7 +367,7 @@ namespace pl::core::ast { auto ctrlFlow = evaluator->getCurrentControlFlowStatement(); evaluator->setCurrentControlFlowStatement(ControlFlowStatement::None); - if (ctrlFlow == ControlFlowStatement::Break) + if (ctrlFlow == ControlFlowStatement::Break || ctrlFlow == ControlFlowStatement::Return) break; else if (ctrlFlow == ControlFlowStatement::Continue) { discardEntries(patternCount); @@ -418,7 +418,7 @@ namespace pl::core::ast { auto ctrlFlow = evaluator->getCurrentControlFlowStatement(); evaluator->setCurrentControlFlowStatement(ControlFlowStatement::None); - if (ctrlFlow == ControlFlowStatement::Break) + if (ctrlFlow == ControlFlowStatement::Break || ctrlFlow == ControlFlowStatement::Return) break; else if (ctrlFlow == ControlFlowStatement::Continue) { discardEntries(1); From b4ff41e1b11e4aae671e1018009820f3f171f57a Mon Sep 17 00:00:00 2001 From: paxcut Date: Tue, 7 Apr 2026 23:30:06 -0700 Subject: [PATCH 2/2] fixes to deal with nested arrays. --- .../core/ast/ast_node_array_variable_decl.cpp | 28 ++++++++++++------- 1 file changed, 18 insertions(+), 10 deletions(-) diff --git a/lib/source/pl/core/ast/ast_node_array_variable_decl.cpp b/lib/source/pl/core/ast/ast_node_array_variable_decl.cpp index a75cbad6..afd1fc8a 100644 --- a/lib/source/pl/core/ast/ast_node_array_variable_decl.cpp +++ b/lib/source/pl/core/ast/ast_node_array_variable_decl.cpp @@ -334,11 +334,13 @@ namespace pl::core::ast { addEntries(std::move(patterns)); auto ctrlFlow = evaluator->getCurrentControlFlowStatement(); - evaluator->setCurrentControlFlowStatement(ControlFlowStatement::None); - if (ctrlFlow == ControlFlowStatement::Break || ctrlFlow == ControlFlowStatement::Return) + if ( ctrlFlow == ControlFlowStatement::Return) { break; - else if (ctrlFlow == ControlFlowStatement::Continue) { - + } else if (ctrlFlow == ControlFlowStatement::Break) { + evaluator->setCurrentControlFlowStatement(ControlFlowStatement::None); + break; + } else if (ctrlFlow == ControlFlowStatement::Continue) { + evaluator->setCurrentControlFlowStatement(ControlFlowStatement::None); discardEntries(patternCount); continue; } @@ -366,10 +368,13 @@ namespace pl::core::ast { auto ctrlFlow = evaluator->getCurrentControlFlowStatement(); - evaluator->setCurrentControlFlowStatement(ControlFlowStatement::None); - if (ctrlFlow == ControlFlowStatement::Break || ctrlFlow == ControlFlowStatement::Return) + if ( ctrlFlow == ControlFlowStatement::Return) { + break; + } else if (ctrlFlow == ControlFlowStatement::Break) { + evaluator->setCurrentControlFlowStatement(ControlFlowStatement::None); break; - else if (ctrlFlow == ControlFlowStatement::Continue) { + } else if (ctrlFlow == ControlFlowStatement::Continue) { + evaluator->setCurrentControlFlowStatement(ControlFlowStatement::None); discardEntries(patternCount); continue; } @@ -417,10 +422,13 @@ namespace pl::core::ast { } auto ctrlFlow = evaluator->getCurrentControlFlowStatement(); - evaluator->setCurrentControlFlowStatement(ControlFlowStatement::None); - if (ctrlFlow == ControlFlowStatement::Break || ctrlFlow == ControlFlowStatement::Return) + if ( ctrlFlow == ControlFlowStatement::Return) { + break; + } else if (ctrlFlow == ControlFlowStatement::Break) { + evaluator->setCurrentControlFlowStatement(ControlFlowStatement::None); break; - else if (ctrlFlow == ControlFlowStatement::Continue) { + } else if (ctrlFlow == ControlFlowStatement::Continue) { + evaluator->setCurrentControlFlowStatement(ControlFlowStatement::None); discardEntries(1); continue; }