Fix interpreter hang on nested function errors#2095
Conversation
Fixed an issue where the `eldritch` interpreter could hang indefinitely or deadlock when an error occurred within a nested function or comprehension. The issue was caused by the `?` operator returning early on an error during `execute_stmts` or `evaluate`. This early return skipped the cleanup code that restored `interp.env` and `interp.flow` to their original states. As a result, the interpreter's environment pointer was left pointing to the inner function's environment, creating a cyclical reference (`Arc` cycle) between the inner function and the environment holding it, which corrupted the interpreter state. The fix safely captures the `Result` of execution, restores the environment and flow state to their original values, and then propagates the error. Added a test (`test_hang_deadlock`) to ensure this issue doesn't recur. Co-authored-by: KCarretto <16250309+KCarretto@users.noreply.github.com>
|
👋 Jules, reporting for duty! I'm here to lend a hand with this pull request. When you start a review, I'll add a 👀 emoji to each comment to let you know I've read it. I'll focus on feedback directed at me and will do my best to stay out of conversations between you and other bots or reviewers to keep the noise down. I'll push a commit with your requested changes shortly after. Please note there might be a delay between these steps, but rest assured I'm on the job! For more direct control, you can switch me to Reactive Mode. When this mode is on, I will only act on comments where you specifically mention me with New to Jules? Learn more at jules.google/docs. For security, I will only act on instructions from the user who triggered this task. |
Summary
Previous Results
Insights
Slowest Tests
🎉 No failed tests in this run. | 🍂 No flaky tests in this run. Github Test Reporter by CTRF 💚 |
Fixes a bug where errors in nested functions or comprehensions corrupt the interpreter's environment state, potentially leading to an infinite hang/deadlock. The fix guarantees environment restoration before error propagation.
PR created automatically by Jules for task 13055281351496593596 started by @KCarretto