vm-ext: phase C — extension-opcode-id SX primitive
Registers extension-opcode-id from sx_vm_extensions.ml module init. Lives downstream of both sx_primitives and sx_vm to avoid a build cycle. Accepts a string or symbol; returns Integer id when the opcode is registered, Nil otherwise. Compilers (lib/compiler.sx) call this to emit extension opcodes by name. Returning Nil rather than failing on unknown names lets a port's optimization opt in per-build — missing extensions degrade to slower correct execution. Tests: 5 new foundation cases — registered lookup, unknown → nil, symbol arg, zero-arg + integer-arg rejection. +5 pass vs Phase B baseline, no regressions across 11 conformance suites.
This commit is contained in:
@@ -279,8 +279,8 @@ compiler in `lib/compiler.sx` can call it to emit extension opcodes by name.
|
||||
Does not require any extension to actually exist — the primitive returns
|
||||
`nil` for unknown names, and the compiler falls back.
|
||||
|
||||
- [ ] Register `extension-opcode-id` in `sx_primitives.ml`.
|
||||
- [ ] Returns `Integer id` when registered, `Nil` otherwise.
|
||||
- [x] Register `extension-opcode-id` in `sx_primitives.ml`.
|
||||
- [x] Returns `Integer id` when registered, `Nil` otherwise.
|
||||
|
||||
**Tests:**
|
||||
- Primitive returns nil for unknown name.
|
||||
@@ -457,6 +457,20 @@ familiarity.
|
||||
|
||||
Newest first.
|
||||
|
||||
- **2026-05-15** — Phase C done. `extension-opcode-id` SX primitive
|
||||
registered from `sx_vm_extensions.ml` module init (avoids the
|
||||
`sx_primitives ↔ sx_vm` cycle by registering downstream of both).
|
||||
Accepts a string or symbol; returns `Integer id` for registered
|
||||
opcode names, `Nil` for unknown — so a missing extension at compile
|
||||
time degrades to a fallback rather than failure. 5 new foundation
|
||||
tests (`extension-opcode-id primitive` suite): registered lookup,
|
||||
unknown → nil, symbol arg, zero-arg rejection, integer-arg
|
||||
rejection. +5 pass vs Phase B baseline (4821 vs 4816), 1111
|
||||
pre-existing failures unchanged. Conformance suites green: erlang
|
||||
530/530, haskell 285/285, datalog 276/276, prolog 590/590, smalltalk
|
||||
847/847, common-lisp 487/487, apl 562/562, js 148/148, forth 632/638
|
||||
(pre-existing), tcl 3/4 (pre-existing), ocaml-on-sx unit 607/607.
|
||||
|
||||
- **2026-05-14** — Phase B done. Added `hosts/ocaml/lib/sx_vm_extension.ml`
|
||||
(interface: `handler` type, `extension_state` extensible variant,
|
||||
`EXTENSION` module type) and `sx_vm_extensions.ml` (registry: `register`,
|
||||
|
||||
Reference in New Issue
Block a user