feat(joinir): S-5.2-improved - VM完全意味論統合完了
Phase 27-shortterm S-5.2-improved 実装完了: ## 実装内容 1. **execute_box_call() ラッパー追加**: - src/backend/mir_interpreter/mod.rs に公開 API 実装 - 1_000_000 番台レジスタで一時値管理 - 適切なクリーンアップ処理実装 2. **handle_box_call 可視性変更**: - src/backend/mir_interpreter/handlers/boxes.rs を pub に変更 - JoinIR Runner からアクセス可能に 3. **JoinIR Runner BoxCall 統合**: - src/mir/join_ir_runner.rs の BoxCall 処理を書き換え - StringBox 直接呼び出し削除 - VM の execute_box_call 経由に変更 - JoinValue ↔ VMValue 変換で統合 4. **不要な関数削除**: - expect_str(), expect_int(), box_to_join_value() 削除 - VMValue 変換に一本化 5. **テスト更新**: - joinir_runner_standalone.rs: VM インスタンス追加 - joinir_runner_min.rs: VM 再利用 ## 期待される効果 ✅ Void guards 完全対応 (Void.length() → 0) ✅ PluginBox/InstanceBox 将来対応可能 ✅ VM の完全な BoxCall 意味論統一 ✅ VM 2号機回避(ガードレール設計成功) ## テスト結果 ✅ joinir_runner_standalone_skip_ws ... ok ✅ joinir_runner_standalone_trim ... ok ✅ ビルド成功(0エラー) ## 完了タスク - [x] MirInterpreter::execute_box_call() 実装 - [x] 1_000_000 レジスタ帯域割り当て - [x] regs クリーンアップ実装 - [x] JoinIR Runner BoxCall 書き換え - [x] テスト更新&PASS確認 🎉 VM 完全意味論統合完了!
This commit is contained in:
@ -65,7 +65,9 @@ static box Runner {
|
||||
|
||||
let join_module =
|
||||
lower_skip_ws_to_joinir(&compiled.module).expect("lower_skip_ws_to_joinir failed");
|
||||
// S-5.2-improved: Reuse VM instance for JoinIR Runner
|
||||
let join_result = run_joinir_function(
|
||||
&mut vm,
|
||||
&join_module,
|
||||
JoinFuncId::new(0),
|
||||
&[JoinValue::Str(" abc".to_string())],
|
||||
@ -126,7 +128,9 @@ static box Runner {
|
||||
|
||||
let join_module = lower_funcscanner_trim_to_joinir(&compiled.module)
|
||||
.expect("lower_funcscanner_trim_to_joinir failed");
|
||||
// S-5.2-improved: Reuse VM instance for JoinIR Runner
|
||||
let join_result = run_joinir_function(
|
||||
&mut vm,
|
||||
&join_module,
|
||||
JoinFuncId::new(0),
|
||||
&[JoinValue::Str(" abc ".to_string())],
|
||||
|
||||
@ -60,8 +60,12 @@ fn joinir_runner_standalone_skip_ws() {
|
||||
|
||||
let join_module = build_skip_ws_joinir();
|
||||
|
||||
// S-5.2-improved: Create MirInterpreter instance for VM integration
|
||||
let mut vm = crate::backend::mir_interpreter::MirInterpreter::new();
|
||||
|
||||
// Test case 1: " abc" → 3
|
||||
let result = run_joinir_function(
|
||||
&mut vm,
|
||||
&join_module,
|
||||
JoinFuncId::new(0), // entry function
|
||||
&[JoinValue::Str(" abc".to_string())],
|
||||
@ -74,6 +78,7 @@ fn joinir_runner_standalone_skip_ws() {
|
||||
|
||||
// Test case 2: "" → 0
|
||||
let result_empty = run_joinir_function(
|
||||
&mut vm,
|
||||
&join_module,
|
||||
JoinFuncId::new(0),
|
||||
&[JoinValue::Str("".to_string())],
|
||||
@ -86,6 +91,7 @@ fn joinir_runner_standalone_skip_ws() {
|
||||
|
||||
// Test case 3: "abc" → 0
|
||||
let result_no_ws = run_joinir_function(
|
||||
&mut vm,
|
||||
&join_module,
|
||||
JoinFuncId::new(0),
|
||||
&[JoinValue::Str("abc".to_string())],
|
||||
@ -143,8 +149,12 @@ fn joinir_runner_standalone_trim() {
|
||||
|
||||
let join_module = build_trim_joinir();
|
||||
|
||||
// S-5.2-improved: Create MirInterpreter instance for VM integration
|
||||
let mut vm = crate::backend::mir_interpreter::MirInterpreter::new();
|
||||
|
||||
// Test case 1: " abc " → "abc " (simplified - only leading whitespace)
|
||||
let result = run_joinir_function(
|
||||
&mut vm,
|
||||
&join_module,
|
||||
JoinFuncId::new(0), // entry function
|
||||
&[JoinValue::Str(" abc ".to_string())],
|
||||
@ -157,6 +167,7 @@ fn joinir_runner_standalone_trim() {
|
||||
|
||||
// Test case 2: "" → ""
|
||||
let result_empty = run_joinir_function(
|
||||
&mut vm,
|
||||
&join_module,
|
||||
JoinFuncId::new(0),
|
||||
&[JoinValue::Str("".to_string())],
|
||||
@ -169,6 +180,7 @@ fn joinir_runner_standalone_trim() {
|
||||
|
||||
// Test case 3: "abc" → "abc"
|
||||
let result_no_ws = run_joinir_function(
|
||||
&mut vm,
|
||||
&join_module,
|
||||
JoinFuncId::new(0),
|
||||
&[JoinValue::Str("abc".to_string())],
|
||||
|
||||
Reference in New Issue
Block a user