chore: Phase 25.2関連ドキュメント更新&レガシーテストアーカイブ整理

## ドキュメント更新
- 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
This commit is contained in:
nyash-codex
2025-11-20 03:56:12 +09:00
parent dbd0900da9
commit 9bdf2ff069
30 changed files with 777 additions and 283 deletions

View File

@ -189,3 +189,63 @@ static box TestMultiVars {
}
println!("✅ MIR verification passed");
}
/// LoopScope/Env_in/out の基本挙動テスト
///
/// - Carrier: i
/// - Invariant: len
/// - 期待: i は PHI を通じてループキャリーされるが、len は PHI には乗らない。
/// MirVerifier が SSA を検証しつつ、Phi の個数が過剰になっていないことを確認)
#[test]
fn test_loop_scope_env_carrier_and_invariant() {
std::env::set_var("NYASH_VM_VERIFY_MIR", "1");
std::env::set_var("NYASH_LOOPFORM_DEBUG", "1");
std::env::set_var("NYASH_PARSER_STAGE3", "1");
std::env::set_var("NYASH_PARSER_ALLOW_SEMICOLON", "1");
let src = r#"
static box TestLoopScopeEnv {
test() {
local i = 0 // carrier
local len = 5 // invariant
loop(i < len) {
i = i + 1
}
return i + len
}
}
"#;
let ast = NyashParser::parse_from_string(src).expect("parse failed");
let mut mc = MirCompiler::with_options(false);
let cr = mc.compile(ast).expect("compile failed");
// MIR 構造検証SSA / PHI まわり)
let mut verifier = MirVerifier::new();
if let Err(errors) = verifier.verify_module(&cr.module) {
for err in &errors {
eprintln!("❌ MIR verification error: {}", err);
}
panic!("❌ MIR verification failed with {} errors", errors.len());
}
// PHI 命令数が「キャリア i の header/exit 用」に相当する範囲に収まっていることを軽く確認
// Invariant len に対して余計な PHI が増えていないことの簡易チェック)
let mut phi_count = 0usize;
for func in cr.module.functions.values() {
for block in func.blocks.values() {
for inst in &block.instructions {
if let crate::mir::MirInstruction::Phi { .. } = inst {
phi_count += 1;
}
}
}
}
// 25.2 以降は pinned / carrier / body-local exit PHI が追加されるため、
// PHI 数は実装詳細に依存する。ここでは「極端に増えていないこと」だけを確認する。
assert!(
phi_count >= 1 && phi_count <= 10,
"unexpected PHI count for simple carrier+invariant loop: {}",
phi_count
);
}