Stub VM uses real globals for CEK resume after IO suspension

The _cek_io_suspend_hook creates a stub VM to carry the suspended CEK
state. Previously used empty globals, which caused "Not callable: nil"
when the CEK resume needed platform functions. Now uses _default_vm_globals
(set to _vm_globals by sx_browser.ml) so all platform functions and
definitions are available during resume.

Remaining issue: still getting "resume: Not callable: nil" — the CEK
continuation env may not include letrec bindings from the island body.
The suspension point is inside reload-frame → hs-wait, and the resume
needs to call wait-boot (a letrec binding).

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-04-16 17:26:38 +00:00
parent d981e5f620
commit ca9196a693
7 changed files with 1309 additions and 1265 deletions

View File

@@ -1027,7 +1027,7 @@ let () = _vm_suspension_to_dict := (fun exn ->
gets swallowed as "IO suspension in non-IO context". *)
let () = _cek_io_suspend_hook := Some (fun suspended_state ->
let request = Sx_ref.cek_io_request suspended_state in
let vm = create (Hashtbl.create 0) in
let vm = create !_default_vm_globals in
vm.pending_cek <- Some suspended_state;
raise (VmSuspended (request, vm)))