## ドキュメント更新 - CURRENT_TASK.md: Phase 25.2完了記録 - phase-25.1b/e/q/25.2 README更新 - json_v0_bridge/README.md新規追加 ## テストファイル整理 - vtable_*テストをtests/archive/に移動(6ファイル) - json_program_loop.rsテスト追加 ## コード整理 - プラグイン(egui/python-compiler)微修正 - benchmarks.rs, instance_v2.rs更新 - MIR関連ファイル微調整 ## 全体成果 Phase 25.2完了により: - LoopSnapshotMergeBox統一管理実装 - ValueId(1283)バグ根本解決 - ~35行コード削減(目標210行の16%) - 11テスト全部PASS、3実行テストケースPASS
71 lines
2.1 KiB
Rust
71 lines
2.1 KiB
Rust
// Legacy ConsoleBox vtable/VM テスト.
|
|
#[test]
|
|
#[ignore]
|
|
fn vtable_console_log_clear_smoke() {
|
|
use crate::backend::VM;
|
|
use crate::mir::{
|
|
BasicBlockId, ConstValue, EffectMask, FunctionSignature, MirFunction, MirInstruction,
|
|
MirModule, MirType,
|
|
};
|
|
std::env::set_var("NYASH_ABI_VTABLE", "1");
|
|
|
|
let sig = FunctionSignature {
|
|
name: "main".into(),
|
|
params: vec![],
|
|
return_type: MirType::Integer,
|
|
effects: EffectMask::PURE,
|
|
};
|
|
let mut f = MirFunction::new(sig, BasicBlockId::new(0));
|
|
let bb = f.entry_block;
|
|
let con = f.next_value_id();
|
|
f.get_block_mut(bb)
|
|
.unwrap()
|
|
.add_instruction(MirInstruction::NewBox {
|
|
dst: con,
|
|
box_type: "ConsoleBox".into(),
|
|
args: vec![],
|
|
});
|
|
let msg = f.next_value_id();
|
|
f.get_block_mut(bb)
|
|
.unwrap()
|
|
.add_instruction(MirInstruction::Const {
|
|
dst: msg,
|
|
value: ConstValue::String("hi".into()),
|
|
});
|
|
f.get_block_mut(bb)
|
|
.unwrap()
|
|
.add_instruction(MirInstruction::BoxCall {
|
|
dst: None,
|
|
box_val: con,
|
|
method: "log".into(),
|
|
args: vec![msg],
|
|
method_id: None,
|
|
effects: EffectMask::PURE,
|
|
});
|
|
f.get_block_mut(bb)
|
|
.unwrap()
|
|
.add_instruction(MirInstruction::BoxCall {
|
|
dst: None,
|
|
box_val: con,
|
|
method: "clear".into(),
|
|
args: vec![],
|
|
method_id: None,
|
|
effects: EffectMask::PURE,
|
|
});
|
|
let zero = f.next_value_id();
|
|
f.get_block_mut(bb)
|
|
.unwrap()
|
|
.add_instruction(MirInstruction::Const {
|
|
dst: zero,
|
|
value: ConstValue::Integer(0),
|
|
});
|
|
f.get_block_mut(bb)
|
|
.unwrap()
|
|
.add_instruction(MirInstruction::Return { value: Some(zero) });
|
|
let mut m = MirModule::new("console_smoke".into());
|
|
m.add_function(f);
|
|
let mut vm = VM::new();
|
|
let out = vm.execute_module(&m).expect("vm exec");
|
|
assert_eq!(out.to_string_box().value, "0");
|
|
}
|