Files
hakorune/docs/archive/phases/phase-170-197/phase194_joinlooptrace.md
nyash-codex a7dbc15878 feat(joinir): Phase 240-EX - Pattern2 header condition ExprLowerer integration
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>
2025-12-11 00:33:04 +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 で安定しているので、それを壊さない形でログだけを寄せることが目的。 Status: Historical