diff --git a/CURRENT_TASK.md b/CURRENT_TASK.md index 05b80141..214b30bd 100644 --- a/CURRENT_TASK.md +++ b/CURRENT_TASK.md @@ -37,8 +37,16 @@ - [x] Phase 171‑C-5: TrimLoopHelper 設計 ✅ (2025-12-07) → `TrimLoopHelper` struct で Trim 専用ロジックを一箇所に集約。 → `CarrierInfo::trim_helper()` アクセサ追加。4 unit tests。 - - [ ] Phase 171‑impl-Trim: Trim 用 JoinIR 生成 + - [x] Phase 171‑impl-Trim: Trim 用 JoinIR 生成 ✅ (2025-12-08) → `CarrierInfo::trim_helper()` を使って bool carrier の初期化・更新・exit PHI を生成。 + - [x] Phase 172-Trim-impl: Trim 用 MIR 生成 ✅ (2025-12-08) + → Pattern2 で Trim パターンの JoinIR→MIR lowering 実装完了。 + → emit_whitespace_check(), extract_substring_args() ヘルパ追加。 + - [x] Phase 200: JoinIR パイプライン Cleanup (Part 1) ✅ (2025-12-08) + → Task 200-1: Pattern × Box マトリクス表をドキュメント化(loop_pattern_space.md に追加)。 + → Task 200-2: JoinInlineBoundaryBuilder 導入(Pattern2 で試験導入、Builder パターンで構築統一化)。 + → Task 200-3: JoinIRVerifier 追加(LoopHeader PHI / ExitLine 契約のデバッグ検証)。 + → Task 200-4: CURRENT_TASK/overview 微修正(Phase 200 内容を反映)。 --- diff --git a/docs/development/current/main/joinir-architecture-overview.md b/docs/development/current/main/joinir-architecture-overview.md index afb81cad..7b434d38 100644 --- a/docs/development/current/main/joinir-architecture-overview.md +++ b/docs/development/current/main/joinir-architecture-overview.md @@ -171,6 +171,22 @@ JoinIR ラインで守るべきルールを先に書いておくよ: - 変数再接続はヘッダ PHI の dst を使って `builder.variable_map` を更新(Reconnector)。 - expr 用の PHI には一切触れない(carrier 専用ライン)。 +- **JoinInlineBoundaryBuilder(Phase 200-2 追加)** + - ファイル: `src/mir/join_ir/lowering/inline_boundary_builder.rs` + - 責務: + - JoinInlineBoundary の構築を Builder パターンで統一化。 + - フィールド直書きの散乱を防ぎ、inputs/outputs/condition_bindings/exit_bindings/loop_var_name/expr_result の設定を fluent API で実施。 + - Pattern2 で試験導入済み(Pattern3/4 は将来適用予定)。 + +- **JoinIRVerifier(Phase 200-3 追加)** + - ファイル: `src/mir/builder/control_flow/joinir/merge/mod.rs`(debug_assertions 専用関数) + - 責務: + - LoopHeader PHI / ExitLine 契約をデバッグビルドで検証する門番。 + - `verify_loop_header_phis()`: loop_var_name がある場合にヘッダ PHI が存在するか確認。 + - `verify_exit_line()`: exit_bindings が exit block に対応しているか確認。 + - `verify_joinir_contracts()`: merge_joinir_mir_blocks() の最後で全契約を一括チェック。 + - release ビルドでは完全に除去される(`#[cfg(debug_assertions)]`)。 + ### 2.4 expr result ライン(式としての戻り値) - **exit_phi_builder**