Hacktoberfest 2026:メンテナが10月に向けて印を付けた、オープンで初心者向けの issue。 Hacktoberfest の issue を見る

Nested f-strings fail when an inner interpolation contains a brace-bearing string literal

クローズ
#1,253 コメント 0 件 リアクション 0 件 担当者 0 名 GitHub で見る

メンテナーはふだん 1 日以内に返信

まだ誰も着手していません。

評価

難易度
3/5
見積もり時間
1〜2日
初心者へのやさしさ
76/100
issue の種類
バグ
明瞭さ
明確に書かれている
活発さ
活発
技術スタック
c
領域
compilers

調査の方向性

Start in src/lexer.c around the outer interpolation boundary scanner at lines 407–422, then inspect tests/test_fstrings.eigs lines 46–51 for existing coverage. Run the reproducer and controls first. Done means nested f-strings containing brace-bearing ordinary strings parse and print the expected output, while escaped quotes, dictionaries, direct-string cases, and malformed inputs retain their stated behavior.

索引モデルが issue の本文から書いたものです。

説明

area:runtime-vm bug found-by:code-review

A nested f-string fails to parse when one of its interpolation expressions contains a string literal with a closing brace. The same brace-bearing string works in a single f-string, and nesting works when that brace is removed.

Reproduce

print of f"outer:{f"inner:{"a}b"}"}"

Actual: exit 1, empty stdout. Stderr reports unterminated f-string expression, unterminated string, unterminated f-string, then unexpected '}' after statement (four parse errors).

Expected: exit 0 and outer:inner:a}b\n.

Paired control: change only a}b to abc:

print of f"outer:{f"inner:{"abc"}"}"

This exits 0 and prints outer:inner:abc\n.

The direct brace-bearing-string control also succeeds:

print of f"inner:{"a}b"}"

It exits 0 and prints inner:a}b\n. The defect therefore concerns composition of supported forms, not a proposed new interpolation syntax.

Cause

The outer interpolation boundary scanner skips from a quote to the next unescaped quote, treating the nested f-string as an ordinary string. The quote beginning the nested interpolation's "a}b" literal ends that skip. Its literal } is then exposed to the outer brace-depth counter, which closes the outer expression prematurely.

Boundary scanning must understand nested f-string lexical structure instead of treating every quoted span as an ordinary string.

Relationship to #334/#344

This is a remaining composition case in the class addressed by closed #334 and fixed in #344, rather than a duplicate of their original direct reproducer. The original direct f"{"a}b"}" case passes on current main. tests/test_fstrings.eigs:46–51 tests brace-bearing ordinary strings and simple nested f-strings separately; it does not combine them.

Regression acceptance

  • The reproducer prints exactly outer:inner:a}b\n and both controls keep passing.
  • Cover opening and closing braces in ordinary strings inside nested f-strings.
  • Retain escaped quotes/backslashes, nested dictionary expressions, and the existing direct-string and simple-nesting cases.
  • Verify actual output for valid cases and keep malformed nested strings failing with diagnostics.

This does not duplicate #1244's LSP source-coordinate issue; here a valid program cannot execute at all.

Verification

Confirmed on a fresh default release build of b91768e23c5a874a64e76e4af9ab291e6aa49983, with inherited EIGS_* variables cleared. Each reproducer and paired control was executed; no runtime or test source was changed. This is a current correctness defect, not a proposed v1 language restriction.

主要言語
C
スター
3
フォーク
7
平均マージ
3時間 58分
マージ済み PR(30日)
105

環境構築

Codespaces で開く

このプロジェクトの開発コンテナを、あなたの GitHub アカウントでブラウザ上に起動します。

はじめの一歩

  1. issue を最後まで読み、次にプロジェクトのコントリビューションガイドを読みます。
  2. 着手することを issue にコメントします — 二人が同じ作業をするのを防げます。
  3. リポジトリをフォークし、ブランチを切って変更します。
  4. issue 番号を参照したプルリクエストを送ります。

InauguralSystems/EigenScript のほかの issue

InauguralSystems/EigenScript の issue をすべて見る

似ている issue

C の issue をもっと見る

新しい issue をメールで受け取る

初心者向けの GitHub issue を短くまとめたダイジェスト。