Fix: Refactor loop_stmt to prevent RecursionError#25
Merged
Conversation
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
This pull request resolves a critical bug where the interpreter crashes with a
RecursionError: maximum recursion depth exceededwhen executing awagtailloop with a large number of iterations (typically >1000).The root cause was the recursive implementation of the
loop_stmtmethod in the interpreter, where each loop iteration resulted in another function call, eventually overflowing the call stack. This fix makes the language more robust and capable of handling common, long-running loops.Implementation Details
I have refactored the
loop_stmtfunction indoglang/main.pyto use an iterative approach instead of a recursive one.self.loop_stmt(children)has been replaced with a standard Pythonwhileloop.self.expression_stmt()at the beginning of each iteration.This change eliminates the risk of stack overflow, allowing
wagtailloops to run for a virtually unlimited number of iterations without crashing the interpreter.How This Was Tested
Manual Verification: I created a test file (
long_loop.doggy) containing awagtailloop set to run 2,000 iterations.- Before the fix: The program crashed with a
RecursionError.- After the fix: The program now runs to completion successfully.
Screenshots:
Closes: #24
Ready for review. Thank you!