Step 5.5 phases 1-2: merge sx_scope into sx_primitives, 4-child define support
Phase 1: Absorb sx_scope.ml (180 lines) into sx_primitives.ml. Scope stacks, cookies, and trace infrastructure now live alongside other primitives. All 20 scope primitive registrations moved. References updated in sx_server.ml and sx_browser.ml. sx_scope.ml deleted. Phase 2: Transpiler handles (define name :effects (...) (fn ...)) forms. ml-emit-define and ml-emit-define-body detect keyword at position 2 and use (last expr) instead. Unblocks transpilation of spec/render.sx and web/adapter-html.sx which use 4-child defines extensively. 2598/2598 tests passing. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -50,9 +50,8 @@ let host_get_js (id : int) : Js.Unsafe.any =
|
||||
(* Global environment *)
|
||||
(* ================================================================== *)
|
||||
|
||||
(* Force module initialization — these modules register primitives
|
||||
in their let () = ... blocks but aren't referenced directly. *)
|
||||
let () = Sx_scope.clear_all ()
|
||||
(* Clear scope stacks at startup *)
|
||||
let () = Sx_primitives.scope_clear_all ()
|
||||
|
||||
let global_env = make_env ()
|
||||
let _sx_render_mode = ref false
|
||||
@@ -641,7 +640,7 @@ let () =
|
||||
(* --- Scope stack --- *)
|
||||
(* Scope primitives (scope-push!, scope-pop!, context, collect!, collected,
|
||||
emit!, emitted, scope-emit!, scope-emitted, etc.) are registered by
|
||||
Sx_scope module initialization in the primitives table.
|
||||
Sx_primitives module initialization in the primitives table.
|
||||
The CEK evaluator falls through to the primitives table when a symbol
|
||||
isn't in the env, so these work automatically.
|
||||
Only provide-push!/provide-pop! need explicit env bindings as aliases. *)
|
||||
@@ -921,11 +920,11 @@ let () =
|
||||
|
||||
(* Scope tracing API *)
|
||||
Js.Unsafe.set sx (Js.string "scopeTraceOn") (Js.wrap_callback (fun () ->
|
||||
Sx_scope.scope_trace_enable (); Js.Unsafe.inject Js.null));
|
||||
Sx_primitives.scope_trace_enable (); Js.Unsafe.inject Js.null));
|
||||
Js.Unsafe.set sx (Js.string "scopeTraceOff") (Js.wrap_callback (fun () ->
|
||||
Sx_scope.scope_trace_disable (); Js.Unsafe.inject Js.null));
|
||||
Sx_primitives.scope_trace_disable (); Js.Unsafe.inject Js.null));
|
||||
Js.Unsafe.set sx (Js.string "scopeTraceDrain") (Js.wrap_callback (fun () ->
|
||||
let log = Sx_scope.scope_trace_drain () in
|
||||
let log = Sx_primitives.scope_trace_drain () in
|
||||
Js.Unsafe.inject (Js.array (Array.of_list (List.map (fun s -> Js.Unsafe.inject (Js.string s)) log)))));
|
||||
|
||||
Js.Unsafe.set Js.Unsafe.global (Js.string "SxKernel") sx
|
||||
|
||||
Reference in New Issue
Block a user