From 6bcaef138f13f9894abe3790aca52591a3d2d1f6 Mon Sep 17 00:00:00 2001 From: Paul Buetow Date: Sat, 28 Feb 2026 16:18:04 +0200 Subject: Remove vestigial double-retry loop in _statement() [POLA] _statement() wrapped its six parse rules in `for (int i = 0; i < 2; ++i)` with no explanation. Investigation shows every rule is atomic: it either consumes tokens and returns 1, or leaves the stream untouched and returns 0. A second pass would see identical parser state, so the retry was a no-op. Replace the loop with a flat priority-ordered try sequence and add a comment explaining the invariant so future readers are not confused. Co-Authored-By: Claude Sonnet 4.6 --- src/core/interpret.c | 18 ++++++++++-------- 1 file changed, 10 insertions(+), 8 deletions(-) (limited to 'src/core') diff --git a/src/core/interpret.c b/src/core/interpret.c index ba0eade..7fc9334 100644 --- a/src/core/interpret.c +++ b/src/core/interpret.c @@ -467,18 +467,20 @@ _func_decl(Interpret *p_interpret) { return (0); } +/* Try each parse rule in priority order; the first that matches + * returns 1. Every rule either consumes tokens and returns 1, + * or leaves the token stream untouched and returns 0, so a single + * pass suffices — the former double-retry loop was vestigial. */ int _statement(Interpret *p_interpret) { _CHECK TRACK - for (int i = 0; i < 2; ++i) { - if (_proc_decl(p_interpret)) return (1); - if (_func_decl(p_interpret)) return (1); - if (_var_decl(p_interpret)) return (1); - if (_control(p_interpret)) return (1); - if (_expression(p_interpret)) return (1); - if (_block(p_interpret)) return (1); - } + if (_proc_decl(p_interpret)) return (1); + if (_func_decl(p_interpret)) return (1); + if (_var_decl(p_interpret)) return (1); + if (_control(p_interpret)) return (1); + if (_expression(p_interpret)) return (1); + if (_block(p_interpret)) return (1); return (0); } -- cgit v1.2.3