feat(joinir): Phase 94 - P5b escape full E2E (derived ch + +1/+2)
This commit is contained in:
@ -1,6 +1,6 @@
|
||||
# Phase 93: ConditionOnly Derived Slot(Trim / body-local)
|
||||
|
||||
Status: Active
|
||||
Status: ✅ Done(P0+P1)
|
||||
Scope: Pattern2(Loop with Break)で「ConditionOnly(PHIで運ばない派生値)」を毎イテレーション再計算できるようにする。
|
||||
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)
|
||||
|
||||
6
docs/development/current/main/phases/phase-94/README.md
Normal file
6
docs/development/current/main/phases/phase-94/README.md
Normal file
@ -0,0 +1,6 @@
|
||||
# Phase 94: P5b “完全E2E” のための `ch` 再代入対応
|
||||
|
||||
- 目的: `tools/selfhost/test_pattern5b_escape_minimal.hako` を JoinIR(Pattern2Break)で 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。
|
||||
|
||||
Reference in New Issue
Block a user