stage3: unify to cleanup; MIR return-defer; docs+smokes updated; LLVM(harness): finalize_phis ownership, ret.py simplified, uses-predeclare; cleanup return override green; method-postfix cleanup return WIP (PHI head)

This commit is contained in:
Selfhosting Dev
2025-09-19 02:07:38 +09:00
parent 951a050592
commit 5e818eeb7e
205 changed files with 9671 additions and 1849 deletions

View File

@ -58,6 +58,53 @@ echo 'print("Hello Nyash!")' > local_tests/test_hello.nyash
./target/release/nyash --backend vm --jit-exec --jit-hostcall examples/jit_string_is_empty.nyash
```
## PHI ポリシーPhase15と検証トグル
- 既定は PHIoffエッジコピー方式だよ。MIR では Phi を発行せず、合流は predecessor 側に `Copy` を挿入して表現するよ。
- LLVM/llvmlite 側が PHI を合成するAOT/EXE。PyVM は意味論のリファレンスとして動作。
- 詳細は `docs/reference/mir/phi_policy.md` を参照してね。
テスト時の環境(推奨)
```bash
# 既定の PHI-off を明示(未設定なら 1 と同義)
export NYASH_MIR_NO_PHI=${NYASH_MIR_NO_PHI:-1}
# エッジコピー厳格検証(オプション)
# マージブロック自身の self-copy 禁止、全 predecessor に Copy があるか検査
export NYASH_VERIFY_EDGE_COPY_STRICT=1
# PHI-onレガシー/保守限定、開発者のみ)
# ビルド時に feature を付け、実行時は 0 に設定
cargo test --features phi-legacy
NYASH_MIR_NO_PHI=0 cargo test --features phi-legacy -- --ignored
```
スモークスクリプトの既定
- `tools/smokes/curated_llvm.sh`: `NYASH_MIR_NO_PHI=${NYASH_MIR_NO_PHI:-1}` を既定設定
- `tools/smokes/fast_local.sh`: 同上。`NYASH_VERIFY_EDGE_COPY_STRICT` は opt-in既定 0
## PHI 配線トレースJSONL
- 目的: LLVM 側の PHI 合成が、PHIoff のエッジコピー規約に整合しているかを可視化・検証する。
- 出力: 1 行 JSONJSONL`NYASH_LLVM_TRACE_OUT=<path>` に追記出力。
- イベント: `finalize_begin/finalize_dst/add_incoming/wire_choose/snapshot` などpred→dst 整合が分かる)
クイック実行
```bash
# すべてPHIoffで OK。llvmlite ハーネスと if-merge プリパスをON
NYASH_LLVM_TRACE_PHI=1 NYASH_LLVM_TRACE_OUT=tmp/phi.jsonl \
NYASH_LLVM_USE_HARNESS=1 NYASH_LLVM_PREPASS_IFMERGE=1 \
bash tools/test/smoke/llvm/phi_trace/test.sh
# 結果の検証(要: python3
python3 tools/phi_trace_check.py --file tmp/phi.jsonl --summary
```
ショートカット
- `tools/smokes/phi_trace_local.sh`(ビルド→スモーク→チェックを一括)
- `tools/smokes/fast_local.sh``NYASH_LLVM_TRACE_SMOKE=1` でオプション実行
## 🔌 **プラグインテスターBID-FFI診断ツール**
```bash
# プラグインテスターのビルド
@ -107,4 +154,4 @@ DEBUG = new DebugBox()
DEBUG.startTracking()
DEBUG.trackBox(myObject, "説明")
print(DEBUG.memoryReport())
```
```