- 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>
90 lines
3.7 KiB
Markdown
90 lines
3.7 KiB
Markdown
# 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 箱に集約する。
|
||
- 環境変数からフラグを読み取り、どのカテゴリのトレースを出すかを制御する。
|
||
- 対応環境変数:
|
||
- `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)` – 汎用デバッグ
|
||
|
||
グローバルアクセサ:
|
||
|
||
```rust
|
||
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 セクションにまとめる:
|
||
- 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]`, ...)を簡単に説明。
|
||
|
||
---
|
||
|
||
## 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 で安定しているので、それを壊さない形でログだけを寄せることが目的。
|
||
|