feat(joinir): Phase 27.8-1~3 — Ops Box導入 + Toggle対応完了
## Phase 27.8-1: JoinIR 命令意味箱(Ops Box)作成 ✅ **新規ファイル**: `src/mir/join_ir_ops.rs` - `eval_binop()`: Add, Sub, Mul, Div, Or, And の評価ロジック一元化 - `eval_compare()`: Lt, Le, Gt, Ge, Eq, Ne の比較ロジック一元化 - エラー処理: `JoinIrOpError` 型で型安全 - 完全テストカバレッジ: 13個のユニットテスト **効果**: - BinOp/Compare の評価ロジックを一箇所に集約 - 再利用可能な API で将来の拡張が容易 - テスタビリティ向上 ## Phase 27.8-2: join_ir_runner.rs の Ops Box 統合 ✅ **変更**: `src/mir/join_ir_runner.rs` - BinOp/Compare の実装を ops box に完全移譲(約70行削減) - `JoinValue` / `JoinIrOpError` を ops box から再エクスポート - 後方互換性維持: `JoinRuntimeError = JoinIrOpError` **効果**: - コード重複削減(約70行) - 実装の一貫性保証(ops box の単一実装を使用) ## Phase 27.8-3: MIR→JoinIR Toggle 対応 ✅ **変更**: `src/mir/join_ir.rs` - `lower_skip_ws_to_joinir()`: トグル対応ディスパッチャー - `lower_skip_ws_handwritten()`: 既存実装をリネーム(Phase 27.1-27.7) - `lower_skip_ws_from_mir()`: MIR自動解析版スタブ(Phase 27.8-4 で実装予定) **環境変数制御**: ```bash # 手書き版(デフォルト) ./target/release/hakorune program.hako # MIR自動解析版(Phase 27.8-4 実装予定) NYASH_JOINIR_LOWER_FROM_MIR=1 ./target/release/hakorune program.hako ``` **効果**: - 段階的な移行が可能(既存動作を完全に維持) - A/B テストによる検証が容易 ## 変更ファイル - `src/mir/join_ir_ops.rs` (新規): Ops Box 実装 - `src/mir/join_ir_runner.rs`: Ops Box 使用に変更 - `src/mir/join_ir.rs`: Toggle 対応ディスパッチャー追加 - `src/mir/mod.rs`: join_ir_ops モジュール追加 ## コンパイル結果 ✅ 0 errors, 18 warnings(既存警告のみ) ✅ ビルド成功 ## 次のステップ **Phase 27.8-4**: `lower_skip_ws_from_mir()` 本実装 - MirQuery を使った MIR 解析 - パターンマッチング(init, header, break checks, body) - JoinIR 自動生成(entry function + loop_step function) 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
@ -39,6 +39,7 @@ pub mod value_kind; // Phase 26-A: ValueId型安全化
|
||||
pub mod query; // Phase 26-G: MIR read/write/CFGビュー (MirQuery)
|
||||
pub mod join_ir; // Phase 26-H: 関数正規化IR(JoinIR)
|
||||
pub mod join_ir_runner; // Phase 27.2: JoinIR 実行器(実験用)
|
||||
pub mod join_ir_ops; // Phase 27.8: JoinIR 命令意味箱(ops box)
|
||||
pub mod verification;
|
||||
pub mod verification_types; // extracted error types // Optimization subpasses (e.g., type_hints) // Phase 25.1f: Loop/If 共通ビュー(ControlForm)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user