Unify CALL_PRIM dispatch: vm_globals as single source of truth
Seed all primitives into vm_globals as NativeFn values at init. CALL_PRIM now looks up vm.globals only (not the separate primitives table). This means OP_DEFINE and registerNative naturally override primitives — browser.sx's (define set-cookie ...) now takes effect. The primitives Hashtbl remains for the compiler's primitive? predicate but has no runtime dispatch role. Tests: 2435 pass / 64 fail (pre-existing), vs 1718/771 baseline. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -680,6 +680,14 @@ let () =
|
||||
if env.parent = None then
|
||||
Hashtbl.replace _shared_vm_globals name v)
|
||||
|
||||
(* Seed _shared_vm_globals with all primitives as NativeFn values.
|
||||
Makes vm_globals the single source of truth for CALL_PRIM dispatch. *)
|
||||
let () =
|
||||
Hashtbl.iter (fun name fn ->
|
||||
if not (Hashtbl.mem _shared_vm_globals name) then
|
||||
Hashtbl.replace _shared_vm_globals name (NativeFn (name, fn))
|
||||
) Sx_primitives.primitives
|
||||
|
||||
let make_server_env () =
|
||||
let env = make_env () in
|
||||
Sx_render.setup_render_env env;
|
||||
|
||||
Reference in New Issue
Block a user