From 3f549690c12f47e2bfbe2788376f1294a31662a5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marcel=20M=C3=BCller?= Date: Mon, 9 Mar 2026 16:21:23 +0100 Subject: [PATCH] Fix combinatorial explosion on backtracking broken if chains MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Marcel Müller --- src/ast/mod.rs | 4 ++-- tests/checks/long.nomo | Bin 0 -> 423 bytes tests/file_tests.rs | 8 +++++++- 3 files changed, 9 insertions(+), 3 deletions(-) create mode 100644 tests/checks/long.nomo diff --git a/src/ast/mod.rs b/src/ast/mod.rs index c39dd0e..04a7e5d 100644 --- a/src/ast/mod.rs +++ b/src/ast/mod.rs @@ -346,7 +346,7 @@ fn parse_conditional_chain<'input>( chain.push(if_block); let content = resume_after_cut( - inner_conditional_chain, + cut_err(inner_conditional_chain), repeat_till(0.., any, parse_end).map(|((), _)| ()), ) .parse_next(input)?; @@ -387,7 +387,7 @@ fn inner_conditional_chain<'input>( }; if !is_end && needs_end { - return Err(AstError::from_input(input).cut()); + return Err(AstError::from_input(input)); } if let TemplateAstExpr::Block { expression, .. } = &end_block diff --git a/tests/checks/long.nomo b/tests/checks/long.nomo new file mode 100644 index 0000000000000000000000000000000000000000..b2b5c2c048c76206a8bcc661d48d33e194f8ba52 GIT binary patch literal 423 zcmb=f<(+ z+>+E1GYpW5s-n20wl ast, + Err(err) => { + eprintln!("{}", err.to_report(input)); + panic!("Could not evaluate ast"); + } + }; insta::assert_debug_snapshot!("2-ast", ast);