feat(joinir): Phase 94 - P5b escape full E2E (derived ch + +1/+2)
This commit is contained in:
@ -45,6 +45,8 @@ JoinIR の箱構造と責務、ループ/if の lowering パターンを把握
|
||||
- 実装(Phase 137-2): `src/mir/loop_canonicalizer/mod.rs`
|
||||
6. Phase 93: ConditionOnly Derived Slot(Trim / body-local)
|
||||
- `docs/development/current/main/phases/phase-93/README.md`
|
||||
7. Phase 94: P5b “完全E2E”(escape skip / derived)
|
||||
- `docs/development/current/main/phases/phase-94/README.md`
|
||||
6. MIR Builder(Context 分割の入口)
|
||||
- `src/mir/builder/README.md`
|
||||
7. Scope/BindingId(shadowing・束縛同一性の段階移行)
|
||||
|
||||
@ -49,6 +49,13 @@
|
||||
- schedule: `body-init → derived → break` を評価順SSOTとして強制
|
||||
- Phase 記録(入口): `docs/development/current/main/phases/phase-93/README.md`
|
||||
|
||||
## 2025‑12‑16:Phase 94(短報)
|
||||
|
||||
- P5b escape(`ch` 再代入 + `i` の +1/+2)を “derived(Select)” として扱い、VM E2E を固定。
|
||||
- 新箱: `BodyLocalDerivedEmitter` + 明示ポリシー(strict で理由付き Fail-Fast)
|
||||
- integration smoke: `tools/smokes/v2/profiles/integration/apps/phase94_p5b_escape_e2e.sh`
|
||||
- Phase 記録(入口): `docs/development/current/main/phases/phase-94/README.md`
|
||||
|
||||
## 2025‑12‑14:現状サマリ
|
||||
|
||||
(補足)docs が増えて迷子になったときの「置き場所ルール(SSOT)」:
|
||||
|
||||
@ -9,8 +9,8 @@ Related:
|
||||
## 直近(JoinIR/selfhost)
|
||||
|
||||
- **P5b “完全E2E”**(escape skip の実ループを end-to-end で固定)
|
||||
- 現状: 認識(Phase 91)+ lowering基盤(Phase 92)は完了、promotion が未整備で E2E を保留
|
||||
- 入口: `docs/development/current/main/phases/phase-92/README.md`
|
||||
- 現状: Phase 94 で VM E2E まで固定済み。次は selfhost 実コード(`apps/selfhost-vm/json_loader.hako`)へ横展開して回帰を減らす。
|
||||
- 入口: `docs/development/current/main/phases/phase-94/README.md`
|
||||
- **制御の再帰合成(docs-only → dev-only段階投入)**
|
||||
- ねらい: `loop/if` ネストの “構造” を SSOT(ControlTree/StepTree)で表せるようにする
|
||||
- 注意: canonicalizer は観測/構造SSOTまで(ValueId/PHI配線は Normalized 側へ)
|
||||
|
||||
@ -107,6 +107,7 @@ flowchart LR
|
||||
- Error tags(SSOT): [`src/mir/join_ir/lowering/error_tags.rs`](../../../../../src/mir/join_ir/lowering/error_tags.rs)
|
||||
- Loop Canonicalizer(前処理 SSOT): [`src/mir/loop_canonicalizer/mod.rs`](../../../../../src/mir/loop_canonicalizer/mod.rs)
|
||||
- ConditionOnly Derived Slot(Phase 93): [`src/mir/join_ir/lowering/common/condition_only_emitter.rs`](../../../../../src/mir/join_ir/lowering/common/condition_only_emitter.rs)
|
||||
- BodyLocalDerived Slot(Phase 94 / P5b): [`src/mir/join_ir/lowering/common/body_local_derived_emitter.rs`](../../../../../src/mir/join_ir/lowering/common/body_local_derived_emitter.rs)
|
||||
|
||||
---
|
||||
|
||||
|
||||
@ -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