feat(joinir): Phase 94 - P5b escape full E2E (derived ch + +1/+2)

This commit is contained in:
nyash-codex
2025-12-17 00:59:33 +09:00
parent c213ecc3c0
commit 7ab459503b
25 changed files with 1498 additions and 238 deletions

View File

@ -1,6 +1,6 @@
# Phase 93: ConditionOnly Derived SlotTrim / body-local
Status: Active
Status: ✅ DoneP0+P1
Scope: Pattern2Loop with Breakで「ConditionOnlyPHIで運ばない派生値」を毎イテレーション再計算できるようにする。
Related:
- 設計地図(入口): `docs/development/current/main/design/joinir-design-map.md`
@ -27,6 +27,19 @@ JoinIR で “初回の計算値が固定される” 事故を避ける。
- Trim: `src/mir/builder/control_flow/joinir/patterns/trim_loop_lowering.rs`
- ConditionOnly 用 break 生成(反転の有無を明示)
## 成果P1: 箱化・語彙のSSOT化
コミット: `c213ecc3 refactor(mir): Phase 93 リファクタリング - 箱化モジュール化`
- schedule:
- `decide_pattern2_schedule()` に判定を集約し、理由ConditionOnly / body-local / loop-local / defaultをSSOT化
- 決定→生成を分離decision→buildしてテスト容易性を上げた
- ConditionOnlyRecipe:
- `BreakSemantics`WhenMatch / WhenNotMatchを recipe に保持し、break 条件生成の責務を recipe 側へ移動
- `trim_loop_lowering.rs` 側の重複ヘルパーを削除
- Debug新 env 追加なし):
- 既存の `NYASH_JOINIR_DEBUG=1` の範囲で、`[phase93/*]` prefix に統一
## 受け入れ基準P0
- `apps/tests/loop_min_while.hako` が退行しないPattern2 baseline

View File

@ -0,0 +1,6 @@
# Phase 94: P5b “完全E2E” のための `ch` 再代入対応
- 目的: `tools/selfhost/test_pattern5b_escape_minimal.hako` を JoinIRPattern2Breakで VM E2E PASS に固定する。
- 新箱: `BodyLocalDerivedEmitter``src/mir/join_ir/lowering/common/body_local_derived_emitter.rs`)で `ch` を Select ベースの derived 値として表現する。
- 契約: `escape_cond` は base 値で評価し、override は副作用なし・評価順を SSOT 化。`HAKO_JOINIR_STRICT=1` では未対応形を理由付き Fail-Fast。