Files
hakorune/test_joinir_debug.rs

34 lines
1.1 KiB
Rust
Raw Normal View History

feat(joinir): Phase 34-6 MethodCall 構造と本物の substring 意味論 **Phase 34-6 実装完了**: MethodCall 構造を JoinIR に追加し、本物の substring 呼び出しを通すことに成功。 ## 主要変更 ### 1. MethodCall 構造追加 (34-6.1) - `src/mir/join_ir/mod.rs`: JoinInst::MethodCall バリアント (+8 lines) - 構造: `{ dst, receiver, method, args }` - 設計原則: JoinIR は構造のみ、意味論は MIR レベル ### 2. extract_value 更新 (34-6.2) - `src/mir/join_ir/frontend/ast_lowerer.rs`: Method 処理本物化 (+37 lines) - receiver/args を extract_value で再帰処理 - ダミー Const(0) 削除 → 本物の MethodCall 生成 - cond 処理修正: ValueId(0) ハードコード → extract_value で取得 ### 3. JoinIR→MIR 変換実装 (34-6.3) - `src/mir/join_ir_vm_bridge.rs`: MethodCall → BoxCall 変換 (+12 lines) - `src/mir/join_ir/json.rs`: MethodCall JSON シリアライゼーション (+16 lines) - `src/mir/join_ir_runner.rs`: MethodCall 未対応エラー (+7 lines) ### 4. テスト更新 (34-6.4) - `docs/.../fixtures/json_shape_read_value.program.json`: 本物の substring 構造 - `src/tests/joinir_frontend_if_select.rs`: run_joinir_via_vm 使用 - テスト成功: v="hello", at=3 → "hel" ✅ ## 成果 - ✅ テスト全通過(1 passed; 0 failed) - ✅ 設計原則確立: JoinIR = 構造 SSOT、意味論 = MIR レベル - ✅ Phase 33-10 原則との整合性: Method でも同じ原則適用 **ドキュメント更新**: CURRENT_TASK.md + TASKS.md(Phase 34-6 完了記録) 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-27 17:05:46 +09:00
//! JoinIR Frontend Debug Test
use std::fs;
fn main() {
// フィクスチャ読み込み
let fixture_path = "docs/private/roadmap2/phases/phase-34-joinir-frontend/fixtures/joinir_if_select_simple.program.json";
let fixture_json = fs::read_to_string(fixture_path)
.expect("Failed to read fixture JSON");
let program_json: serde_json::Value = serde_json::from_str(&fixture_json)
.expect("Failed to parse JSON");
println!("=== Program JSON ===");
println!("{}", serde_json::to_string_pretty(&program_json).unwrap());
// Lowerer 実行
use nyash_rust::mir::join_ir::frontend::AstToJoinIrLowerer;
let mut lowerer = AstToJoinIrLowerer::new();
let join_module = lowerer.lower_program_json(&program_json);
println!("\n=== JoinIR Module ===");
println!("Entry: {:?}", join_module.entry);
for (func_id, func) in &join_module.functions {
println!("\nFunction {:?}: {}", func_id, func.name);
println!(" Params: {:?}", func.params);
println!(" Instructions:");
for (i, inst) in func.body.iter().enumerate() {
println!(" {}: {:?}", i, inst);
}
}
}