51 lines
1.4 KiB
Markdown
51 lines
1.4 KiB
Markdown
## PR-12 — VM test harness: stepper, trace, and property tests
|
|
|
|
**Why:** Industrial quality means test tooling, not just “it runs”.
|
|
|
|
### Scope
|
|
|
|
* Add `VmRunner` test harness:
|
|
|
|
* step limit
|
|
* deterministic trace of stack deltas
|
|
* snapshot of locals
|
|
* Add property tests (lightweight):
|
|
|
|
* stack never underflows in verified programs
|
|
* verified programs never jump out of bounds
|
|
|
|
### Acceptance
|
|
|
|
* Debugging is fast, and regressions are caught.
|
|
|
|
---
|
|
|
|
## PR-13 — Optional: Refactor Value representation (tagged slots) for clarity
|
|
|
|
**Why:** If current `Value` representation is the source of complexity/bugs, refactor now.
|
|
|
|
### Scope (only if needed)
|
|
|
|
* Make `Slot` explicit:
|
|
|
|
* `Slot::I32`, `Slot::I64`, `Slot::U32`, `Slot::Bool`, `Slot::ConstId`, `Slot::GateId`, `Slot::Unit`
|
|
* Multi-slot types become sequences of slots.
|
|
|
|
### Acceptance
|
|
|
|
* Simpler, more verifiable runtime.
|
|
|
|
---
|
|
|
|
## Definition of Done (DoD) for PBS v0 “minimum executable”
|
|
|
|
A single canonical cartridge runs end-to-end:
|
|
|
|
* `let` declarations (locals)
|
|
* arithmetic (+, -, *, /, %, comparisons)
|
|
* `if/else` control flow
|
|
* `when` expression (if present in lowering)
|
|
* function calls with params + returns (including `void`)
|
|
* multiple return slots (flattened structs / hardware value types)
|
|
* host syscalls (e.g., `GfxClear565`, `InputPadSnapshot`, `InputTouchSnapshot`)
|
|
* deterministic traps (OOB bounded, invalid local, invalid call target, stack underflow) |