- Created 4 representative test cases for Pattern3 patterns: * test_pattern3_if_phi_no_break.hako - Core Pattern3 (if-else PHI, no break/continue) * test_pattern3_skip_whitespace.hako - Pattern3+break style (routed to Pattern2) * test_pattern3_trim_leading.hako - Pattern3+break style (routed to Pattern2) * test_pattern3_trim_trailing.hako - Pattern3+break style (routed to Pattern2) - Validated Pattern3_WithIfPhi detection: * Pattern routing: Pattern3_WithIfPhi MATCHED confirmed * JoinIR lowering: 3 functions, 20 blocks → 8 blocks (successful) * [joinir/freeze] elimination: Complete (no errors on any test) - Clarified pattern classification: * Pattern3_WithIfPhi handles if-else PHI without break/continue * Loops with "if-else PHI + break" are routed to Pattern2_WithBreak * Break takes priority over if-else PHI in pattern detection - Cumulative achievement (Phase 162-164): * Pattern1: 6 loops working ✅ * Pattern2: 5 loops working ✅ * Pattern3 (no break): 1 loop working ✅ * Pattern3+break (as Pattern2): 3 loops working ✅ * Total: 15 loops covered, zero [joinir/freeze] errors - Updated CURRENT_TASK.md with Phase 164 section and findings Next: Phase 165 Pattern4 (continue) validation 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <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 で安定しているので、それを壊さない形でログだけを寄せることが目的。