1.9 KiB
1.9 KiB
MIR Core (~15) Coverage Checklist
Goal: Verify that the core MIR set executes correctly across VM and JIT (exe), then proceed to LLVM.
Target instructions (representative core):
- Basics: Const, UnaryOp, BinOp, Compare, TypeOp
- Memory: Load, Store
- Control: Branch, Jump, Return, Phi
- Box: NewBox, BoxCall, PluginInvoke
- Arrays: ArrayGet, ArraySet
- External: ExternCall
How to verify
-
VM path
- Run representative examples or unit snippets via
--backend vm. - Enable VM stats for visibility:
NYASH_VM_STATS=1
- Run representative examples or unit snippets via
-
JIT (compiler-only, exe emission where applicable)
- Enable JIT compile path and hostcall:
NYASH_JIT_EXEC=1 NYASH_JIT_THRESHOLD=1 NYASH_JIT_HOSTCALL=1 - For PHI minimal path tests:
NYASH_JIT_PHI_MIN=1 - Optional DOT/trace:
NYASH_JIT_DUMP=1and/orNYASH_JIT_EVENTS_COMPILE=1
- Enable JIT compile path and hostcall:
Quick smoke
- Build:
cargo build --release --features cranelift-jit - Run:
tools/mir15_smoke.sh release - Policy: Core-1 is required green; hostcall-based cases are optional (fallback allowed).
Suggested minimal scenarios
- Const/Return: function returns 0/1/42.
- BinOp/Compare: arithmetic and boolean conditions.
- Branch/Jump/Phi: single-diamond if/else with merging value.
- Load/Store: local slot store → load (VM) and JIT local slots (lower/core) coverage.
- TypeOp:
is/asvia builder emits TypeOp. - NewBox/BoxCall: call basic methods (e.g., StringBox.length, IntegerBox.get via PluginInvoke where applicable).
- PluginInvoke/by-name:
nyash.handle.of+ invoke name path. - Arrays: len/get/set/push hostcalls (JIT: handle-based externs wired).
- ExternCall:
env.console.log,env.debug.trace,env.runtime.checkpoint.
Notes
- Debug/Safepoint/Future/Await are rewritable via env toggles; core stays focused on the above.
- JIT direct path is read-only; mutating ops should fallback or be whitelisted accordingly.
Once coverage is green on VM and JIT, proceed to LLVM feature work (inkwell-backed) following docs in execution-backends.