Implementation: - Add make_pattern2_scope_manager() helper for DRY - Header conditions use ExprLowerer for supported patterns - Legacy fallback for unsupported patterns - Fail-Fast on supported patterns that fail Tests: - 4 new tests (all pass) - test_expr_lowerer_supports_simple_header_condition_i_less_literal - test_expr_lowerer_supports_header_condition_var_less_var - test_expr_lowerer_header_condition_generates_expected_instructions - test_pattern2_header_condition_via_exprlowerer Also: Archive old phase documentation (34k lines removed) 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
3.7 KiB
3.7 KiB
Phase 194: JoinLoopTrace / Debug Integration
Status: In Progress(trace.rs は実装済み、呼び出し置き換えと docs 反映が残り) Date: 2025-12-06
Goal
JoinIR / ループ周辺のデバッグ出力を JoinLoopTrace に集約し、環境変数ベースの制御と logging_policy.md の方針に沿った形に整理する。
Implemented Infrastructure
JoinLoopTrace モジュール
- File:
src/mir/builder/control_flow/joinir/trace.rs - 役割:
- JoinIR ループまわりの
eprintln!を 1 箱に集約する。 - 環境変数からフラグを読み取り、どのカテゴリのトレースを出すかを制御する。
- JoinIR ループまわりの
- 対応環境変数:
NYASH_TRACE_VARMAP=1– variable_map トレース(var → ValueId)NYASH_JOINIR_DEBUG=1– JoinIR 全般のデバッグ(パターン routing、merge 統計など)NYASH_OPTION_C_DEBUG=1– PHI 生成(Option C)周りのトレースNYASH_JOINIR_MAINLINE_DEBUG=1– mainline routing(代表関数の routing)トレースNYASH_LOOPFORM_DEBUG=1– LoopForm 関連トレース(レガシー互換)
主なメソッド
pattern(tag, pattern_name, matched)– パターン検出・選択varmap(tag, &BTreeMap<String, ValueId>)– variable_map の状態joinir_stats(tag, func_count, block_count)– JoinIR モジュールの統計phi(tag, msg)– PHI 関連の操作merge(tag, msg)– JoinIR→MIR マージ進行exit_phi(tag, var_name, old_id, new_id)– Exit PHI 接続debug(tag, msg)/routing(tag, func_name, msg)/blocks(tag, msg)/instructions(tag, msg)– 汎用デバッグ
グローバルアクセサ:
pub fn trace() -> &'static JoinLoopTrace
でどこからでも呼び出せる。
Remaining Work (Phase 194)
Task 194-3: 生 eprintln! の JoinLoopTrace 置き換え
対象(例):
src/mir/builder/control_flow/joinir/patterns/pattern4_with_continue.rs- まだ 8 箇所程度
eprintln!ベースのログが残っている。 - ここを順次:
- varmap ログ →
trace().varmap(...) - パターン / ルーティング系 →
trace().pattern(...)/trace().routing(...) - それ以外の debug →
trace().debug(...)に差し替える。
- varmap ログ →
- まだ 8 箇所程度
同様に、他の JoinIR / loop 関連ファイルに散在している [joinir/...] 系 eprintln! も、必要に応じて trace.rs 経由に寄せる。
Task 194-4: logging_policy.md 反映
- File:
docs/development/current/main/logging_policy.md - 追記内容:
- JoinIR / ループ系のトレースカテゴリを 1 セクションにまとめる:
- varmap(NYASH_TRACE_VARMAP)
- joinir-debug(NYASH_JOINIR_DEBUG)
- phi-debug(NYASH_OPTION_C_DEBUG)
- mainline-debug(NYASH_JOINIR_MAINLINE_DEBUG)
- 開発時のみ ON、本番パスでは OFF を前提とする運用メモ。
trace.rsによる prefix([trace:pattern],[trace:varmap], ...)を簡単に説明。
- JoinIR / ループ系のトレースカテゴリを 1 セクションにまとめる:
Success Criteria
- JoinIR / ループ周辺の
eprintln!が、意味あるかたちでJoinLoopTrace経由に置き換わっている。 NYASH_TRACE_VARMAP=1やNYASH_JOINIR_DEBUG=1の挙動がlogging_policy.mdに説明されている。- デフォルト(env 未設定)ではトレースは出ず、既存の代表テスト(Pattern 1〜4)はログ無しで PASS する。
Notes
- Phase 194 は 挙動を変えない リファクタフェーズ(観測レイヤーの整形)として扱う。
- Loop パターンや ExitBinding まわりは Phase 193/196/197 で安定しているので、それを壊さない形でログだけを寄せることが目的。 Status: Historical