Allow blocks in interpolated string expressions#3503
Open
HABER7789 wants to merge 2 commits into
Open
Conversation
Track interpolation brace depth with a per-level Vec<u32> stack in the
raw lexer instead of a single u8 counter, so blocks and nested
interpolations inside ${ ... } balance correctly. Also removes the old
255-level u8 overflow panic risk.
Fixes #3463
HABER7789
marked this pull request as ready for review
July 22, 2026 22:00
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.
Allow blocks in interpolated string expressions
Previously the raw lexer tracked interpolation depth with a single
u8counter, which only balanced one level of braces and couldn't handle a{ ... }block or a nested interpolation inside${ ... }. As a result, expressions such as aforloop or a block inside an interpolated string failed to parse.This change replaces that counter with a
Vec<u32>stack that tracks brace depth per interpolation level:{increments the innermost level,}at depth greater than zero closes a block brace, and}at depth zero ends the interpolation. Blocks and nested interpolations now balance correctly, and the old 255-levelu8overflow panic risk is gone.I also added lexer, parser, and evaluator tests covering blocks, nested blocks,
forloops, and an unclosed block.This PR Fixes #3463.
Example: