Fix vm_globals seeding: run after make_server_env to avoid HO wrapper conflict
Move primitive seeding to end of make_server_env() so ho_via_cek wrappers (map, filter, etc.) are already in vm_globals. The seeding only adds primitives NOT already present, preserving wrappers. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -680,14 +680,6 @@ 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;
|
||||
@@ -743,6 +735,12 @@ let make_server_env () =
|
||||
| other -> other);
|
||||
(* client? returns false on server — overridden in browser via K.eval *)
|
||||
ignore (env_bind env "client?" (NativeFn ("client?", fun _ -> Bool false)));
|
||||
(* Seed vm_globals with any primitives not already there.
|
||||
Must run AFTER all bind/ho_via_cek calls so wrappers take precedence. *)
|
||||
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;
|
||||
env
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user