## 実装内容
### 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>
6.9 KiB
6.9 KiB
JoinIR / Selfhost INDEX(読み始めガイド)
Status: Active
Scope: JoinIR と Selfhost(Stage‑B/Stage‑1/Stage‑3)に関する「最初に読むべき現役ドキュメント」だけを集約した入口。
このファイルは、JoinIR と Selfhost ラインの主戦場をすばやく把握するためのインデックスだよ。
歴史メモや詳細な Phase 文書に飛ぶ前に、まずここに載っている現役ドキュメントから辿っていくことを想定しているよ。
docs の置き場所(SSOT/Phase/調査ログの分離ルール)は、先にこれを読むと迷子になりにくいよ。
docs/development/current/main/DOCS_LAYOUT.md
1. まず全体像だけ掴みたいとき
- JoinIR 全体像(SSOT)
docs/development/current/main/joinir-architecture-overview.md
- Selfhost / Stage‑B〜3 の代表フロー
docs/development/current/main/selfhost_stage3_expected_flow.md
- 「いまどこまで進んでいるか」の現状サマリ
docs/development/current/main/10-Now.md- 「JoinIR / Loop / If ライン」
- 「JsonParser / Selfhost depth‑2 ライン」
- Phase 86–90(Loop frontends)の要約(1枚)
docs/development/current/main/phase86-90-loop-frontends-summary.md
2. JoinIR をこれから触る人向け
JoinIR の箱構造と責務、ループ/if の lowering パターンを把握したいときの読み順だよ。
- JoinIR の基本設計(SSOT)
docs/development/current/main/joinir-architecture-overview.md
- ループパターン空間とパターン番号の意味
docs/development/current/main/loop_pattern_space.md
- Boundary / ExitLine / Carrier の具体パターン
docs/development/current/main/joinir-boundary-builder-pattern.md
- JoinIR 設計地図(現役の地図)
docs/development/current/main/design/joinir-design-map.md
- Scope/BindingId(shadowing・束縛同一性の段階移行)
docs/development/current/main/phase73-scope-manager-design.mddocs/development/current/main/PHASE_74_SUMMARY.mddocs/development/current/main/PHASE_75_SUMMARY.mddocs/development/current/main/PHASE_77_EXECUTIVE_SUMMARY.mddocs/development/current/main/phase78-bindingid-promoted-carriers.mddocs/development/current/main/phase80-bindingid-p3p4-plan.md(P3/P4 への配線計画)docs/development/current/main/phase81-pattern2-exitline-contract.md(promoted carriers の ExitLine 契約検証)
- Boxification feedback(Phase 78–85 の振り返りと Phase 86 推奨)
docs/development/current/main/phase78-85-boxification-feedback.md
- 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
- Phase 87: LLVM Exe Line SSOT ✅
- Status: COMPLETE (2025-12-13)
- SSOT:
tools/build_llvm.sh- Single pipeline for .hako → executable - Deliverables:
- Design doc:
phase87-selfhost-llvm-exe-line.md(full troubleshooting + advanced usage) - Minimal fixture:
apps/tests/phase87_llvm_exe_min.hako(exit code 42) - Integration smoke:
tools/smokes/v2/profiles/integration/apps/phase87_llvm_exe_min.sh(SKIP if no LLVM)
- Design doc:
- Policy: No script duplication, integration smoke only (not quick), graceful SKIP
- Impact: Standard procedure established, prerequisites documented
- 代表的な Phase 文書(現役ラインとの接点だけ絞ったもの)
docs/development/current/main/phase33-16-INDEX.mddocs/development/current/main/phase33-17-joinir-modularization-analysis.mddocs/development/current/main/phase183-selfhost-depth2-joinir-status.md
- Phase 86–90(Loop frontends)の要約(1枚)
docs/development/current/main/phase86-90-loop-frontends-summary.md
Phase 文書は歴史や検証ログも含むので、「JoinIR の現役設計を確認した上で、必要なときだけ掘る」という前提で読んでね。
3. Selfhost(Stage‑B / Stage‑1 / Stage‑3)を触る人向け
自己ホストコンパイラのフローや実行手順、Ny Executor ラインの計画を押さえたいときの読み順だよ。
- Selfhost 全体フロー(Stage‑B / Stage‑1 / Stage‑3 と JSON v0)
docs/development/current/main/selfhost_stage3_expected_flow.md
- 実行手順・クイックスタート
docs/development/selfhosting/quickstart.mddocs/development/testing/selfhost_exe_stageb_quick_guide.md
- Ny Executor(Ny で MIR(JSON v0) を実行)のロードマップ
docs/development/roadmap/selfhosting-ny-executor.md
- Stage‑3 / depth‑2 関連で「現役」として参照する Phase 文書
docs/development/current/main/phase150_selfhost_stage3_depth1_baseline.mddocs/development/current/main/phase150_selfhost_stage3_depth1_results.mddocs/development/current/main/phase183-selfhost-depth2-joinir-status.mddocs/development/current/main/phase120_selfhost_stable_paths.md
4. 迷ったときの読み分けガイド
- JoinIR の箱や契約で迷っているとき
- → 2章の 1〜3 をこの順番で読む。
- Selfhost のビルド / 実行フローで迷っているとき
- → 3章の 1〜3 をこの順番で読む。
- VM backend の Box 解決(ConsoleBox / plugin / builtin)で迷っているとき
- →
docs/development/current/main/phase131-2-box-resolution-map.md(経路図) - →
docs/development/current/main/phase131-2-summary.md(要点)
- →
- LLVM(Python llvmlite)lowering の不具合切り分けで迷っているとき
- →
docs/development/current/main/phase131-3-llvm-lowering-inventory.md(再現ケース表 + 根本原因候補) - →
docs/development/current/main/phase131-11-case-c-summary.md(Case C:loop(true)+ break/continue の本命計画) - →
docs/development/current/main/case-c-infinite-loop-analysis.md(Case C: 詳細調査ログ) - →
docs/development/current/main/phase131-5-taglink-fix-summary.md(TAG-LINK: symbol 名の修正ログ) - →
docs/development/current/main/phase131-6-ssa-dominance-diagnosis.md(TAG-RUN の初期診断ログ・歴史) - →
docs/development/current/main/phase87-selfhost-llvm-exe-line.md(実行パイプラインのSSOT)
- →
- 「この Phase 文書は現役か?」で迷ったとき
- → まず
docs/development/current/main/10-Now.mdと
docs/development/current/main/30-Backlog.mdを確認し、そこで名前が挙がっている Phase 文書を優先して読んでね。
- → まず