Lambda→CEK dispatch: enable IO suspension through sx_call
Lambda calls in sx_call now go through the CEK machine instead of returning a Thunk for the tree-walker trampoline. This lets perform/ IO suspension work everywhere — including hyperscript wait/bounce. Key changes: - sx_runtime: Lambda case calls _cek_eval_lambda_ref (forward ref) - sx_vm: initializes ref with cek_step_loop + stub VM for suspension - sx_apply_cek: VmSuspended → __vm_suspended marker dict (not exception) - continue_with_call callable path: handles __vm_suspended with vm-resume-frame, matching the existing JIT Lambda pattern - sx_render: let VmSuspended propagate through try_catch - Remove invalid io-contract test (perform now suspends, not errors) Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -64,6 +64,7 @@ let expand_macro m args_val _env = match m with
|
||||
let try_catch try_fn catch_fn =
|
||||
try sx_call try_fn []
|
||||
with
|
||||
| Sx_vm.VmSuspended _ as e -> raise e
|
||||
| Eval_error msg -> sx_call catch_fn [String msg]
|
||||
| e -> sx_call catch_fn [String (Printexc.to_string e)]
|
||||
|
||||
|
||||
Reference in New Issue
Block a user