feat(joinir): Phase 51 Field access / NewBox 式タイプ拡張

JoinIR Frontend の式タイプを拡張し、Field access と NewBox のパースと
MIR 変換をサポート。

## 新機能

### Field access (me.tokens 等)
- expr.rs に "Field" タイプハンドラ追加
- JoinInst::FieldAccess バリアント追加
- MIR 変換: FieldAccess → BoxCall (getter pattern)

### NewBox (new ArrayBox() 等)
- expr.rs に "NewBox" タイプハンドラ追加
- JoinInst::NewBox バリアント追加
- MIR 変換: NewBox → MirInstruction::NewBox

## 修正ファイル

- src/mir/join_ir/mod.rs: JoinInst 拡張
- src/mir/join_ir/frontend/ast_lowerer/expr.rs: パース対応
- src/mir/join_ir_vm_bridge/convert.rs: MIR 変換
- src/mir/join_ir_runner.rs: ハンドラ追加
- src/mir/join_ir/json.rs: JSON シリアライズ

## 注意

print_tokens/array_filter の JoinIR 完走には Phase 52 で
JSON 生成側 (LoopFrontendBinding) の修正が必要。

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
nyash-codex
2025-11-28 21:10:30 +09:00
parent 3dc691d39f
commit 6bb6f38a1c
6 changed files with 148 additions and 1 deletions

View File

@ -322,6 +322,24 @@ pub enum JoinInst {
args: Vec<VarId>,
},
/// Phase 51: フィールドアクセス
/// object.field の構造を JoinIR で表現
/// MIR 変換時に Load 命令に変換
FieldAccess {
dst: VarId,
object: VarId,
field: String,
},
/// Phase 51: Box インスタンス生成
/// new BoxName(args...) の構造を JoinIR で表現
/// MIR 変換時に NewBox 命令に変換
NewBox {
dst: VarId,
box_name: String,
args: Vec<VarId>,
},
/// Phase 41-4: 深いネスト if の複数変数 mergeelse なし)
///
/// # Pattern