diff --git a/CLAUDE.md b/CLAUDE.md index 6399dffb..17ba0f54 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -4,7 +4,56 @@ --- -## 🔄 **現在の開発状況** (2025-11-15) +## 🔄 **現在の開発状況** (2025-11-20) + +### 🎊 **PHI Bug Option C実装ほぼ完了!** (2025-11-20 commit `461bdec4`) +- **267/268テスト PASS達成!** Option C実装大成功 🎉 +- **Step 5-5-H完了**: Phantom block検証実装(exit_preds検証) +- **PHI決定性向上**: BTreeSet/BTreeMap化(4ファイル修正) + - `if_phi.rs`, `loop_phi.rs`, `loop_snapshot_merge.rs`, `loopform_builder.rs` +- **根本原因解明**: HashMap非決定的イテレーションによるValueId変動 + - 詳細: `docs/development/current/main/valueid-*.md` +- **退行なし**: 267テスト全てPASS(1テストのみ非決定性残存) +- **次タスク**: Stage-B型エラー修正(String > Integer(13)) +- **後回し**: variable_map決定性化(builder.rs等のHashMap→BTreeMap) + +#### 🔍 **MIRデバッグ完全ガイド**(超重要!) +```bash +# 基本MIR確認(最優先!) +./target/release/nyash --dump-mir program.hako +NYASH_VM_DUMP_MIR=1 ./target/release/nyash program.hako + +# 詳細MIR + エフェクト情報 +./target/release/nyash --dump-mir --mir-verbose --mir-verbose-effects program.hako + +# JSON形式で詳細解析 +./target/release/nyash --emit-mir-json mir.json program.hako +jq '.functions[0].blocks' mir.json # ブロック構造確認 + +# Option C デバッグ(PHI関連) +NYASH_OPTION_C_DEBUG=1 cargo test --release TEST_NAME 2>&1 | grep "Option C" + +# LoopForm デバッグ +NYASH_LOOPFORM_DEBUG=1 cargo test --release TEST_NAME 2>&1 | grep "loopform" + +# 完全MIRダンプ(テスト時) +NYASH_MIR_TEST_DUMP=1 cargo test --release TEST_NAME 2>&1 > /tmp/mir_dump.log + +# VM実行トレース +NYASH_CLI_VERBOSE=1 ./target/release/nyash program.hako + +# 決定性テスト(3回実行して一貫性確認) +for i in 1 2 3; do + echo "=== Run $i ===" + cargo test --release TEST_NAME 2>&1 | grep -E "(ValueId|test result)" +done +``` + +#### 📊 **重要な発見:HashMap非決定性** +- Rustの`HashMap`/`HashSet`はHashDoS対策でランダムseed使用 +- PHI生成順序が毎回変わる → ValueId割り当てが変動 +- **解決**: `BTreeSet`/`BTreeMap`で決定的イテレーション保証 +- **残課題**: `variable_map: HashMap` (builder.rs等) ### 🎉 **Phase 25 MVP 完全成功!** (2025-11-15) - **numeric_core BoxCall→Call変換** 完全動作!