mir(hints): add JoinResult trace smoke; add assign_both_branches case; docs: trace usage in scope-hints; all smokes pass

This commit is contained in:
Selfhosting Dev
2025-09-20 05:55:25 +09:00
parent a811857cc8
commit 1805ab3df2
3 changed files with 45 additions and 0 deletions

View File

@ -0,0 +1,8 @@
local x = 0
if (1 < 2) {
x = 10
} else {
x = 20
}
print(x)

View File

@ -26,3 +26,15 @@ Next
- Wire ScopeEnter/Leave in MirBuilder for function entry/exit and block constructs. - Wire ScopeEnter/Leave in MirBuilder for function entry/exit and block constructs.
- Add a simple debug dump when NYASH_MIR_TRACE_HINTS=1. - Add a simple debug dump when NYASH_MIR_TRACE_HINTS=1.
Runtime Trace
- Enable: `NYASH_MIR_TRACE_HINTS=1`
- Backend: any path that builds MIR (e.g., `--backend vm`)
- Output (stderr):
- `[mir][hint] ScopeEnter(0)` at function entry
- `[mir][hint] JoinResult(x)` when both branches assign same variable `x`
- `[mir][hint] ScopeLeave(0)` at function exit
Example
- `apps/tests/macro/if/assign_both_branches.nyash` emits JoinResult(x):
- `if (cond) { x = 10 } else { x = 20 }`
- Both branches assign `x`, builder hints the join.

View File

@ -0,0 +1,25 @@
#!/usr/bin/env bash
set -euo pipefail
root=$(cd "$(dirname "$0")"/../../../.. && pwd)
bin="$root/target/release/nyash"
src="apps/tests/macro/if/assign_both_branches.nyash"
if [ ! -x "$bin" ]; then
echo "nyash binary not found at $bin; build first (cargo build --release)" >&2
exit 1
fi
export NYASH_MIR_TRACE_HINTS=1
# Capture stderr; VM backend is sufficient (MIR builder runs)
out=$({ "$bin" --backend vm "$src" 1>/dev/null; } 2>&1 || true)
echo "$out" | rg -q "\[mir\]\[hint\] JoinResult\(x\)" || {
echo "[FAIL] missing JoinResult(x) hint" >&2
printf '%s\n' "$out" | tail -n 60 >&2
exit 2
}
echo "[OK] MIR hints JoinResult trace smoke passed"