feat(mir): Phase 131-11-E - TypeFacts/TypeDemands 分離(SSOT)
## 実装内容
### 1) Rust MIR Builder (ops.rs + lifecycle.rs)
- OperandTypeClass で型分類(String/Integer/Unknown)
- BinOp 型推論: Integer + Unknown → Integer
- lifecycle.rs に repropagate_binop_types() パス追加
- PHI 型解決後に BinOp 型を再計算
### 2) JSON Emission (mir_json_emit.rs)
- 結果ベースの dst_type 発行に変更
- Integer → "i64", String → {kind: handle, box_type: StringBox}
### 3) Python LLVM Backend (binop.py)
- dst_type を確実な情報として使用
- dst_type != None なら優先して処理
## 結果
- ✅ MIR: PHI/BinOp が Integer として正しく型付け
- ✅ VM: `Result: 3` (正しい出力)
- ✅ JSON: `dst_type: "i64"` を発行
- ❓ LLVM: 別の codegen 問題の可能性あり
## SSOT 設計達成
- TypeFacts(事実): 定義命令から推論
- TypeDemands(要求): 使用箇所の coercion で吸収
- 後方伝播なし: Fail-Fast に統一
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>
This commit is contained in:
@ -38,7 +38,9 @@ JoinIR の箱構造と責務、ループ/if の lowering パターンを把握
|
||||
- `docs/development/current/main/loop_pattern_space.md`
|
||||
3. Boundary / ExitLine / Carrier の具体パターン
|
||||
- `docs/development/current/main/joinir-boundary-builder-pattern.md`
|
||||
4. Scope/BindingId(shadowing・束縛同一性の段階移行)
|
||||
4. JoinIR 設計地図(現役の地図)
|
||||
- `docs/development/current/main/design/joinir-design-map.md`
|
||||
5. Scope/BindingId(shadowing・束縛同一性の段階移行)
|
||||
- `docs/development/current/main/phase73-scope-manager-design.md`
|
||||
- `docs/development/current/main/PHASE_74_SUMMARY.md`
|
||||
- `docs/development/current/main/PHASE_75_SUMMARY.md`
|
||||
@ -46,16 +48,16 @@ JoinIR の箱構造と責務、ループ/if の lowering パターンを把握
|
||||
- `docs/development/current/main/phase78-bindingid-promoted-carriers.md`
|
||||
- `docs/development/current/main/phase80-bindingid-p3p4-plan.md`(P3/P4 への配線計画)
|
||||
- `docs/development/current/main/phase81-pattern2-exitline-contract.md`(promoted carriers の ExitLine 契約検証)
|
||||
5. Boxification feedback(Phase 78–85 の振り返りと Phase 86 推奨)
|
||||
6. Boxification feedback(Phase 78–85 の振り返りと Phase 86 推奨)
|
||||
- `docs/development/current/main/phase78-85-boxification-feedback.md`
|
||||
6. Phase 86: Carrier Init Builder + Error Tags ✅
|
||||
7. Phase 86: Carrier Init Builder + Error Tags ✅
|
||||
- **Status**: COMPLETE (2025-12-13)
|
||||
- **Modules**:
|
||||
- `src/mir/builder/control_flow/joinir/merge/carrier_init_builder.rs` (+8 tests)
|
||||
- `src/mir/join_ir/lowering/error_tags.rs` (+5 tests)
|
||||
- **Achievements**: SSOT 確立(CarrierInit → ValueId 生成統一、エラータグ中央化、DebugOutputBox 完全移行)
|
||||
- **Impact**: 987/987 tests PASS, +13 unit tests, Single Responsibility validated
|
||||
7. Phase 87: LLVM Exe Line SSOT ✅
|
||||
8. Phase 87: LLVM Exe Line SSOT ✅
|
||||
- **Status**: COMPLETE (2025-12-13)
|
||||
- **SSOT**: `tools/build_llvm.sh` - Single pipeline for .hako → executable
|
||||
- **Deliverables**:
|
||||
@ -64,11 +66,11 @@ JoinIR の箱構造と責務、ループ/if の lowering パターンを把握
|
||||
- Integration smoke: `tools/smokes/v2/profiles/integration/apps/phase87_llvm_exe_min.sh` (SKIP if no LLVM)
|
||||
- **Policy**: No script duplication, integration smoke only (not quick), graceful SKIP
|
||||
- **Impact**: Standard procedure established, prerequisites documented
|
||||
8. 代表的な Phase 文書(現役ラインとの接点だけ絞ったもの)
|
||||
9. 代表的な Phase 文書(現役ラインとの接点だけ絞ったもの)
|
||||
- `docs/development/current/main/phase33-16-INDEX.md`
|
||||
- `docs/development/current/main/phase33-17-joinir-modularization-analysis.md`
|
||||
- `docs/development/current/main/phase183-selfhost-depth2-joinir-status.md`
|
||||
9. Phase 86–90(Loop frontends)の要約(1枚)
|
||||
10. Phase 86–90(Loop frontends)の要約(1枚)
|
||||
- `docs/development/current/main/phase86-90-loop-frontends-summary.md`
|
||||
|
||||
Phase 文書は歴史や検証ログも含むので、「JoinIR の現役設計を確認した上で、必要なときだけ掘る」という前提で読んでね。
|
||||
|
||||
Reference in New Issue
Block a user