Files
hakorune/docs/development/current/main/phase194_joinlooptrace.md
nyash-codex 701f1fd650 feat(joinir): Phase 164 Pattern3 (If-Else PHI) validation complete
- 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>
2025-12-06 16:22:38 +09:00

3.7 KiB
Raw Blame History

Phase 194: JoinLoopTrace / Debug Integration

Status: In Progresstrace.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 箱に集約する。
    • 環境変数からフラグを読み取り、どのカテゴリのトレースを出すかを制御する。
  • 対応環境変数:
    • 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(...) に差し替える。

同様に、他の JoinIR / loop 関連ファイルに散在している [joinir/...]eprintln! も、必要に応じて trace.rs 経由に寄せる。

Task 194-4: logging_policy.md 反映

  • File: docs/development/current/main/logging_policy.md
  • 追記内容:
    • JoinIR / ループ系のトレースカテゴリを 1 セクションにまとめる:
      • varmapNYASH_TRACE_VARMAP
      • joinir-debugNYASH_JOINIR_DEBUG
      • phi-debugNYASH_OPTION_C_DEBUG
      • mainline-debugNYASH_JOINIR_MAINLINE_DEBUG
    • 開発時のみ ON、本番パスでは OFF を前提とする運用メモ。
    • trace.rs による prefix[trace:pattern], [trace:varmap], ...)を簡単に説明。

Success Criteria

  • JoinIR / ループ周辺の eprintln! が、意味あるかたちで JoinLoopTrace 経由に置き換わっている。
  • NYASH_TRACE_VARMAP=1NYASH_JOINIR_DEBUG=1 の挙動が logging_policy.md に説明されている。
  • デフォルトenv 未設定ではトレースは出ず、既存の代表テストPattern 1〜4はログ無しで PASS する。

Notes

  • Phase 194 は 挙動を変えない リファクタフェーズ(観測レイヤーの整形)として扱う。
  • Loop パターンや ExitBinding まわりは Phase 193/196/197 で安定しているので、それを壊さない形でログだけを寄せることが目的。