Files
rose-ash/shared/static/wasm/sx_browser.bc.wasm.assets/sx-ea36a0db.wasm.map
giles c72a5af04d WIP: pre-existing changes from WASM browser work + test infrastructure
Accumulated changes from WASM browser development sessions:
- sx_runtime.ml: signal subscription + notify, env unwrap tolerance
- sx_browser.bc.js: rebuilt js_of_ocaml browser kernel
- sx_browser.bc.wasm.js + assets: WASM browser kernel build
- sx-platform.js browser tests (test_js, test_platform, test_wasm)
- Playwright sx-inspect.js: interactive page inspector tool
- harness-web.sx: DOM assertion updates
- deploy.sh, Dockerfile, dune-project: build config updates
- test-stepper.sx: stepper unit tests
- reader-macro-demo plan update

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-26 16:40:38 +00:00

2 lines
293 KiB
Plaintext
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
{"version":3,"sections":[{"offset":{"line":0,"column":69211},"map":{"version":3,"sources":["/workspace_root/lib/sx_types.ml","/builtin/blackbox.ml"],"sourcesContent":["(** Core types for the SX language.\n\n The [value] sum type represents every possible SX runtime value.\n OCaml's algebraic types make the CEK machine's frame dispatch a\n pattern match — exactly what the spec describes. *)\n\n(** {1 Symbol interning} *)\n\n(** Map symbol names to small integers for O(1) env lookups.\n The intern table is populated once per unique symbol name;\n all subsequent env operations use the integer key. *)\n\nlet sym_to_id : (string, int) Hashtbl.t = Hashtbl.create 512\nlet id_to_sym : (int, string) Hashtbl.t = Hashtbl.create 512\nlet sym_next = ref 0\n\nlet intern s =\n match Hashtbl.find_opt sym_to_id s with\n | Some id -> id\n | None ->\n let id = !sym_next in\n incr sym_next;\n Hashtbl.replace sym_to_id s id;\n Hashtbl.replace id_to_sym id s;\n id\n\nlet unintern id =\n match Hashtbl.find_opt id_to_sym id with\n | Some s -> s\n | None -> \"<sym:\" ^ string_of_int id ^ \">\"\n\n\n(** {1 Environment} *)\n\n(** Lexical scope chain. Each frame holds a mutable binding table\n keyed by interned symbol IDs for fast lookup. *)\ntype env = {\n bindings : (int, value) Hashtbl.t;\n parent : env option;\n}\n\n(** {1 Values} *)\n\nand value =\n | Nil\n | Bool of bool\n | Number of float\n | String of string\n | Symbol of string\n | Keyword of string\n | List of value list\n | Dict of dict\n | Lambda of lambda\n | Component of component\n | Island of island\n | Macro of macro\n | Thunk of value * env\n | Continuation of (value -> value) * dict option\n | NativeFn of string * (value list -> value)\n | Signal of signal\n | RawHTML of string\n | Spread of (string * value) list\n | SxExpr of string (** Opaque SX wire-format string — aser output. *)\n | Env of env (** First-class environment — used by CEK machine state dicts. *)\n | ListRef of value list ref (** Mutable list — JS-style array for append! *)\n | CekState of cek_state (** Optimized CEK machine state — avoids Dict allocation. *)\n | CekFrame of cek_frame (** Optimized CEK continuation frame. *)\n | VmClosure of vm_closure (** VM-compiled closure — callable within the VM without allocating a new VM. *)\n\n(** CEK machine state — record instead of Dict for performance.\n 5 fields × 55K steps/sec = 275K Hashtbl allocations/sec eliminated. *)\nand cek_state = {\n cs_control : value;\n cs_env : value;\n cs_kont : value;\n cs_phase : string;\n cs_value : value;\n}\n\n(** CEK continuation frame — tagged record covering all 29 frame types.\n Fields are named generically; not all are used by every frame type.\n Eliminates ~100K Hashtbl allocations per page render. *)\nand cek_frame = {\n cf_type : string; (* frame type tag: \"if\", \"let\", \"call\", etc. *)\n cf_env : value; (* environment — every frame has this *)\n cf_name : value; (* let/define/set/scope: binding name *)\n cf_body : value; (* when/let: body expr *)\n cf_remaining : value; (* begin/cond/map/etc: remaining exprs *)\n cf_f : value; (* call/map/filter/etc: function *)\n cf_args : value; (* call: raw args; arg: evaled args *)\n cf_results : value; (* map/filter/dict: accumulated results *)\n cf_extra : value; (* extra field: scheme, indexed, value, phase, etc. *)\n cf_extra2 : value; (* second extra: emitted, etc. *)\n}\n\n(** Mutable string-keyed table (SX dicts support [dict-set!]). *)\nand dict = (string, value) Hashtbl.t\n\nand lambda = {\n l_params : string list;\n l_body : value;\n l_closure : env;\n mutable l_name : string option;\n mutable l_compiled : vm_closure option; (** Lazy JIT cache *)\n}\n\nand component = {\n c_name : string;\n c_params : string list;\n c_has_children : bool;\n c_body : value;\n c_closure : env;\n c_affinity : string; (** \"auto\" | \"client\" | \"server\" *)\n mutable c_compiled : vm_closure option; (** Lazy JIT cache *)\n}\n\nand island = {\n i_name : string;\n i_params : string list;\n i_has_children : bool;\n i_body : value;\n i_closure : env;\n}\n\nand macro = {\n m_params : string list;\n m_rest_param : string option;\n m_body : value;\n m_closure : env;\n m_name : string option;\n}\n\nand signal = {\n mutable s_value : value;\n mutable s_subscribers : (unit -> unit) list;\n mutable s_deps : signal list;\n}\n\n(** {1 Bytecode VM types}\n\n Defined here (not in sx_vm.ml) because [vm_code.constants] references\n [value] and [lambda.l_compiled] references [vm_closure] — mutual\n recursion requires all types in one [and] chain. *)\n\n(** Compiled function body — bytecode + constant pool. *)\nand vm_code = {\n vc_arity : int;\n vc_locals : int;\n vc_bytecode : int array;\n vc_constants : value array;\n}\n\n(** Upvalue cell — shared mutable reference to a captured variable. *)\nand vm_upvalue_cell = {\n mutable uv_value : value;\n}\n\n(** Closure — compiled code + captured upvalues + live env reference. *)\nand vm_closure = {\n vm_code : vm_code;\n vm_upvalues : vm_upvalue_cell array;\n vm_name : string option;\n vm_env_ref : (string, value) Hashtbl.t;\n vm_closure_env : env option; (** Original closure env for inner functions *)\n}\n\n\n(** {1 Forward ref for calling VM closures from outside the VM} *)\n\nlet _vm_call_closure_ref : (vm_closure -> value list -> value) ref =\n ref (fun _ _ -> raise (Failure \"VM call_closure not initialized\"))\n\n\n(** {1 Errors} *)\n\nexception Eval_error of string\nexception Parse_error of string\n\n\n(** {1 Environment operations} *)\n\nlet make_env () =\n { bindings = Hashtbl.create 16; parent = None }\n\nlet env_extend parent =\n { bindings = Hashtbl.create 16; parent = Some parent }\n\nlet env_bind env name v =\n Hashtbl.replace env.bindings (intern name) v; Nil\n\n(* Internal: scope-chain lookup with pre-interned ID *)\nlet rec env_has_id env id =\n Hashtbl.mem env.bindings id ||\n match env.parent with Some p -> env_has_id p id | None -> false\n\nlet env_has env name = env_has_id env (intern name)\n\nlet rec env_get_id env id name =\n match Hashtbl.find_opt env.bindings id with\n | Some v -> v\n | None ->\n match env.parent with\n | Some p -> env_get_id p id name\n | None ->\n raise (Eval_error (\"Undefined symbol: \" ^ name))\n\nlet env_get env name = env_get_id env (intern name) name\n\nlet rec env_set_id env id v =\n if Hashtbl.mem env.bindings id then\n (Hashtbl.replace env.bindings id v; Nil)\n else\n match env.parent with\n | Some p -> env_set_id p id v\n | None -> Hashtbl.replace env.bindings id v; Nil\n\nlet env_set env name v = env_set_id env (intern name) v\n\nlet env_merge base overlay =\n if base == overlay then\n { bindings = Hashtbl.create 16; parent = Some base }\n else begin\n let rec is_descendant e depth =\n if depth > 100 then false\n else if e == base then true\n else match e.parent with Some p -> is_descendant p (depth + 1) | None -> false\n in\n if is_descendant overlay 0 then\n { bindings = Hashtbl.create 16; parent = Some base }\n else begin\n let e = { bindings = Hashtbl.create 16; parent = Some base } in\n Hashtbl.iter (fun id v ->\n if not (env_has_id base id) then Hashtbl.replace e.bindings id v\n ) overlay.bindings;\n e\n end\n end\n\n\n(** {1 Value extraction helpers} *)\n\nlet value_to_string = function\n | String s -> s | Symbol s -> s | Keyword k -> k\n | Number n -> if Float.is_integer n then string_of_int (int_of_float n) else Printf.sprintf \"%g\" n\n | Bool true -> \"true\" | Bool false -> \"false\"\n | Nil -> \"\" | _ -> \"<value>\"\n\nlet value_to_string_list = function\n | List items | ListRef { contents = items } -> List.map value_to_string items\n | _ -> []\n\nlet value_to_bool = function\n | Bool b -> b | Nil -> false | _ -> true\n\nlet value_to_string_opt = function\n | String s -> Some s | Symbol s -> Some s | Nil -> None | _ -> None\n\n\n(** {1 Constructors — accept [value] args from transpiled code} *)\n\nlet unwrap_env_val = function\n | Env e -> e\n | _ -> raise (Eval_error \"make_lambda: expected env for closure\")\n\nlet make_lambda params body closure =\n let ps = match params with\n | List items -> List.map value_to_string items\n | _ -> value_to_string_list params\n in\n Lambda { l_params = ps; l_body = body; l_closure = unwrap_env_val closure; l_name = None; l_compiled = None }\n\nlet make_component name params has_children body closure affinity =\n let n = value_to_string name in\n let ps = value_to_string_list params in\n let hc = value_to_bool has_children in\n let aff = match affinity with String s -> s | _ -> \"auto\" in\n Component {\n c_name = n; c_params = ps; c_has_children = hc;\n c_body = body; c_closure = unwrap_env_val closure; c_affinity = aff;\n c_compiled = None;\n }\n\nlet make_island name params has_children body closure =\n let n = value_to_string name in\n let ps = value_to_string_list params in\n let hc = value_to_bool has_children in\n Island {\n i_name = n; i_params = ps; i_has_children = hc;\n i_body = body; i_closure = unwrap_env_val closure;\n }\n\nlet make_macro params rest_param body closure name =\n let ps = value_to_string_list params in\n let rp = value_to_string_opt rest_param in\n let n = value_to_string_opt name in\n Macro {\n m_params = ps; m_rest_param = rp;\n m_body = body; m_closure = unwrap_env_val closure; m_name = n;\n }\n\nlet make_thunk expr env = Thunk (expr, unwrap_env_val env)\n\nlet make_symbol name = Symbol (value_to_string name)\nlet make_keyword name = Keyword (value_to_string name)\n\n\n(** {1 Type inspection} *)\n\nlet type_of = function\n | Nil -> \"nil\"\n | Bool _ -> \"boolean\"\n | Number _ -> \"number\"\n | String _ -> \"string\"\n | Symbol _ -> \"symbol\"\n | Keyword _ -> \"keyword\"\n | List _ | ListRef _ -> \"list\"\n | Dict _ -> \"dict\"\n | Lambda _ -> \"lambda\"\n | Component _ -> \"component\"\n | Island _ -> \"island\"\n | Macro _ -> \"macro\"\n | Thunk _ -> \"thunk\"\n | Continuation (_, _) -> \"continuation\"\n | NativeFn _ -> \"function\"\n | Signal _ -> \"signal\"\n | RawHTML _ -> \"raw-html\"\n | Spread _ -> \"spread\"\n | SxExpr _ -> \"sx-expr\"\n | Env _ -> \"env\"\n | CekState _ -> \"dict\" (* CEK state behaves as a dict for type checks *)\n | CekFrame _ -> \"dict\"\n | VmClosure _ -> \"function\"\n\nlet is_nil = function Nil -> true | _ -> false\nlet is_lambda = function Lambda _ -> true | _ -> false\nlet is_component = function Component _ -> true | _ -> false\nlet is_island = function Island _ -> true | _ -> false\nlet is_macro = function Macro _ -> true | _ -> false\nlet is_thunk = function Thunk _ -> true | _ -> false\nlet is_signal = function\n | Signal _ -> true\n | Dict d -> Hashtbl.mem d \"__signal\"\n | _ -> false\n\nlet is_callable = function\n | Lambda _ | NativeFn _ | Continuation (_, _) | VmClosure _ -> true\n | _ -> false\n\n\n(** {1 Truthiness} *)\n\n(** SX truthiness: everything is truthy except [Nil] and [Bool false]. *)\nlet sx_truthy = function\n | Nil | Bool false -> false\n | _ -> true\n\n\n(** {1 Accessors} *)\n\nlet symbol_name = function\n | Symbol s -> String s\n | v -> raise (Eval_error (\"Expected symbol, got \" ^ type_of v))\n\nlet keyword_name = function\n | Keyword k -> String k\n | v -> raise (Eval_error (\"Expected keyword, got \" ^ type_of v))\n\nlet lambda_params = function\n | Lambda l -> List (List.map (fun s -> String s) l.l_params)\n | v -> raise (Eval_error (\"Expected lambda, got \" ^ type_of v))\n\nlet lambda_body = function\n | Lambda l -> l.l_body\n | v -> raise (Eval_error (\"Expected lambda, got \" ^ type_of v))\n\nlet lambda_closure = function\n | Lambda l -> Env l.l_closure\n | v -> raise (Eval_error (\"Expected lambda, got \" ^ type_of v))\n\nlet lambda_name = function\n | Lambda l -> (match l.l_name with Some n -> String n | None -> Nil)\n | v -> raise (Eval_error (\"Expected lambda, got \" ^ type_of v))\n\nlet set_lambda_name l n = match l with\n | Lambda l -> l.l_name <- Some n; Nil\n | _ -> raise (Eval_error \"set-lambda-name!: not a lambda\")\n\nlet component_name = function\n | Component c -> String c.c_name\n | Island i -> String i.i_name\n | v -> raise (Eval_error (\"Expected component, got \" ^ type_of v))\n\nlet component_params = function\n | Component c -> List (List.map (fun s -> String s) c.c_params)\n | Island i -> List (List.map (fun s -> String s) i.i_params)\n | v -> raise (Eval_error (\"Expected component, got \" ^ type_of v))\n\nlet component_body = function\n | Component c -> c.c_body\n | Island i -> i.i_body\n | v -> raise (Eval_error (\"Expected component, got \" ^ type_of v))\n\nlet component_closure = function\n | Component c -> Env c.c_closure\n | Island i -> Env i.i_closure\n | v -> raise (Eval_error (\"Expected component, got \" ^ type_of v))\n\nlet component_has_children = function\n | Component c -> Bool c.c_has_children\n | Island i -> Bool i.i_has_children\n | v -> raise (Eval_error (\"Expected component, got \" ^ type_of v))\n\nlet component_affinity = function\n | Component c -> String c.c_affinity\n | Island _ -> String \"client\"\n | _ -> String \"auto\"\n\nlet macro_params = function\n | Macro m -> List (List.map (fun s -> String s) m.m_params)\n | v -> raise (Eval_error (\"Expected macro, got \" ^ type_of v))\n\nlet macro_rest_param = function\n | Macro m -> (match m.m_rest_param with Some s -> String s | None -> Nil)\n | v -> raise (Eval_error (\"Expected macro, got \" ^ type_of v))\n\nlet macro_body = function\n | Macro m -> m.m_body\n | v -> raise (Eval_error (\"Expected macro, got \" ^ type_of v))\n\nlet macro_closure = function\n | Macro m -> Env m.m_closure\n | v -> raise (Eval_error (\"Expected macro, got \" ^ type_of v))\n\nlet thunk_expr = function\n | Thunk (e, _) -> e\n | v -> raise (Eval_error (\"Expected thunk, got \" ^ type_of v))\n\nlet thunk_env = function\n | Thunk (_, e) -> Env e\n | v -> raise (Eval_error (\"Expected thunk, got \" ^ type_of v))\n\n\n(** {1 Dict operations} *)\n\nlet make_dict () : dict = Hashtbl.create 8\n\nlet dict_get (d : dict) key =\n match Hashtbl.find_opt d key with Some v -> v | None -> Nil\n\nlet dict_has (d : dict) key = Hashtbl.mem d key\n\nlet dict_set (d : dict) key v = Hashtbl.replace d key v\n\nlet dict_delete (d : dict) key = Hashtbl.remove d key\n\nlet dict_keys (d : dict) =\n Hashtbl.fold (fun k _ acc -> String k :: acc) d []\n\nlet dict_vals (d : dict) =\n Hashtbl.fold (fun _ v acc -> v :: acc) d []\n\n\n(** {1 Value display} *)\n\nlet rec inspect = function\n | Nil -> \"nil\"\n | Bool true -> \"true\"\n | Bool false -> \"false\"\n | Number n ->\n if Float.is_integer n then Printf.sprintf \"%d\" (int_of_float n)\n else Printf.sprintf \"%g\" n\n | String s ->\n let buf = Buffer.create (String.length s + 2) in\n Buffer.add_char buf '\"';\n String.iter (function\n | '\"' -> Buffer.add_string buf \"\\\\\\\"\"\n | '\\\\' -> Buffer.add_string buf \"\\\\\\\\\"\n | '\\n' -> Buffer.add_string buf \"\\\\n\"\n | '\\r' -> Buffer.add_string buf \"\\\\r\"\n | '\\t' -> Buffer.add_string buf \"\\\\t\"\n | c -> Buffer.add_char buf c) s;\n Buffer.add_char buf '\"';\n Buffer.contents buf\n | Symbol s -> s\n | Keyword k -> \":\" ^ k\n | List items | ListRef { contents = items } ->\n \"(\" ^ String.concat \" \" (List.map inspect items) ^ \")\"\n | Dict d ->\n let pairs = Hashtbl.fold (fun k v acc ->\n (Printf.sprintf \":%s %s\" k (inspect v)) :: acc) d [] in\n \"{\" ^ String.concat \" \" pairs ^ \"}\"\n | Lambda l ->\n let tag = match l.l_name with Some n -> n | None -> \"lambda\" in\n Printf.sprintf \"<%s(%s)>\" tag (String.concat \", \" l.l_params)\n | Component c ->\n Printf.sprintf \"<Component ~%s(%s)>\" c.c_name (String.concat \", \" c.c_params)\n | Island i ->\n Printf.sprintf \"<Island ~%s(%s)>\" i.i_name (String.concat \", \" i.i_params)\n | Macro m ->\n let tag = match m.m_name with Some n -> n | None -> \"macro\" in\n Printf.sprintf \"<%s(%s)>\" tag (String.concat \", \" m.m_params)\n | Thunk _ -> \"<thunk>\"\n | Continuation (_, _) -> \"<continuation>\"\n | NativeFn (name, _) -> Printf.sprintf \"<native:%s>\" name\n | Signal _ -> \"<signal>\"\n | RawHTML s -> Printf.sprintf \"<raw-html:%d chars>\" (String.length s)\n | Spread _ -> \"<spread>\"\n | SxExpr s -> Printf.sprintf \"<sx-expr:%d chars>\" (String.length s)\n | Env _ -> \"<env>\"\n | CekState _ -> \"<cek-state>\"\n | CekFrame f -> Printf.sprintf \"<frame:%s>\" f.cf_type\n | VmClosure cl -> Printf.sprintf \"<vm:%s>\" (match cl.vm_name with Some n -> n | None -> \"anon\")\n","(* generated code *)"],"names":[],"mappings":"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","ignoreList":[1]}},{"offset":{"line":0,"column":77301},"map":{"version":3,"sources":["/workspace_root/lib/sx_primitives.ml","/builtin/blackbox.ml"],"sourcesContent":["(** Built-in primitive functions (~80 pure functions).\n\n Registered in a global table; the evaluator checks this table\n when a symbol isn't found in the lexical environment. *)\n\nopen Sx_types\n\nlet primitives : (string, value list -> value) Hashtbl.t = Hashtbl.create 128\n\n(** Forward refs for calling SX functions from primitives (breaks cycle). *)\nlet _sx_call_fn : (value -> value list -> value) ref =\n ref (fun _ _ -> raise (Eval_error \"sx_call not initialized\"))\nlet _sx_trampoline_fn : (value -> value) ref =\n ref (fun v -> v)\n\nlet register name fn = Hashtbl.replace primitives name fn\n\nlet is_primitive name = Hashtbl.mem primitives name\n\nlet get_primitive name =\n match Hashtbl.find_opt primitives name with\n | Some fn -> NativeFn (name, fn)\n | None -> raise (Eval_error (\"Unknown primitive: \" ^ name))\n\n(* --- Helpers --- *)\n\n(* Trampoline hook — set by sx_ref after initialization to break circular dep *)\nlet trampoline_hook : (value -> value) ref = ref (fun v -> v)\n\nlet rec as_number = function\n | Number n -> n\n | Bool true -> 1.0\n | Bool false -> 0.0\n | Nil -> 0.0\n | String s -> (match float_of_string_opt s with Some n -> n | None -> Float.nan)\n | Thunk _ as t ->\n (* Trampoline thunks — they shouldn't leak but sometimes do *)\n as_number (!trampoline_hook t)\n | v -> raise (Eval_error (\"Expected number, got \" ^ type_of v ^ \": \" ^ (match v with Dict d -> (match Hashtbl.find_opt d \"__signal\" with Some _ -> \"signal{value=\" ^ (match Hashtbl.find_opt d \"value\" with Some v' -> value_to_string v' | None -> \"?\") ^ \"}\" | None -> \"dict\") | _ -> \"\")))\n\nlet as_string = function\n | String s -> s\n | v -> raise (Eval_error (\"Expected string, got \" ^ type_of v))\n\nlet rec as_list = function\n | List l -> l\n | ListRef r -> !r\n | Nil -> []\n | Thunk _ as t -> as_list (!_sx_trampoline_fn t)\n | v -> raise (Eval_error (\"Expected list, got \" ^ type_of v))\n\nlet as_bool = function\n | Bool b -> b\n | v -> sx_truthy v\n\nlet rec to_string = function\n | String s -> s\n | Number n ->\n if Float.is_integer n then string_of_int (int_of_float n)\n else Printf.sprintf \"%g\" n\n | Bool true -> \"true\"\n | Bool false -> \"false\"\n | Nil -> \"\"\n | Symbol s -> s\n | Keyword k -> k\n | Thunk _ as t -> to_string (!trampoline_hook t)\n | v -> inspect v\n\nlet () =\n (* === Arithmetic === *)\n register \"+\" (fun args ->\n Number (List.fold_left (fun acc a -> acc +. as_number a) 0.0 args));\n register \"-\" (fun args ->\n match args with\n | [] -> Number 0.0\n | [a] -> Number (-. (as_number a))\n | a :: rest -> Number (List.fold_left (fun acc x -> acc -. as_number x) (as_number a) rest));\n register \"*\" (fun args ->\n Number (List.fold_left (fun acc a -> acc *. as_number a) 1.0 args));\n register \"/\" (fun args ->\n match args with\n | [a; b] -> Number (as_number a /. as_number b)\n | _ -> raise (Eval_error \"/: expected 2 args\"));\n register \"mod\" (fun args ->\n match args with\n | [a; b] -> Number (Float.rem (as_number a) (as_number b))\n | _ -> raise (Eval_error \"mod: expected 2 args\"));\n register \"inc\" (fun args ->\n match args with [a] -> Number (as_number a +. 1.0) | _ -> raise (Eval_error \"inc: 1 arg\"));\n register \"dec\" (fun args ->\n match args with [a] -> Number (as_number a -. 1.0) | _ -> raise (Eval_error \"dec: 1 arg\"));\n register \"abs\" (fun args ->\n match args with [a] -> Number (Float.abs (as_number a)) | _ -> raise (Eval_error \"abs: 1 arg\"));\n register \"floor\" (fun args ->\n match args with [a] -> Number (floor (as_number a))\n | _ -> raise (Eval_error \"floor: 1 arg\"));\n register \"ceil\" (fun args ->\n match args with [a] -> Number (ceil (as_number a))\n | _ -> raise (Eval_error \"ceil: 1 arg\"));\n register \"round\" (fun args ->\n match args with\n | [a] -> Number (Float.round (as_number a))\n | [a; b] ->\n let n = as_number a and places = int_of_float (as_number b) in\n let factor = 10.0 ** float_of_int places in\n Number (Float.round (n *. factor) /. factor)\n | _ -> raise (Eval_error \"round: 1-2 args\"));\n register \"min\" (fun args ->\n match args with\n | [] -> raise (Eval_error \"min: at least 1 arg\")\n | _ -> Number (List.fold_left (fun acc a -> Float.min acc (as_number a)) Float.infinity args));\n register \"max\" (fun args ->\n match args with\n | [] -> raise (Eval_error \"max: at least 1 arg\")\n | _ -> Number (List.fold_left (fun acc a -> Float.max acc (as_number a)) Float.neg_infinity args));\n register \"sqrt\" (fun args ->\n match args with [a] -> Number (Float.sqrt (as_number a)) | _ -> raise (Eval_error \"sqrt: 1 arg\"));\n register \"pow\" (fun args ->\n match args with [a; b] -> Number (as_number a ** as_number b)\n | _ -> raise (Eval_error \"pow: 2 args\"));\n register \"clamp\" (fun args ->\n match args with\n | [x; lo; hi] ->\n let x = as_number x and lo = as_number lo and hi = as_number hi in\n Number (Float.max lo (Float.min hi x))\n | _ -> raise (Eval_error \"clamp: 3 args\"));\n register \"parse-int\" (fun args ->\n match args with\n | [String s] -> (match int_of_string_opt s with Some n -> Number (float_of_int n) | None -> Nil)\n | [String s; default_val] ->\n (match int_of_string_opt s with Some n -> Number (float_of_int n) | None -> default_val)\n | [Number n] | [Number n; _] -> Number (float_of_int (int_of_float n))\n | [_; default_val] -> default_val\n | _ -> Nil);\n register \"parse-float\" (fun args ->\n match args with\n | [String s] -> (match float_of_string_opt s with Some n -> Number n | None -> Nil)\n | [Number n] -> Number n\n | _ -> Nil);\n\n (* === Comparison === *)\n (* Safe equality: physical equality for potentially-circular types\n (Dict, Lambda, Component, Island, Signal, NativeFn),\n structural equality for acyclic types (Number, String, Bool, etc.).\n Lists are compared element-wise recursively with the same safety. *)\n let rec safe_eq a b =\n if a == b then true (* physical equality fast path *)\n else match a, b with\n | Number x, Number y -> x = y\n | String x, String y -> x = y\n | Bool x, Bool y -> x = y\n | Nil, Nil -> true\n | Symbol x, Symbol y -> x = y\n | Keyword x, Keyword y -> x = y\n | (List la | ListRef { contents = la }),\n (List lb | ListRef { contents = lb }) ->\n List.length la = List.length lb &&\n List.for_all2 safe_eq la lb\n (* Dict: check __host_handle for DOM node identity *)\n | Dict a, Dict b ->\n (match Hashtbl.find_opt a \"__host_handle\", Hashtbl.find_opt b \"__host_handle\" with\n | Some (Number ha), Some (Number hb) -> ha = hb\n | _ -> false)\n (* Lambda/Component/Island/Signal/NativeFn: physical only *)\n | _ -> false\n in\n register \"=\" (fun args ->\n match args with\n | [a; b] -> Bool (safe_eq a b)\n | _ -> raise (Eval_error \"=: 2 args\"));\n register \"!=\" (fun args ->\n match args with\n | [a; b] -> Bool (not (safe_eq a b))\n | _ -> raise (Eval_error \"!=: 2 args\"));\n register \"<\" (fun args ->\n match args with\n | [String a; String b] -> Bool (a < b)\n | [a; b] -> Bool (as_number a < as_number b)\n | _ -> raise (Eval_error \"<: 2 args\"));\n register \">\" (fun args ->\n match args with\n | [String a; String b] -> Bool (a > b)\n | [a; b] -> Bool (as_number a > as_number b)\n | _ -> raise (Eval_error \">: 2 args\"));\n register \"<=\" (fun args ->\n match args with\n | [String a; String b] -> Bool (a <= b)\n | [a; b] -> Bool (as_number a <= as_number b)\n | _ -> raise (Eval_error \"<=: 2 args\"));\n register \">=\" (fun args ->\n match args with\n | [String a; String b] -> Bool (a >= b)\n | [a; b] -> Bool (as_number a >= as_number b)\n | _ -> raise (Eval_error \">=: 2 args\"));\n\n (* === Logic === *)\n register \"not\" (fun args ->\n match args with [a] -> Bool (not (sx_truthy a)) | _ -> raise (Eval_error \"not: 1 arg\"));\n\n (* === Predicates === *)\n register \"nil?\" (fun args ->\n match args with [a] -> Bool (is_nil a) | _ -> raise (Eval_error \"nil?: 1 arg\"));\n register \"number?\" (fun args ->\n match args with [Number _] -> Bool true | [_] -> Bool false | _ -> raise (Eval_error \"number?: 1 arg\"));\n register \"string?\" (fun args ->\n match args with [String _] -> Bool true | [_] -> Bool false | _ -> raise (Eval_error \"string?: 1 arg\"));\n register \"boolean?\" (fun args ->\n match args with [Bool _] -> Bool true | [_] -> Bool false | _ -> raise (Eval_error \"boolean?: 1 arg\"));\n register \"list?\" (fun args ->\n match args with [List _] | [ListRef _] -> Bool true | [_] -> Bool false | _ -> raise (Eval_error \"list?: 1 arg\"));\n register \"dict?\" (fun args ->\n match args with [Dict _] -> Bool true | [_] -> Bool false | _ -> raise (Eval_error \"dict?: 1 arg\"));\n register \"symbol?\" (fun args ->\n match args with [Symbol _] -> Bool true | [_] -> Bool false | _ -> raise (Eval_error \"symbol?: 1 arg\"));\n register \"keyword?\" (fun args ->\n match args with [Keyword _] -> Bool true | [_] -> Bool false | _ -> raise (Eval_error \"keyword?: 1 arg\"));\n register \"empty?\" (fun args ->\n match args with\n | [List []] | [ListRef { contents = [] }] -> Bool true\n | [List _] | [ListRef _] -> Bool false\n | [String \"\"] -> Bool true | [String _] -> Bool false\n | [Dict d] -> Bool (Hashtbl.length d = 0)\n | [Nil] -> Bool true\n | [_] -> Bool false\n | _ -> raise (Eval_error \"empty?: 1 arg\"));\n register \"odd?\" (fun args ->\n match args with [a] -> Bool (int_of_float (as_number a) mod 2 <> 0) | _ -> raise (Eval_error \"odd?: 1 arg\"));\n register \"even?\" (fun args ->\n match args with [a] -> Bool (int_of_float (as_number a) mod 2 = 0) | _ -> raise (Eval_error \"even?: 1 arg\"));\n register \"zero?\" (fun args ->\n match args with [a] -> Bool (as_number a = 0.0) | _ -> raise (Eval_error \"zero?: 1 arg\"));\n\n (* === Strings === *)\n register \"str\" (fun args -> String (String.concat \"\" (List.map to_string args)));\n register \"upper\" (fun args ->\n match args with [a] -> String (String.uppercase_ascii (as_string a)) | _ -> raise (Eval_error \"upper: 1 arg\"));\n register \"upcase\" (fun args ->\n match args with [a] -> String (String.uppercase_ascii (as_string a)) | _ -> raise (Eval_error \"upcase: 1 arg\"));\n register \"lower\" (fun args ->\n match args with [a] -> String (String.lowercase_ascii (as_string a)) | _ -> raise (Eval_error \"lower: 1 arg\"));\n register \"downcase\" (fun args ->\n match args with [a] -> String (String.lowercase_ascii (as_string a)) | _ -> raise (Eval_error \"downcase: 1 arg\"));\n register \"trim\" (fun args ->\n match args with [a] -> String (String.trim (as_string a)) | _ -> raise (Eval_error \"trim: 1 arg\"));\n register \"string-length\" (fun args ->\n match args with [a] -> Number (float_of_int (String.length (as_string a)))\n | _ -> raise (Eval_error \"string-length: 1 arg\"));\n register \"string-contains?\" (fun args ->\n match args with\n | [String haystack; String needle] ->\n let rec find i =\n if i + String.length needle > String.length haystack then false\n else if String.sub haystack i (String.length needle) = needle then true\n else find (i + 1)\n in Bool (find 0)\n | _ -> raise (Eval_error \"string-contains?: 2 string args\"));\n register \"starts-with?\" (fun args ->\n match args with\n | [String s; String prefix] ->\n Bool (String.length s >= String.length prefix &&\n String.sub s 0 (String.length prefix) = prefix)\n | _ -> raise (Eval_error \"starts-with?: 2 string args\"));\n register \"ends-with?\" (fun args ->\n match args with\n | [String s; String suffix] ->\n let sl = String.length s and xl = String.length suffix in\n Bool (sl >= xl && String.sub s (sl - xl) xl = suffix)\n | _ -> raise (Eval_error \"ends-with?: 2 string args\"));\n register \"index-of\" (fun args ->\n match args with\n | [String haystack; String needle] ->\n let nl = String.length needle and hl = String.length haystack in\n let rec find i =\n if i + nl > hl then Number (-1.0)\n else if String.sub haystack i nl = needle then Number (float_of_int i)\n else find (i + 1)\n in find 0\n | _ -> raise (Eval_error \"index-of: 2 string args\"));\n register \"substring\" (fun args ->\n match args with\n | [String s; Number start; Number end_] ->\n let i = int_of_float start and j = int_of_float end_ in\n let len = String.length s in\n let i = max 0 (min i len) and j = max 0 (min j len) in\n String (String.sub s i (max 0 (j - i)))\n | _ -> raise (Eval_error \"substring: 3 args\"));\n register \"substr\" (fun args ->\n match args with\n | [String s; Number start; Number len] ->\n let i = int_of_float start and n = int_of_float len in\n let sl = String.length s in\n let i = max 0 (min i sl) in\n let n = max 0 (min n (sl - i)) in\n String (String.sub s i n)\n | [String s; Number start] ->\n let i = int_of_float start in\n let sl = String.length s in\n let i = max 0 (min i sl) in\n String (String.sub s i (sl - i))\n | _ -> raise (Eval_error \"substr: 2-3 args\"));\n register \"split\" (fun args ->\n match args with\n | [String s; String sep] ->\n List (List.map (fun p -> String p) (String.split_on_char sep.[0] s))\n | _ -> raise (Eval_error \"split: 2 args\"));\n register \"join\" (fun args ->\n match args with\n | [String sep; (List items | ListRef { contents = items })] ->\n String (String.concat sep (List.map to_string items))\n | _ -> raise (Eval_error \"join: 2 args\"));\n register \"replace\" (fun args ->\n let to_str = function\n | String s -> s | SxExpr s -> s | RawHTML s -> s\n | Keyword k -> k | Symbol s -> s\n | Nil -> \"\" | Bool true -> \"true\" | Bool false -> \"false\"\n | Number n -> if Float.is_integer n then string_of_int (int_of_float n) else Printf.sprintf \"%g\" n\n | Thunk _ as t -> (match !_sx_trampoline_fn t with String s -> s | v -> to_string v)\n | v -> to_string v\n in\n match args with\n | [s; old_s; new_s] ->\n let s = to_str s and old_s = to_str old_s and new_s = to_str new_s in\n let ol = String.length old_s in\n if ol = 0 then String s\n else begin\n let buf = Buffer.create (String.length s) in\n let rec go i =\n if i >= String.length s then ()\n else if i + ol <= String.length s && String.sub s i ol = old_s then begin\n Buffer.add_string buf new_s;\n go (i + ol)\n end else begin\n Buffer.add_char buf s.[i];\n go (i + 1)\n end\n in go 0;\n String (Buffer.contents buf)\n end\n | _ -> raise (Eval_error \"replace: 3 string args\"));\n register \"char-from-code\" (fun args ->\n match args with\n | [Number n] ->\n let buf = Buffer.create 4 in\n Buffer.add_utf_8_uchar buf (Uchar.of_int (int_of_float n));\n String (Buffer.contents buf)\n | _ -> raise (Eval_error \"char-from-code: 1 arg\"));\n\n (* === Collections === *)\n register \"list\" (fun args -> ListRef (ref args));\n register \"len\" (fun args ->\n match args with\n | [List l] | [ListRef { contents = l }] -> Number (float_of_int (List.length l))\n | [String s] -> Number (float_of_int (String.length s))\n | [Dict d] -> Number (float_of_int (Hashtbl.length d))\n | [Nil] | [Bool false] -> Number 0.0\n | [Bool true] -> Number 1.0\n | [Number _] -> Number 1.0\n | [RawHTML s] -> Number (float_of_int (String.length s))\n | [SxExpr s] -> Number (float_of_int (String.length s))\n | [Spread pairs] -> Number (float_of_int (List.length pairs))\n | [Component _] | [Island _] | [Lambda _] | [NativeFn _]\n | [Macro _] | [Thunk _] | [Keyword _] | [Symbol _] -> Number 0.0\n | _ -> raise (Eval_error (Printf.sprintf \"len: %d args\"\n (List.length args))));\n register \"first\" (fun args ->\n match args with\n | [List (x :: _)] | [ListRef { contents = x :: _ }] -> x\n | [List []] | [ListRef { contents = [] }] -> Nil | [Nil] -> Nil\n | [x] -> raise (Eval_error (\"first: expected list, got \" ^ inspect x))\n | _ -> raise (Eval_error \"first: 1 list arg\"));\n register \"rest\" (fun args ->\n match args with\n | [List (_ :: xs)] | [ListRef { contents = _ :: xs }] -> List xs\n | [List []] | [ListRef { contents = [] }] -> List [] | [Nil] -> List []\n | _ -> raise (Eval_error \"rest: 1 list arg\"));\n register \"last\" (fun args ->\n match args with\n | [List l] | [ListRef { contents = l }] ->\n (match List.rev l with x :: _ -> x | [] -> Nil)\n | _ -> raise (Eval_error \"last: 1 list arg\"));\n register \"init\" (fun args ->\n match args with\n | [List l] | [ListRef { contents = l }] ->\n (match List.rev l with _ :: rest -> List (List.rev rest) | [] -> List [])\n | _ -> raise (Eval_error \"init: 1 list arg\"));\n register \"nth\" (fun args ->\n match args with\n | [List l; Number n] | [ListRef { contents = l }; Number n] ->\n (try List.nth l (int_of_float n) with _ -> Nil)\n | [String s; Number n] ->\n let i = int_of_float n in\n if i >= 0 && i < String.length s then String (String.make 1 s.[i])\n else Nil\n | _ -> raise (Eval_error \"nth: list/string and number\"));\n register \"cons\" (fun args ->\n match args with\n | [x; List l] | [x; ListRef { contents = l }] -> List (x :: l)\n | [x; Nil] -> List [x]\n | _ -> raise (Eval_error \"cons: value and list\"));\n register \"append\" (fun args ->\n match args with\n | [List la | ListRef { contents = la }; List lb | ListRef { contents = lb }] ->\n List (la @ lb)\n | [List la | ListRef { contents = la }; Nil] -> List la\n | [Nil; List lb | ListRef { contents = lb }] -> List lb\n | [List la | ListRef { contents = la }; v] -> List (la @ [v])\n | [v; List lb | ListRef { contents = lb }] -> List ([v] @ lb)\n | _ ->\n let all = List.concat_map as_list args in\n List all);\n register \"reverse\" (fun args ->\n match args with\n | [List l] | [ListRef { contents = l }] -> List (List.rev l)\n | _ -> raise (Eval_error \"reverse: 1 list\"));\n register \"flatten\" (fun args ->\n let rec flat = function\n | List items | ListRef { contents = items } -> List.concat_map flat items\n | x -> [x]\n in\n match args with\n | [List l] | [ListRef { contents = l }] -> List (List.concat_map flat l)\n | _ -> raise (Eval_error \"flatten: 1 list\"));\n register \"concat\" (fun args -> List (List.concat_map as_list args));\n register \"contains?\" (fun args ->\n match args with\n | [List l; item] | [ListRef { contents = l }; item] ->\n (* Physical equality first (handles signals/dicts/closures safely),\n structural fallback only for acyclic types (string/number/bool/nil/symbol/keyword) *)\n let safe_eq a b =\n a == b ||\n (match a, b with\n | Number x, Number y -> x = y\n | String x, String y -> x = y\n | Bool x, Bool y -> x = y\n | Nil, Nil -> true\n | Symbol x, Symbol y -> x = y\n | Keyword x, Keyword y -> x = y\n | Dict a, Dict b ->\n (match Hashtbl.find_opt a \"__host_handle\", Hashtbl.find_opt b \"__host_handle\" with\n | Some (Number ha), Some (Number hb) -> ha = hb\n | _ -> false)\n | _ -> false)\n in\n Bool (List.exists (fun x -> safe_eq x item) l)\n | [String s; String sub] ->\n let rec find i =\n if i + String.length sub > String.length s then false\n else if String.sub s i (String.length sub) = sub then true\n else find (i + 1)\n in Bool (find 0)\n | _ -> raise (Eval_error \"contains?: 2 args\"));\n register \"range\" (fun args ->\n match args with\n | [Number stop] ->\n let n = int_of_float stop in\n List (List.init (max 0 n) (fun i -> Number (float_of_int i)))\n | [Number start; Number stop] ->\n let s = int_of_float start and e = int_of_float stop in\n let len = max 0 (e - s) in\n List (List.init len (fun i -> Number (float_of_int (s + i))))\n | [Number start; Number stop; Number step] ->\n let s = start and e = stop and st = step in\n if st = 0.0 then List []\n else\n let items = ref [] in\n let i = ref s in\n if st > 0.0 then\n (while !i < e do items := Number !i :: !items; i := !i +. st done)\n else\n (while !i > e do items := Number !i :: !items; i := !i +. st done);\n List (List.rev !items)\n | _ -> raise (Eval_error \"range: 1-3 args\"));\n register \"slice\" (fun args ->\n match args with\n | [(List l | ListRef { contents = l }); Number start] ->\n let i = max 0 (int_of_float start) in\n let rec drop n = function _ :: xs when n > 0 -> drop (n-1) xs | l -> l in\n List (drop i l)\n | [(List l | ListRef { contents = l }); Number start; Number end_] ->\n let i = max 0 (int_of_float start) and j = int_of_float end_ in\n let len = List.length l in\n let j = min j len in\n let rec take_range idx = function\n | [] -> []\n | x :: xs ->\n if idx >= j then []\n else if idx >= i then x :: take_range (idx+1) xs\n else take_range (idx+1) xs\n in List (take_range 0 l)\n | [String s; Number start] ->\n let i = max 0 (int_of_float start) in\n String (String.sub s i (max 0 (String.length s - i)))\n | [String s; Number start; Number end_] ->\n let i = max 0 (int_of_float start) and j = int_of_float end_ in\n let sl = String.length s in\n let j = min j sl in\n String (String.sub s i (max 0 (j - i)))\n | _ -> raise (Eval_error \"slice: 2-3 args\"));\n register \"sort\" (fun args ->\n match args with\n | [List l] | [ListRef { contents = l }] -> List (List.sort compare l)\n | _ -> raise (Eval_error \"sort: 1 list\"));\n register \"zip\" (fun args ->\n match args with\n | [a; b] ->\n let la = as_list a and lb = as_list b in\n let rec go l1 l2 acc = match l1, l2 with\n | x :: xs, y :: ys -> go xs ys (List [x; y] :: acc)\n | _ -> List.rev acc\n in List (go la lb [])\n | _ -> raise (Eval_error \"zip: 2 lists\"));\n register \"zip-pairs\" (fun args ->\n match args with\n | [v] ->\n let l = as_list v in\n let rec go = function\n | a :: b :: rest -> List [a; b] :: go rest\n | _ -> []\n in List (go l)\n | _ -> raise (Eval_error \"zip-pairs: 1 list\"));\n register \"take\" (fun args ->\n match args with\n | [(List l | ListRef { contents = l }); Number n] ->\n let rec take_n i = function\n | x :: xs when i > 0 -> x :: take_n (i-1) xs\n | _ -> []\n in List (take_n (int_of_float n) l)\n | _ -> raise (Eval_error \"take: list and number\"));\n register \"drop\" (fun args ->\n match args with\n | [(List l | ListRef { contents = l }); Number n] ->\n let rec drop_n i = function\n | _ :: xs when i > 0 -> drop_n (i-1) xs\n | l -> l\n in List (drop_n (int_of_float n) l)\n | _ -> raise (Eval_error \"drop: list and number\"));\n register \"chunk-every\" (fun args ->\n match args with\n | [(List l | ListRef { contents = l }); Number n] ->\n let size = int_of_float n in\n let rec go = function\n | [] -> []\n | l ->\n let rec take_n i = function\n | x :: xs when i > 0 -> x :: take_n (i-1) xs\n | _ -> []\n in\n let rec drop_n i = function\n | _ :: xs when i > 0 -> drop_n (i-1) xs\n | l -> l\n in\n List (take_n size l) :: go (drop_n size l)\n in List (go l)\n | _ -> raise (Eval_error \"chunk-every: list and number\"));\n register \"unique\" (fun args ->\n match args with\n | [(List l | ListRef { contents = l })] ->\n let seen = Hashtbl.create 16 in\n let result = List.filter (fun x ->\n let key = inspect x in\n if Hashtbl.mem seen key then false\n else (Hashtbl.replace seen key true; true)\n ) l in\n List result\n | _ -> raise (Eval_error \"unique: 1 list\"));\n\n (* === Dict === *)\n register \"dict\" (fun args ->\n let d = make_dict () in\n let rec go = function\n | [] -> Dict d\n | Keyword k :: v :: rest -> dict_set d k v; go rest\n | String k :: v :: rest -> dict_set d k v; go rest\n | _ -> raise (Eval_error \"dict: pairs of key value\")\n in go args);\n register \"get\" (fun args ->\n match args with\n | [Dict d; String k] -> dict_get d k\n | [Dict d; Keyword k] -> dict_get d k\n | [List l; Number n] | [ListRef { contents = l }; Number n] ->\n (try List.nth l (int_of_float n) with _ -> Nil)\n | [Nil; _] -> Nil (* nil.anything → nil *)\n | [_; _] -> Nil (* type mismatch → nil (matches JS/Python behavior) *)\n | _ -> Nil);\n register \"has-key?\" (fun args ->\n match args with\n | [Dict d; String k] -> Bool (dict_has d k)\n | [Dict d; Keyword k] -> Bool (dict_has d k)\n | _ -> raise (Eval_error \"has-key?: dict and key\"));\n register \"assoc\" (fun args ->\n match args with\n | Dict d :: rest ->\n let d2 = Hashtbl.copy d in\n let rec go = function\n | [] -> Dict d2\n | String k :: v :: rest -> Hashtbl.replace d2 k v; go rest\n | Keyword k :: v :: rest -> Hashtbl.replace d2 k v; go rest\n | _ -> raise (Eval_error \"assoc: pairs\")\n in go rest\n | _ -> raise (Eval_error \"assoc: dict + pairs\"));\n register \"dissoc\" (fun args ->\n match args with\n | Dict d :: keys ->\n let d2 = Hashtbl.copy d in\n List.iter (fun k -> Hashtbl.remove d2 (to_string k)) keys;\n Dict d2\n | _ -> raise (Eval_error \"dissoc: dict + keys\"));\n register \"merge\" (fun args ->\n let d = make_dict () in\n List.iter (function\n | Dict src -> Hashtbl.iter (fun k v -> Hashtbl.replace d k v) src\n | _ -> raise (Eval_error \"merge: all args must be dicts\")\n ) args;\n Dict d);\n register \"keys\" (fun args ->\n match args with [Dict d] -> List (dict_keys d) | _ -> raise (Eval_error \"keys: 1 dict\"));\n register \"vals\" (fun args ->\n match args with [Dict d] -> List (dict_vals d) | _ -> raise (Eval_error \"vals: 1 dict\"));\n register \"mutable-list\" (fun _args -> ListRef (ref []));\n register \"set-nth!\" (fun args ->\n match args with\n | [ListRef r; Number n; v] ->\n let i = int_of_float n in\n let l = !r in\n r := List.mapi (fun j x -> if j = i then v else x) l;\n Nil\n | [List _; _; _] ->\n raise (Eval_error \"set-nth!: list is immutable, use ListRef\")\n | _ -> raise (Eval_error \"set-nth!: expected (list idx val)\"));\n register \"dict-set!\" (fun args ->\n match args with\n | [Dict d; String k; v] -> dict_set d k v; v\n | [Dict d; Keyword k; v] -> dict_set d k v; v\n | _ -> raise (Eval_error \"dict-set!: dict key val\"));\n register \"dict-get\" (fun args ->\n match args with\n | [Dict d; String k] -> dict_get d k\n | [Dict d; Keyword k] -> dict_get d k\n | _ -> raise (Eval_error \"dict-get: dict and key\"));\n register \"dict-has?\" (fun args ->\n match args with\n | [Dict d; String k] -> Bool (dict_has d k)\n | _ -> raise (Eval_error \"dict-has?: dict and key\"));\n register \"dict-delete!\" (fun args ->\n match args with\n | [Dict d; String k] -> dict_delete d k; Nil\n | _ -> raise (Eval_error \"dict-delete!: dict and key\"));\n\n (* === Misc === *)\n register \"type-of\" (fun args ->\n match args with [a] -> String (type_of a) | _ -> raise (Eval_error \"type-of: 1 arg\"));\n register \"inspect\" (fun args ->\n match args with [a] -> String (inspect a) | _ -> raise (Eval_error \"inspect: 1 arg\"));\n register \"serialize\" (fun args ->\n match args with\n | [a] -> String (inspect a) (* used for dedup keys in compiler *)\n | _ -> raise (Eval_error \"serialize: 1 arg\"));\n register \"make-symbol\" (fun args ->\n match args with\n | [String s] -> Symbol s\n | _ -> raise (Eval_error \"make-symbol: expected string\"));\n register \"error\" (fun args ->\n match args with [String msg] -> raise (Eval_error msg)\n | [a] -> raise (Eval_error (to_string a))\n | _ -> raise (Eval_error \"error: 1 arg\"));\n register \"apply\" (fun args ->\n match args with\n | [NativeFn (_, f); (List a | ListRef { contents = a })] -> f a\n | [NativeFn (_, f); Nil] -> f []\n | _ -> raise (Eval_error \"apply: function and list\"));\n register \"identical?\" (fun args ->\n match args with [a; b] -> Bool (a == b) | _ -> raise (Eval_error \"identical?: 2 args\"));\n register \"make-spread\" (fun args ->\n match args with\n | [Dict d] ->\n let pairs = Hashtbl.fold (fun k v acc -> (k, v) :: acc) d [] in\n Spread pairs\n | _ -> raise (Eval_error \"make-spread: 1 dict\"));\n register \"spread?\" (fun args ->\n match args with [Spread _] -> Bool true | [_] -> Bool false\n | _ -> raise (Eval_error \"spread?: 1 arg\"));\n register \"spread-attrs\" (fun args ->\n match args with\n | [Spread pairs] ->\n let d = make_dict () in\n List.iter (fun (k, v) -> dict_set d k v) pairs;\n Dict d\n | _ -> raise (Eval_error \"spread-attrs: 1 spread\"));\n\n (* Higher-order forms as callable primitives — used by the VM.\n The CEK machine handles these as special forms with dedicated frames;\n the VM needs them as plain callable values. *)\n (* Call any SX callable — handles NativeFn, Lambda (via trampoline), VM closures *)\n let call_any f args =\n match f with\n | NativeFn (_, fn) -> fn args\n | _ -> !_sx_trampoline_fn (!_sx_call_fn f args)\n in\n register \"map\" (fun args ->\n match args with\n | [f; (List items | ListRef { contents = items })] ->\n List (List.map (fun x -> call_any f [x]) items)\n | [_; Nil] -> List []\n | _ -> raise (Eval_error \"map: expected (fn list)\"));\n register \"map-indexed\" (fun args ->\n match args with\n | [f; (List items | ListRef { contents = items })] ->\n List (List.mapi (fun i x -> call_any f [Number (float_of_int i); x]) items)\n | [_; Nil] -> List []\n | _ -> raise (Eval_error \"map-indexed: expected (fn list)\"));\n register \"filter\" (fun args ->\n match args with\n | [f; (List items | ListRef { contents = items })] ->\n List (List.filter (fun x -> sx_truthy (call_any f [x])) items)\n | [_; Nil] -> List []\n | _ -> raise (Eval_error \"filter: expected (fn list)\"));\n register \"for-each\" (fun args ->\n match args with\n | [f; (List items | ListRef { contents = items })] ->\n List.iter (fun x -> ignore (call_any f [x])) items; Nil\n | [_; Nil] -> Nil (* nil collection = no-op *)\n | _ ->\n let types = String.concat \", \" (List.map (fun v -> type_of v) args) in\n raise (Eval_error (Printf.sprintf \"for-each: expected (fn list), got (%s) %d args\" types (List.length args))));\n register \"reduce\" (fun args ->\n match args with\n | [f; init; (List items | ListRef { contents = items })] ->\n List.fold_left (fun acc x -> call_any f [acc; x]) init items\n | _ -> raise (Eval_error \"reduce: expected (fn init list)\"));\n register \"some\" (fun args ->\n match args with\n | [f; (List items | ListRef { contents = items })] ->\n (try List.find (fun x -> sx_truthy (call_any f [x])) items\n with Not_found -> Bool false)\n | [_; Nil] -> Bool false\n | _ -> raise (Eval_error \"some: expected (fn list)\"));\n register \"every?\" (fun args ->\n match args with\n | [f; (List items | ListRef { contents = items })] ->\n Bool (List.for_all (fun x -> sx_truthy (call_any f [x])) items)\n | [_; Nil] -> Bool true\n | _ -> raise (Eval_error \"every?: expected (fn list)\"));\n\n (* ---- VM stack primitives (vm.sx platform interface) ---- *)\n register \"make-vm-stack\" (fun args ->\n match args with\n | [Number n] -> ListRef (ref (List.init (int_of_float n) (fun _ -> Nil)))\n | _ -> raise (Eval_error \"make-vm-stack: expected (size)\"));\n register \"vm-stack-get\" (fun args ->\n match args with\n | [ListRef r; Number n] -> List.nth !r (int_of_float n)\n | _ -> raise (Eval_error \"vm-stack-get: expected (stack idx)\"));\n register \"vm-stack-set!\" (fun args ->\n match args with\n | [ListRef r; Number n; v] ->\n let i = int_of_float n in\n r := List.mapi (fun j x -> if j = i then v else x) !r; Nil\n | _ -> raise (Eval_error \"vm-stack-set!: expected (stack idx val)\"));\n register \"vm-stack-length\" (fun args ->\n match args with\n | [ListRef r] -> Number (float_of_int (List.length !r))\n | _ -> raise (Eval_error \"vm-stack-length: expected (stack)\"));\n register \"vm-stack-copy!\" (fun args ->\n match args with\n | [ListRef src; ListRef dst; Number n] ->\n let count = int_of_float n in\n let src_items = !src in\n dst := List.mapi (fun i x -> if i < count then List.nth src_items i else x) !dst; Nil\n | _ -> raise (Eval_error \"vm-stack-copy!: expected (src dst count)\"));\n register \"primitive?\" (fun args ->\n match args with\n | [String name] -> Bool (Hashtbl.mem primitives name)\n | _ -> Bool false);\n\n (* Scope stack primitives are registered by sx_server.ml / run_tests.ml\n because they use a shared scope stacks table with collect!/collected. *)\n\n (* ---- Predicates needed by adapter-html.sx ---- *)\n register \"lambda?\" (fun args ->\n match args with [Lambda _] -> Bool true | _ -> Bool false);\n register \"island?\" (fun args ->\n match args with [Island _] -> Bool true | _ -> Bool false);\n register \"is-else-clause?\" (fun args ->\n match args with\n | [Keyword \"else\"] -> Bool true\n | [Bool true] -> Bool true\n | _ -> Bool false);\n register \"cond-scheme?\" (fun args ->\n match args with\n | [List clauses] ->\n Bool (List.for_all (fun c ->\n match c with\n | List l -> List.length l = 2\n | _ -> false) clauses)\n | _ -> Bool false);\n register \"component?\" (fun args ->\n match args with [Component _] -> Bool true | [Island _] -> Bool true | _ -> Bool false);\n register \"lambda-closure\" (fun args ->\n match args with [Lambda l] -> Env l.l_closure | _ -> Nil);\n register \"component-closure\" (fun args ->\n match args with\n | [Component c] -> Env c.c_closure\n | [Island i] -> Env i.i_closure\n | _ -> Nil);\n register \"component-has-children?\" (fun args ->\n match args with\n | [Component c] -> Bool c.c_has_children\n | [Island i] -> Bool i.i_has_children\n | _ -> Bool false);\n register \"component-name\" (fun args ->\n match args with\n | [Component c] -> String c.c_name\n | [Island i] -> String i.i_name\n | _ -> Nil);\n register \"component-params\" (fun args ->\n match args with\n | [Component c] -> List (List.map (fun s -> String s) c.c_params)\n | [Island i] -> List (List.map (fun s -> String s) i.i_params)\n | _ -> List []);\n register \"component-body\" (fun args ->\n match args with\n | [Component c] -> c.c_body\n | [Island i] -> i.i_body\n | _ -> Nil);\n register \"macro?\" (fun args ->\n match args with [Macro _] -> Bool true | _ -> Bool false);\n register \"for-each-indexed\" (fun args ->\n match args with\n | [f; (List items | ListRef { contents = items })] ->\n List.iteri (fun i x -> ignore (call_any f [Number (float_of_int i); x])) items; Nil\n | _ -> raise (Eval_error \"for-each-indexed: expected (fn list)\"));\n register \"lambda-params\" (fun args ->\n match args with\n | [Lambda l] -> List (List.map (fun s -> String s) l.l_params)\n | _ -> List []);\n register \"lambda-body\" (fun args ->\n match args with [Lambda l] -> l.l_body | _ -> Nil);\n (* expand-macro is registered later by run_tests.ml / sx_server.ml\n because it needs eval_expr which creates a dependency cycle *);\n register \"empty-dict?\" (fun args ->\n match args with\n | [Dict d] -> Bool (Hashtbl.length d = 0)\n | _ -> Bool true);\n register \"make-raw-html\" (fun args ->\n match args with [String s] -> RawHTML s | _ -> Nil);\n register \"raw-html-content\" (fun args ->\n match args with [RawHTML s] -> String s | _ -> String \"\");\n register \"get-primitive\" (fun args ->\n match args with\n | [String name] ->\n (match Hashtbl.find_opt primitives name with\n | Some fn -> NativeFn (name, fn)\n | None -> raise (Eval_error (\"VM undefined: \" ^ name)))\n | _ -> raise (Eval_error \"get-primitive: expected (name)\"));\n register \"call-primitive\" (fun args ->\n match args with\n | [String name; (List a | ListRef { contents = a })] ->\n (match Hashtbl.find_opt primitives name with\n | Some fn -> fn a\n | None -> raise (Eval_error (\"VM undefined: \" ^ name)))\n | [String name; Nil] ->\n (match Hashtbl.find_opt primitives name with\n | Some fn -> fn []\n | None -> raise (Eval_error (\"VM undefined: \" ^ name)))\n | _ -> raise (Eval_error \"call-primitive: expected (name args-list)\"));\n ()\n","(* generated code *)"],"names":[],"mappings":"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","ignoreList":[1]}},{"offset":{"line":0,"column":113622},"map":{"version":3,"sources":["/workspace_root/lib/sx_runtime.ml","/builtin/blackbox.ml"],"sourcesContent":["(** Runtime helpers for transpiled code.\n\n These bridge the gap between the transpiler's output and the\n foundation types/primitives. The transpiled evaluator calls these\n functions directly. *)\n\nopen Sx_types\n\n(** Call a registered primitive by name. *)\nlet prim_call name args =\n match Hashtbl.find_opt Sx_primitives.primitives name with\n | Some f -> f args\n | None -> raise (Eval_error (\"Unknown primitive: \" ^ name))\n\n(** Convert any SX value to an OCaml string (internal). *)\nlet value_to_str = function\n | String s -> s\n | Number n ->\n if Float.is_integer n then string_of_int (int_of_float n)\n else Printf.sprintf \"%g\" n\n | Bool true -> \"true\"\n | Bool false -> \"false\"\n | Nil -> \"\"\n | Symbol s -> s\n | Keyword k -> k\n | v -> inspect v\n\n(** sx_to_string returns a value (String) for transpiled code. *)\nlet sx_to_string v = String (value_to_str v)\n\n(** String concatenation helper — [sx_str] takes a list of values. *)\nlet sx_str args =\n String.concat \"\" (List.map value_to_str args)\n\n(** Convert a value to a list. *)\nlet sx_to_list = function\n | List l -> l\n | ListRef r -> !r\n | Nil -> []\n | v -> raise (Eval_error (\"Expected list, got \" ^ type_of v))\n\n(** Call an SX callable (lambda, native fn, continuation). *)\nlet sx_call f args =\n match f with\n | NativeFn (_, fn) -> fn args\n | VmClosure cl -> !Sx_types._vm_call_closure_ref cl args\n | Lambda l ->\n let local = Sx_types.env_extend l.l_closure in\n List.iter2 (fun p a -> ignore (Sx_types.env_bind local p a)) l.l_params args;\n Thunk (l.l_body, local)\n | Continuation (k, _) ->\n k (match args with x :: _ -> x | [] -> Nil)\n | _ -> raise (Eval_error (\"Not callable: \" ^ inspect f))\n\n(* Initialize forward ref so primitives can call SX functions *)\nlet () = Sx_primitives._sx_call_fn := sx_call\n(* Trampoline ref is set by sx_ref.ml after it's loaded *)\n\n(** Apply a function to a list of args. *)\nlet sx_apply f args_list =\n sx_call f (sx_to_list args_list)\n\n(** Mutable append — add item to a list ref or accumulator.\n In transpiled code, lists that get appended to are mutable refs. *)\nlet sx_append_b lst item =\n match lst with\n | List items -> List (items @ [item])\n | ListRef r -> r := !r @ [item]; lst (* mutate in place, return same ref *)\n | _ -> raise (Eval_error (\"append!: expected list, got \" ^ type_of lst))\n\n(** Mutable dict-set — set key in dict, return value. *)\nlet sx_dict_set_b d k v =\n match d, k with\n | Dict tbl, String key -> Hashtbl.replace tbl key v; v\n | Dict tbl, Keyword key -> Hashtbl.replace tbl key v; v\n | _ -> raise (Eval_error \"dict-set!: expected dict and string key\")\n\n(** Get from dict or list. *)\nlet get_val container key =\n match container, key with\n | CekState s, String k ->\n (match k with\n | \"control\" -> s.cs_control | \"env\" -> s.cs_env\n | \"kont\" -> s.cs_kont | \"phase\" -> String s.cs_phase\n | \"value\" -> s.cs_value | _ -> Nil)\n | CekFrame f, String k ->\n (match k with\n | \"type\" -> String f.cf_type | \"env\" -> f.cf_env\n | \"name\" -> f.cf_name | \"body\" -> f.cf_body\n | \"remaining\" -> f.cf_remaining | \"f\" -> f.cf_f\n | \"args\" -> f.cf_args | \"evaled\" -> f.cf_args\n | \"results\" -> f.cf_results | \"raw-args\" -> f.cf_results\n | \"then\" -> f.cf_body | \"else\" -> f.cf_name\n | \"ho-type\" -> f.cf_extra | \"scheme\" -> f.cf_extra\n | \"indexed\" -> f.cf_extra | \"value\" -> f.cf_extra\n | \"phase\" -> f.cf_extra | \"has-effects\" -> f.cf_extra\n | \"match-val\" -> f.cf_extra | \"current-item\" -> f.cf_extra\n | \"update-fn\" -> f.cf_extra | \"head-name\" -> f.cf_extra\n | \"emitted\" -> f.cf_extra2 | \"effect-list\" -> f.cf_extra2\n | \"first-render\" -> f.cf_extra2\n | _ -> Nil)\n | Dict d, String k -> dict_get d k\n | Dict d, Keyword k -> dict_get d k\n | (List l | ListRef { contents = l }), Number n ->\n (try List.nth l (int_of_float n) with _ -> Nil)\n | Nil, _ -> Nil (* nil.anything → nil *)\n | _, _ -> Nil (* type mismatch → nil (matches JS/Python behavior) *)\n\n(** Register get as a primitive override — transpiled code calls (get d k). *)\nlet () =\n Sx_primitives.register \"get\" (fun args ->\n match args with\n | [c; k] -> get_val c k\n | [c; k; default] ->\n (try\n let v = get_val c k in\n if v = Nil then default else v\n with _ -> default)\n | _ -> raise (Eval_error \"get: 2-3 args\"))\n\n\n(* ====================================================================== *)\n(* Primitive aliases — top-level functions called by transpiled code *)\n(* ====================================================================== *)\n\n(** The transpiled evaluator calls primitives directly by their mangled\n OCaml name. These aliases delegate to the primitives table so the\n transpiled code compiles without needing [prim_call] everywhere. *)\n\nlet _prim name = match Hashtbl.find_opt Sx_primitives.primitives name with\n | Some f -> f | None -> (fun _ -> raise (Eval_error (\"Missing prim: \" ^ name)))\n\n(* Collection ops *)\nlet first args = _prim \"first\" [args]\nlet rest args = _prim \"rest\" [args]\nlet last args = _prim \"last\" [args]\nlet nth coll i = _prim \"nth\" [coll; i]\nlet cons x l = _prim \"cons\" [x; l]\nlet append a b = _prim \"append\" [a; b]\nlet reverse l = _prim \"reverse\" [l]\nlet flatten l = _prim \"flatten\" [l]\nlet concat a b = _prim \"concat\" [a; b]\nlet slice a b = _prim \"slice\" [a; b]\nlet len a = _prim \"len\" [a]\nlet get a b = get_val a b\nlet sort' a = _prim \"sort\" [a]\nlet range' a = _prim \"range\" [a]\nlet unique a = _prim \"unique\" [a]\nlet zip a b = _prim \"zip\" [a; b]\nlet zip_pairs a = _prim \"zip-pairs\" [a]\nlet take a b = _prim \"take\" [a; b]\nlet drop a b = _prim \"drop\" [a; b]\nlet chunk_every a b = _prim \"chunk-every\" [a; b]\n\n(* Predicates *)\nlet empty_p a = _prim \"empty?\" [a]\nlet nil_p a = _prim \"nil?\" [a]\nlet number_p a = _prim \"number?\" [a]\nlet string_p a = _prim \"string?\" [a]\nlet boolean_p a = _prim \"boolean?\" [a]\nlet list_p a = _prim \"list?\" [a]\nlet dict_p a = _prim \"dict?\" [a]\nlet symbol_p a = _prim \"symbol?\" [a]\nlet keyword_p a = _prim \"keyword?\" [a]\nlet contains_p a b = _prim \"contains?\" [a; b]\nlet has_key_p a b = _prim \"has-key?\" [a; b]\nlet starts_with_p a b = _prim \"starts-with?\" [a; b]\nlet ends_with_p a b = _prim \"ends-with?\" [a; b]\nlet string_contains_p a b = _prim \"string-contains?\" [a; b]\nlet odd_p a = _prim \"odd?\" [a]\nlet even_p a = _prim \"even?\" [a]\nlet zero_p a = _prim \"zero?\" [a]\n\n(* String ops *)\nlet str' args = String (sx_str args)\nlet upper a = _prim \"upper\" [a]\nlet upcase a = _prim \"upcase\" [a]\nlet lower a = _prim \"lower\" [a]\nlet downcase a = _prim \"downcase\" [a]\nlet trim a = _prim \"trim\" [a]\nlet split a b = _prim \"split\" [a; b]\nlet join a b = _prim \"join\" [a; b]\nlet replace a b c = _prim \"replace\" [a; b; c]\nlet index_of a b = _prim \"index-of\" [a; b]\nlet substring a b c = _prim \"substring\" [a; b; c]\nlet string_length a = _prim \"string-length\" [a]\nlet char_from_code a = _prim \"char-from-code\" [a]\n\n(* Dict ops *)\nlet assoc d k v = _prim \"assoc\" [d; k; v]\nlet dissoc d k = _prim \"dissoc\" [d; k]\nlet merge' a b = _prim \"merge\" [a; b]\nlet keys a = _prim \"keys\" [a]\nlet vals a = _prim \"vals\" [a]\nlet dict_set a b c = _prim \"dict-set!\" [a; b; c]\nlet dict_get a b = _prim \"dict-get\" [a; b]\nlet dict_has_p a b = _prim \"dict-has?\" [a; b]\nlet dict_delete a b = _prim \"dict-delete!\" [a; b]\n\n(* Math *)\nlet abs' a = _prim \"abs\" [a]\nlet sqrt' a = _prim \"sqrt\" [a]\nlet pow' a b = _prim \"pow\" [a; b]\nlet floor' a = _prim \"floor\" [a]\nlet ceil' a = _prim \"ceil\" [a]\nlet round' a = _prim \"round\" [a]\nlet min' a b = _prim \"min\" [a; b]\nlet max' a b = _prim \"max\" [a; b]\nlet clamp a b c = _prim \"clamp\" [a; b; c]\nlet parse_int a = _prim \"parse-int\" [a]\nlet parse_float a = _prim \"parse-float\" [a]\n\n(* Misc *)\nlet error msg = raise (Eval_error (value_to_str msg))\n\n(* inspect wrapper — returns String value instead of OCaml string *)\nlet inspect v = String (Sx_types.inspect v)\nlet apply' f args = sx_apply f args\nlet identical_p a b = _prim \"identical?\" [a; b]\nlet _is_spread_prim a = _prim \"spread?\" [a]\nlet spread_attrs a = _prim \"spread-attrs\" [a]\nlet make_spread a = _prim \"make-spread\" [a]\n\n(* Scope primitives — delegate to sx_ref.py's shared scope stacks *)\nlet sx_collect a b = prim_call \"collect!\" [a; b]\nlet sx_collected a = prim_call \"collected\" [a]\nlet sx_clear_collected a = prim_call \"clear-collected!\" [a]\nlet sx_emit a b = prim_call \"emit!\" [a; b]\nlet sx_emitted a = prim_call \"emitted\" [a]\nlet sx_context a b = prim_call \"context\" [a; b]\n\n(* Trampoline — forward-declared in sx_ref.ml, delegates to CEK eval_expr *)\n(* This is a stub; the real trampoline is wired up in sx_ref.ml after eval_expr is defined *)\nlet trampoline v = v\n\n(* Value-returning type predicates — the transpiled code passes these through\n sx_truthy, so they need to return Bool, not OCaml bool. *)\n(* type_of returns value, not string *)\nlet type_of v = String (Sx_types.type_of v)\n\n(* Env operations — accept Env-wrapped values and value keys.\n The transpiled CEK machine stores envs in dicts as Env values. *)\nlet unwrap_env = function\n | Env e -> e\n | Dict d ->\n (* Dict used as env — wrap it. Needed by adapter-html.sx which\n passes dicts as env args (e.g. empty {} as caller env). *)\n let e = Sx_types.make_env () in\n Hashtbl.iter (fun k v -> ignore (Sx_types.env_bind e k v)) d;\n e\n | Nil ->\n Sx_types.make_env ()\n | v -> raise (Eval_error (\"Expected env, got \" ^ Sx_types.type_of v))\n\nlet env_has e name = Bool (Sx_types.env_has (unwrap_env e) (value_to_str name))\nlet env_get e name = Sx_types.env_get (unwrap_env e) (value_to_str name)\nlet env_bind e name v = Sx_types.env_bind (unwrap_env e) (value_to_str name) v\nlet env_set e name v = Sx_types.env_set (unwrap_env e) (value_to_str name) v\n\nlet make_env () = Env (Sx_types.make_env ())\nlet env_extend e = Env (Sx_types.env_extend (unwrap_env e))\nlet env_merge a b = Env (Sx_types.env_merge (unwrap_env a) (unwrap_env b))\n\n(* set_lambda_name wrapper — accepts value, extracts string *)\nlet set_lambda_name l n = Sx_types.set_lambda_name l (value_to_str n)\n\nlet is_nil v = Bool (Sx_types.is_nil v)\nlet is_thunk v = Bool (Sx_types.is_thunk v)\nlet is_lambda v = Bool (Sx_types.is_lambda v)\nlet is_component v = Bool (Sx_types.is_component v)\nlet is_island v = Bool (Sx_types.is_island v)\nlet is_macro v = Bool (Sx_types.is_macro v)\nlet is_signal v = Bool (Sx_types.is_signal v)\nlet is_callable v = Bool (Sx_types.is_callable v)\nlet is_identical a b = Bool (a == b)\nlet is_primitive name = Bool (Sx_primitives.is_primitive (value_to_str name))\nlet get_primitive name = Sx_primitives.get_primitive (value_to_str name)\nlet is_spread v = match v with Spread _ -> Bool true | _ -> Bool false\n\n(* Stubs for functions defined in sx_ref.ml — resolved at link time *)\n(* These are forward-declared here; sx_ref.ml defines the actual implementations *)\n\n(* strip-prefix *)\n(* Stubs for evaluator functions — defined in sx_ref.ml but\n sometimes referenced before their definition via forward calls.\n These get overridden by the actual transpiled definitions. *)\n\nlet map_indexed fn coll =\n List (List.mapi (fun i x -> sx_call fn [Number (float_of_int i); x]) (sx_to_list coll))\n\nlet map_dict fn d =\n match d with\n | Dict tbl ->\n let result = Hashtbl.create (Hashtbl.length tbl) in\n Hashtbl.iter (fun k v -> Hashtbl.replace result k (sx_call fn [String k; v])) tbl;\n Dict result\n | _ -> raise (Eval_error \"map-dict: expected dict\")\n\nlet for_each fn coll =\n List.iter (fun x -> ignore (sx_call fn [x])) (sx_to_list coll);\n Nil\n\nlet for_each_indexed fn coll =\n List.iteri (fun i x -> ignore (sx_call fn [Number (float_of_int i); x])) (sx_to_list coll);\n Nil\n\n(* Continuation support *)\nlet continuation_p v = match v with Continuation (_, _) -> Bool true | _ -> Bool false\n\nlet make_cek_continuation captured rest_kont =\n let data = Hashtbl.create 2 in\n Hashtbl.replace data \"captured\" captured;\n Hashtbl.replace data \"rest-kont\" rest_kont;\n Continuation ((fun v -> v), Some data)\n\nlet continuation_data v = match v with\n | Continuation (_, Some d) -> Dict d\n | Continuation (_, None) -> Dict (Hashtbl.create 0)\n | _ -> raise (Eval_error \"not a continuation\")\n\n(* Dynamic wind — simplified for OCaml (no async) *)\nlet dynamic_wind_call before body after _env =\n ignore (sx_call before []);\n let result = sx_call body [] in\n ignore (sx_call after []);\n result\n\n(* Scope stack — all delegated to primitives registered in sx_server.ml *)\nlet scope_push name value = prim_call \"scope-push!\" [name; value]\nlet scope_pop name = prim_call \"scope-pop!\" [name]\nlet scope_peek name = prim_call \"scope-peek\" [name]\nlet scope_emit name value = prim_call \"scope-emit!\" [name; value]\nlet provide_push name value = prim_call \"scope-push!\" [name; value]\nlet provide_pop name = prim_call \"scope-pop!\" [name]\n\n(* Custom special forms registry — mutable dict *)\nlet custom_special_forms = Dict (Hashtbl.create 4)\n\n(* register-special-form! — add a handler to the custom registry *)\nlet register_special_form name handler =\n (match custom_special_forms with\n | Dict tbl -> Hashtbl.replace tbl (value_to_str name) handler; handler\n | _ -> raise (Eval_error \"custom_special_forms not a dict\"))\n\n(* Render check/fn hooks — nil by default, set by platform if needed *)\nlet render_check = Nil\nlet render_fn = Nil\n\n(* is-else-clause? — check if a cond/case test is an else marker *)\nlet is_else_clause v =\n match v with\n | Keyword k -> Bool (k = \"else\" || k = \"default\")\n | Symbol s -> Bool (s = \"else\" || s = \"default\")\n | Bool true -> Bool true\n | _ -> Bool false\n\n(* Signal accessors *)\nlet signal_value s = match s with\n | Signal sig' -> sig'.s_value\n | Dict d -> (match Hashtbl.find_opt d \"value\" with Some v -> v | None -> Nil)\n | _ -> raise (Eval_error \"not a signal\")\nlet signal_set_value s v = match s with Signal sig' -> sig'.s_value <- v; v | _ -> raise (Eval_error \"not a signal\")\nlet signal_subscribers s = match s with Signal sig' -> List (List.map (fun _ -> Nil) sig'.s_subscribers) | _ -> List []\nlet signal_add_sub_b s f =\n match s with\n | Dict d ->\n (match Hashtbl.find_opt d \"subscribers\" with\n | Some (ListRef r) -> r := !r @ [f]; Nil\n | Some (List items) -> Hashtbl.replace d \"subscribers\" (ListRef (ref (items @ [f]))); Nil\n | _ -> Hashtbl.replace d \"subscribers\" (ListRef (ref [f])); Nil)\n | _ -> Nil\n\nlet signal_remove_sub_b s f =\n match s with\n | Dict d ->\n (match Hashtbl.find_opt d \"subscribers\" with\n | Some (ListRef r) -> r := List.filter (fun x -> x != f) !r; Nil\n | Some (List items) -> Hashtbl.replace d \"subscribers\" (List (List.filter (fun x -> x != f) items)); Nil\n | _ -> Nil)\n | _ -> Nil\n\nlet signal_deps s =\n match s with\n | Dict d -> (match Hashtbl.find_opt d \"deps\" with Some v -> v | None -> List [])\n | _ -> List []\n\nlet signal_set_deps s d =\n match s with\n | Dict tbl -> Hashtbl.replace tbl \"deps\" d; Nil\n | _ -> Nil\n\nlet notify_subscribers s =\n let subs = match s with\n | Dict d -> (match Hashtbl.find_opt d \"subscribers\" with\n | Some (ListRef { contents = items }) | Some (List items) -> items\n | _ -> [])\n | _ -> []\n in\n List.iter (fun f -> ignore (sx_call f [])) subs;\n Nil\n\nlet flush_subscribers _s = Nil\nlet dispose_computed _s = Nil\n\n(* Island scope stubs — accept both bare OCaml fns and NativeFn values\n from transpiled code (NativeFn wrapping for value-storable lambdas). *)\nlet with_island_scope _register_fn body_fn =\n match body_fn with\n | NativeFn (_, f) -> f []\n | _ -> Nil\nlet register_in_scope _dispose_fn = Nil\n\n(* Component type annotation stub *)\nlet component_set_param_types_b _comp _types = Nil\n\n(* Parse keyword args from a call — this is defined in evaluator.sx,\n the transpiled version will override this stub. *)\n(* Forward-reference stubs for evaluator functions used before definition *)\nlet parse_comp_params _params = List [List []; Nil; Bool false]\nlet parse_macro_params _params = List [List []; Nil]\n\nlet parse_keyword_args _raw_args _env =\n (* Stub — the real implementation is transpiled from evaluator.sx *)\n List [Dict (Hashtbl.create 0); List []]\n\n(* Make handler/query/action/page def stubs *)\nlet make_handler_def name params body _env = Dict (let d = Hashtbl.create 4 in Hashtbl.replace d \"type\" (String \"handler\"); Hashtbl.replace d \"name\" name; Hashtbl.replace d \"params\" params; Hashtbl.replace d \"body\" body; d)\nlet make_query_def name params body _env = make_handler_def name params body _env\nlet make_action_def name params body _env = make_handler_def name params body _env\nlet make_page_def name _opts = Dict (let d = Hashtbl.create 4 in Hashtbl.replace d \"type\" (String \"page\"); Hashtbl.replace d \"name\" name; d)\n\n(* sf-def* stubs — platform-specific def-forms, not in the SX spec *)\nlet sf_defhandler args env =\n let name = first args in let rest_args = rest args in\n make_handler_def name (first rest_args) (nth rest_args (Number 1.0)) env\nlet sf_defquery args env = sf_defhandler args env\nlet sf_defaction args env = sf_defhandler args env\nlet sf_defpage args _env =\n let name = first args in make_page_def name (rest args)\n\nlet strip_prefix s prefix =\n match s, prefix with\n | String s, String p ->\n let pl = String.length p in\n if String.length s >= pl && String.sub s 0 pl = p\n then String (String.sub s pl (String.length s - pl))\n else String s\n | _ -> s\n\n(* debug_log — no-op in production, used by CEK evaluator for component warnings *)\nlet debug_log _ _ = Nil\n\n","(* generated code *)"],"names":[],"mappings":"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","ignoreList":[1]}},{"offset":{"line":0,"column":125645},"map":{"version":3,"sources":["/workspace_root/lib/sx_ref.ml","/builtin/blackbox.ml"],"sourcesContent":["(* sx_ref.ml — Auto-generated from SX spec by hosts/ocaml/bootstrap.py *)\n(* Do not edit — regenerate with: python3 hosts/ocaml/bootstrap.py *)\n\n[@@@warning \"-26-27\"]\n\nopen Sx_types\nopen Sx_runtime\n\n(* Trampoline — forward ref, resolved after eval_expr is defined. *)\nlet trampoline_fn : (value -> value) ref = ref (fun v -> v)\nlet trampoline v = !trampoline_fn v\n\n\n\n(* === Mutable state for strict mode === *)\n(* These are defined as top-level refs because the transpiler cannot handle\n global set! mutation (it creates local refs that shadow the global). *)\nlet _strict_ref = ref (Bool false)\nlet _prim_param_types_ref = ref Nil\n\n(* JIT call hook — cek_call checks this before CEK dispatch for named\n lambdas. Registered by sx_server.ml after compiler loads. Tests\n run with hook = None (pure CEK, no compilation dependency). *)\nlet jit_call_hook : (value -> value list -> value option) option ref = ref None\n\n\n\n(* === Transpiled from evaluator (frames + eval + CEK) === *)\n\n(* make-cek-state *)\nlet rec make_cek_state control env kont =\n (CekState { cs_control = control; cs_env = env; cs_kont = kont; cs_phase = \"eval\"; cs_value = Nil })\n\n(* make-cek-value *)\nand make_cek_value value env kont =\n (CekState { cs_control = Nil; cs_env = env; cs_kont = kont; cs_phase = \"continue\"; cs_value = value })\n\n(* cek-terminal? *)\nand cek_terminal_p state =\n (let _and = (prim_call \"=\" [(get (state) ((String \"phase\"))); (String \"continue\")]) in if not (sx_truthy _and) then _and else (empty_p ((get (state) ((String \"kont\"))))))\n\n(* cek-control *)\nand cek_control s =\n (get (s) ((String \"control\")))\n\n(* cek-env *)\nand cek_env s =\n (get (s) ((String \"env\")))\n\n(* cek-kont *)\nand cek_kont s =\n (get (s) ((String \"kont\")))\n\n(* cek-phase *)\nand cek_phase s =\n (get (s) ((String \"phase\")))\n\n(* cek-value *)\nand cek_value s =\n (get (s) ((String \"value\")))\n\n(* make-if-frame *)\nand make_if_frame then_expr else_expr env =\n (CekFrame { cf_type = \"if\"; cf_env = env; cf_name = else_expr; cf_body = then_expr; cf_remaining = Nil; cf_f = Nil; cf_args = Nil; cf_results = Nil; cf_extra = Nil; cf_extra2 = Nil })\n\n(* make-when-frame *)\nand make_when_frame body_exprs env =\n (CekFrame { cf_type = \"when\"; cf_env = env; cf_name = Nil; cf_body = body_exprs; cf_remaining = Nil; cf_f = Nil; cf_args = Nil; cf_results = Nil; cf_extra = Nil; cf_extra2 = Nil })\n\n(* make-begin-frame *)\nand make_begin_frame remaining env =\n (CekFrame { cf_type = \"begin\"; cf_env = env; cf_name = Nil; cf_body = Nil; cf_remaining = remaining; cf_f = Nil; cf_args = Nil; cf_results = Nil; cf_extra = Nil; cf_extra2 = Nil })\n\n(* make-let-frame *)\nand make_let_frame name remaining body local =\n (CekFrame { cf_type = \"let\"; cf_env = local; cf_name = name; cf_body = body; cf_remaining = remaining; cf_f = Nil; cf_args = Nil; cf_results = Nil; cf_extra = Nil; cf_extra2 = Nil })\n\n(* make-define-frame *)\nand make_define_frame name env has_effects effect_list =\n (CekFrame { cf_type = \"define\"; cf_env = env; cf_name = name; cf_body = Nil; cf_remaining = Nil; cf_f = Nil; cf_args = Nil; cf_results = Nil; cf_extra = has_effects; cf_extra2 = effect_list })\n\n(* make-set-frame *)\nand make_set_frame name env =\n (CekFrame { cf_type = \"set\"; cf_env = env; cf_name = name; cf_body = Nil; cf_remaining = Nil; cf_f = Nil; cf_args = Nil; cf_results = Nil; cf_extra = Nil; cf_extra2 = Nil })\n\n(* make-arg-frame *)\nand make_arg_frame f evaled remaining env raw_args head_name =\n (CekFrame { cf_type = \"arg\"; cf_env = env; cf_name = Nil; cf_body = Nil; cf_remaining = remaining; cf_f = f; cf_args = evaled; cf_results = raw_args; cf_extra = (let _or = head_name in if sx_truthy _or then _or else Nil); cf_extra2 = Nil })\n\n(* make-call-frame *)\nand make_call_frame f args env =\n (CekFrame { cf_type = \"call\"; cf_env = env; cf_name = Nil; cf_body = Nil; cf_remaining = Nil; cf_f = f; cf_args = args; cf_results = Nil; cf_extra = Nil; cf_extra2 = Nil })\n\n(* make-cond-frame *)\nand make_cond_frame remaining env scheme_p =\n (CekFrame { cf_type = \"cond\"; cf_env = env; cf_name = Nil; cf_body = Nil; cf_remaining = remaining; cf_f = Nil; cf_args = Nil; cf_results = Nil; cf_extra = scheme_p; cf_extra2 = Nil })\n\n(* make-case-frame *)\nand make_case_frame match_val remaining env =\n (CekFrame { cf_type = \"case\"; cf_env = env; cf_name = Nil; cf_body = Nil; cf_remaining = remaining; cf_f = Nil; cf_args = Nil; cf_results = Nil; cf_extra = match_val; cf_extra2 = Nil })\n\n(* make-thread-frame *)\nand make_thread_frame remaining env =\n (CekFrame { cf_type = \"thread\"; cf_env = env; cf_name = Nil; cf_body = Nil; cf_remaining = remaining; cf_f = Nil; cf_args = Nil; cf_results = Nil; cf_extra = Nil; cf_extra2 = Nil })\n\n(* make-map-frame *)\nand make_map_frame f remaining results env =\n (CekFrame { cf_type = \"map\"; cf_env = env; cf_name = Nil; cf_body = Nil; cf_remaining = remaining; cf_f = f; cf_args = Nil; cf_results = results; cf_extra = (Bool false); cf_extra2 = Nil })\n\n(* make-map-indexed-frame *)\nand make_map_indexed_frame f remaining results env =\n (CekFrame { cf_type = \"map\"; cf_env = env; cf_name = Nil; cf_body = Nil; cf_remaining = remaining; cf_f = f; cf_args = Nil; cf_results = results; cf_extra = (Bool true); cf_extra2 = Nil })\n\n(* make-filter-frame *)\nand make_filter_frame f remaining results current_item env =\n (CekFrame { cf_type = \"filter\"; cf_env = env; cf_name = Nil; cf_body = Nil; cf_remaining = remaining; cf_f = f; cf_args = Nil; cf_results = results; cf_extra = current_item; cf_extra2 = Nil })\n\n(* make-reduce-frame *)\nand make_reduce_frame f remaining env =\n (CekFrame { cf_type = \"reduce\"; cf_env = env; cf_name = Nil; cf_body = Nil; cf_remaining = remaining; cf_f = f; cf_args = Nil; cf_results = Nil; cf_extra = Nil; cf_extra2 = Nil })\n\n(* make-for-each-frame *)\nand make_for_each_frame f remaining env =\n (CekFrame { cf_type = \"for-each\"; cf_env = env; cf_name = Nil; cf_body = Nil; cf_remaining = remaining; cf_f = f; cf_args = Nil; cf_results = Nil; cf_extra = Nil; cf_extra2 = Nil })\n\n(* make-some-frame *)\nand make_some_frame f remaining env =\n (CekFrame { cf_type = \"some\"; cf_env = env; cf_name = Nil; cf_body = Nil; cf_remaining = remaining; cf_f = f; cf_args = Nil; cf_results = Nil; cf_extra = Nil; cf_extra2 = Nil })\n\n(* make-every-frame *)\nand make_every_frame f remaining env =\n (CekFrame { cf_type = \"every\"; cf_env = env; cf_name = Nil; cf_body = Nil; cf_remaining = remaining; cf_f = f; cf_args = Nil; cf_results = Nil; cf_extra = Nil; cf_extra2 = Nil })\n\n(* make-scope-frame *)\nand make_scope_frame name remaining env =\n (CekFrame { cf_type = \"scope\"; cf_env = env; cf_name = name; cf_body = Nil; cf_remaining = remaining; cf_f = Nil; cf_args = Nil; cf_results = Nil; cf_extra = Nil; cf_extra2 = Nil })\n\n(* make-provide-frame *)\nand make_provide_frame name value remaining env =\n (CekFrame { cf_type = \"provide\"; cf_env = env; cf_name = name; cf_body = Nil; cf_remaining = remaining; cf_f = Nil; cf_args = Nil; cf_results = Nil; cf_extra = value; cf_extra2 = Nil })\n\n(* make-scope-acc-frame *)\nand make_scope_acc_frame name value remaining env =\n (CekFrame { cf_type = \"scope-acc\"; cf_env = env; cf_name = name; cf_body = Nil; cf_remaining = remaining; cf_f = Nil; cf_args = Nil; cf_results = Nil; cf_extra = (let _or = value in if sx_truthy _or then _or else Nil); cf_extra2 = (List []) })\n\n(* make-reset-frame *)\nand make_reset_frame env =\n (CekFrame { cf_type = \"reset\"; cf_env = env; cf_name = Nil; cf_body = Nil; cf_remaining = Nil; cf_f = Nil; cf_args = Nil; cf_results = Nil; cf_extra = Nil; cf_extra2 = Nil })\n\n(* make-dict-frame *)\nand make_dict_frame remaining results env =\n (CekFrame { cf_type = \"dict\"; cf_env = env; cf_name = Nil; cf_body = Nil; cf_remaining = remaining; cf_f = Nil; cf_args = Nil; cf_results = results; cf_extra = Nil; cf_extra2 = Nil })\n\n(* make-and-frame *)\nand make_and_frame remaining env =\n (CekFrame { cf_type = \"and\"; cf_env = env; cf_name = Nil; cf_body = Nil; cf_remaining = remaining; cf_f = Nil; cf_args = Nil; cf_results = Nil; cf_extra = Nil; cf_extra2 = Nil })\n\n(* make-or-frame *)\nand make_or_frame remaining env =\n (CekFrame { cf_type = \"or\"; cf_env = env; cf_name = Nil; cf_body = Nil; cf_remaining = remaining; cf_f = Nil; cf_args = Nil; cf_results = Nil; cf_extra = Nil; cf_extra2 = Nil })\n\n(* make-dynamic-wind-frame *)\nand make_dynamic_wind_frame phase body_thunk after_thunk env =\n (CekFrame { cf_type = \"dynamic-wind\"; cf_env = env; cf_name = Nil; cf_body = Nil; cf_remaining = Nil; cf_f = Nil; cf_args = Nil; cf_results = Nil; cf_extra = phase; cf_extra2 = Nil })\n\n(* make-reactive-reset-frame *)\nand make_reactive_reset_frame env update_fn first_render_p =\n (CekFrame { cf_type = \"reactive-reset\"; cf_env = env; cf_name = Nil; cf_body = Nil; cf_remaining = Nil; cf_f = Nil; cf_args = Nil; cf_results = Nil; cf_extra = update_fn; cf_extra2 = first_render_p })\n\n(* make-deref-frame *)\nand make_deref_frame env =\n (CekFrame { cf_type = \"deref\"; cf_env = env; cf_name = Nil; cf_body = Nil; cf_remaining = Nil; cf_f = Nil; cf_args = Nil; cf_results = Nil; cf_extra = Nil; cf_extra2 = Nil })\n\n(* make-ho-setup-frame *)\nand make_ho_setup_frame ho_type remaining_args evaled_args env =\n (CekFrame { cf_type = \"ho-setup\"; cf_env = env; cf_name = Nil; cf_body = Nil; cf_remaining = remaining_args; cf_f = Nil; cf_args = evaled_args; cf_results = Nil; cf_extra = ho_type; cf_extra2 = Nil })\n\n(* frame-type *)\nand frame_type f =\n (get (f) ((String \"type\")))\n\n(* kont-push *)\nand kont_push frame kont =\n (cons (frame) (kont))\n\n(* kont-top *)\nand kont_top kont =\n (first (kont))\n\n(* kont-pop *)\nand kont_pop kont =\n (rest (kont))\n\n(* kont-empty? *)\nand kont_empty_p kont =\n (empty_p (kont))\n\n(* kont-capture-to-reset *)\nand kont_capture_to_reset kont =\n (let rec scan = (fun k captured -> (if sx_truthy ((empty_p (k))) then (raise (Eval_error (value_to_str (String \"shift without enclosing reset\")))) else (let frame = (first (k)) in (if sx_truthy ((let _or = (prim_call \"=\" [(frame_type (frame)); (String \"reset\")]) in if sx_truthy _or then _or else (prim_call \"=\" [(frame_type (frame)); (String \"reactive-reset\")]))) then (List [captured; (rest (k))]) else (scan ((rest (k))) ((prim_call \"append\" [captured; (List [frame])]))))))) in (scan (kont) ((List []))))\n\n(* kont-find-provide *)\nand kont_find_provide kont name =\n (if sx_truthy ((empty_p (kont))) then Nil else (let frame = (first (kont)) in (if sx_truthy ((let _and = (prim_call \"=\" [(frame_type (frame)); (String \"provide\")]) in if not (sx_truthy _and) then _and else (prim_call \"=\" [(get (frame) ((String \"name\"))); name]))) then frame else (kont_find_provide ((rest (kont))) (name)))))\n\n(* kont-find-scope-acc *)\nand kont_find_scope_acc kont name =\n (if sx_truthy ((empty_p (kont))) then Nil else (let frame = (first (kont)) in (if sx_truthy ((let _and = (prim_call \"=\" [(frame_type (frame)); (String \"scope-acc\")]) in if not (sx_truthy _and) then _and else (prim_call \"=\" [(get (frame) ((String \"name\"))); name]))) then frame else (kont_find_scope_acc ((rest (kont))) (name)))))\n\n(* has-reactive-reset-frame? *)\nand has_reactive_reset_frame_p kont =\n (if sx_truthy ((empty_p (kont))) then (Bool false) else (if sx_truthy ((prim_call \"=\" [(frame_type ((first (kont)))); (String \"reactive-reset\")])) then (Bool true) else (has_reactive_reset_frame_p ((rest (kont))))))\n\n(* kont-capture-to-reactive-reset *)\nand kont_capture_to_reactive_reset kont =\n (let rec scan = (fun k captured -> (if sx_truthy ((empty_p (k))) then (raise (Eval_error (value_to_str (String \"reactive deref without enclosing reactive-reset\")))) else (let frame = (first (k)) in (if sx_truthy ((prim_call \"=\" [(frame_type (frame)); (String \"reactive-reset\")])) then (List [captured; frame; (rest (k))]) else (scan ((rest (k))) ((prim_call \"append\" [captured; (List [frame])]))))))) in (scan (kont) ((List []))))\n\n(* *custom-special-forms* *)\nand custom_special_forms =\n (Dict (Hashtbl.create 0))\n\n(* register-special-form! *)\nand register_special_form name handler =\n (sx_dict_set_b custom_special_forms name handler)\n\n(* *render-check* *)\nand render_check =\n Nil\n\n(* *render-fn* *)\nand render_fn =\n Nil\n\n(* *strict* *)\nand _strict_ = !_strict_ref\n\n(* set-strict! *)\nand set_strict_b val' =\n _strict_ref := val'; Nil\n\n(* *prim-param-types* *)\nand _prim_param_types_ = !_prim_param_types_ref\n\n(* set-prim-param-types! *)\nand set_prim_param_types_b types =\n _prim_param_types_ref := types; Nil\n\n(* value-matches-type? *)\nand value_matches_type_p val' expected_type =\n (if sx_truthy ((prim_call \"=\" [expected_type; (String \"any\")])) then (Bool true) else (if sx_truthy ((prim_call \"=\" [expected_type; (String \"number\")])) then (number_p (val')) else (if sx_truthy ((prim_call \"=\" [expected_type; (String \"string\")])) then (string_p (val')) else (if sx_truthy ((prim_call \"=\" [expected_type; (String \"boolean\")])) then (boolean_p (val')) else (if sx_truthy ((prim_call \"=\" [expected_type; (String \"nil\")])) then (is_nil (val')) else (if sx_truthy ((prim_call \"=\" [expected_type; (String \"list\")])) then (list_p (val')) else (if sx_truthy ((prim_call \"=\" [expected_type; (String \"dict\")])) then (dict_p (val')) else (if sx_truthy ((prim_call \"=\" [expected_type; (String \"lambda\")])) then (is_lambda (val')) else (if sx_truthy ((prim_call \"=\" [expected_type; (String \"symbol\")])) then (prim_call \"=\" [(type_of (val')); (String \"symbol\")]) else (if sx_truthy ((prim_call \"=\" [expected_type; (String \"keyword\")])) then (prim_call \"=\" [(type_of (val')); (String \"keyword\")]) else (if sx_truthy ((let _and = (string_p (expected_type)) in if not (sx_truthy _and) then _and else (prim_call \"ends-with?\" [expected_type; (String \"?\")]))) then (let _or = (is_nil (val')) in if sx_truthy _or then _or else (value_matches_type_p (val') ((prim_call \"slice\" [expected_type; (Number 0.0); (prim_call \"-\" [(prim_call \"string-length\" [expected_type]); (Number 1.0)])])))) else (Bool true))))))))))))\n\n(* strict-check-args *)\nand strict_check_args name args =\n (if sx_truthy ((let _and = !_strict_ref in if not (sx_truthy _and) then _and else !_prim_param_types_ref)) then (let spec = (get (!_prim_param_types_ref) (name)) in (if sx_truthy (spec) then (let positional = (get (spec) ((String \"positional\"))) in let rest_type = (get (spec) ((String \"rest-type\"))) in (let () = ignore ((if sx_truthy (positional) then (List.iter (fun pair -> ignore ((let idx = (first (pair)) in let param = (nth (pair) ((Number 1.0))) in let p_name = (first (param)) in let p_type = (nth (param) ((Number 1.0))) in (if sx_truthy ((prim_call \"<\" [idx; (len (args))])) then (let val' = (nth (args) (idx)) in (if sx_truthy ((Bool (not (sx_truthy ((value_matches_type_p (val') (p_type))))))) then (raise (Eval_error (value_to_str (String (sx_str [(String \"Type error: \"); name; (String \" expected \"); p_type; (String \" for param \"); p_name; (String \", got \"); (type_of (val')); (String \" (\"); (String (sx_str [val'])); (String \")\")]))))) else Nil)) else Nil)))) (sx_to_list (List (List.mapi (fun i p -> let i = Number (float_of_int i) in (List [i; p])) (sx_to_list positional)))); Nil) else Nil)) in (if sx_truthy ((let _and = rest_type in if not (sx_truthy _and) then _and else (prim_call \">\" [(len (args)); (len ((let _or = positional in if sx_truthy _or then _or else (List []))))]))) then (List.iter (fun pair -> ignore ((let idx = (first (pair)) in let val' = (nth (pair) ((Number 1.0))) in (if sx_truthy ((Bool (not (sx_truthy ((value_matches_type_p (val') (rest_type))))))) then (raise (Eval_error (value_to_str (String (sx_str [(String \"Type error: \"); name; (String \" expected \"); rest_type; (String \" for rest arg \"); idx; (String \", got \"); (type_of (val')); (String \" (\"); (String (sx_str [val'])); (String \")\")]))))) else Nil)))) (sx_to_list (List (List.mapi (fun i v -> let i = Number (float_of_int i) in (List [i; v])) (sx_to_list (prim_call \"slice\" [args; (len ((let _or = positional in if sx_truthy _or then _or else (List []))))]))))); Nil) else Nil))) else Nil)) else Nil)\n\n(* bind_lambda_params — shared helper for call-lambda and CEK dispatch.\n Handles &rest params: binds required params, collects rest into list. *)\nand bind_lambda_params f args local =\n let params = lambda_params f in\n let param_list = match params with List l | ListRef { contents = l } -> l | _ -> [] in\n let args_list = match args with List l | ListRef { contents = l } -> l | _ -> [] in\n let rest_idx = ref (-1) in\n List.iteri (fun i p -> match p with Symbol \"&rest\" | String \"&rest\" -> rest_idx := i | _ -> ()) param_list;\n if !rest_idx >= 0 then begin\n let required = List.filteri (fun i _ -> i < !rest_idx) param_list in\n let rest_name = (match List.nth_opt param_list (!rest_idx + 1) with\n | Some (Symbol s | String s) -> s | _ -> \"rest\") in\n List.iteri (fun i p ->\n let name = sx_to_string p in\n let v = match List.nth_opt args_list i with Some v -> v | None -> Nil in\n ignore (env_bind local name v)) required;\n let rest_vals = if !rest_idx <= List.length args_list\n then List (List.filteri (fun i _ -> i >= !rest_idx) args_list) else List [] in\n ignore (env_bind local (String rest_name) rest_vals)\n end else begin\n if sx_truthy (prim_call \">\" [len args; len params]) then\n raise (Eval_error (value_to_str (String (sx_str [\n (let _or = lambda_name f in if sx_truthy _or then _or else String \"lambda\");\n String \" expects \"; len params; String \" args, got \"; len args]))));\n ignore (List.iter (fun pair ->\n ignore (env_bind local (sx_to_string (first pair)) (nth pair (Number 1.0))))\n (sx_to_list (prim_call \"zip\" [params; args])));\n ignore (List.iter (fun p ->\n ignore (env_bind local (sx_to_string p) Nil))\n (sx_to_list (prim_call \"slice\" [params; len args])))\n end\n\n(* call-lambda — uses shared bind_lambda_params for &rest support *)\nand call_lambda f args caller_env =\n let local = env_merge (lambda_closure f) caller_env in\n bind_lambda_params f args local;\n make_thunk (lambda_body f) local\n\n(* call-component *)\nand call_component comp raw_args env =\n (let parsed = (parse_keyword_args (raw_args) (env)) in let kwargs = (first (parsed)) in let children = (nth (parsed) ((Number 1.0))) in let local = (env_merge ((component_closure (comp))) (env)) in (let () = ignore ((List.iter (fun p -> ignore ((env_bind local (sx_to_string p) (let _or = (dict_get (kwargs) (p)) in if sx_truthy _or then _or else Nil)))) (sx_to_list (component_params (comp))); Nil)) in (let () = ignore ((if sx_truthy ((component_has_children (comp))) then (env_bind local (sx_to_string (String \"children\")) children) else Nil)) in (make_thunk ((component_body (comp))) (local)))))\n\n(* parse-keyword-args *)\nand parse_keyword_args raw_args env =\n (let kwargs = (Dict (Hashtbl.create 0)) in let children = ref ((List [])) in let i = (Number 0.0) in (let () = ignore ((List.fold_left (fun state arg -> (let idx = (get (state) ((String \"i\"))) in let skip = (get (state) ((String \"skip\"))) in (if sx_truthy (skip) then (prim_call \"assoc\" [state; (String \"skip\"); (Bool false); (String \"i\"); (prim_call \"inc\" [idx])]) else (if sx_truthy ((let _and = (prim_call \"=\" [(type_of (arg)); (String \"keyword\")]) in if not (sx_truthy _and) then _and else (prim_call \"<\" [(prim_call \"inc\" [idx]); (len (raw_args))]))) then (let () = ignore ((sx_dict_set_b kwargs (keyword_name (arg)) (trampoline ((eval_expr ((nth (raw_args) ((prim_call \"inc\" [idx])))) (env)))))) in (prim_call \"assoc\" [state; (String \"skip\"); (Bool true); (String \"i\"); (prim_call \"inc\" [idx])])) else (let () = ignore ((children := sx_append_b !children (trampoline ((eval_expr (arg) (env)))); Nil)) in (prim_call \"assoc\" [state; (String \"i\"); (prim_call \"inc\" [idx])])))))) (let _d = Hashtbl.create 2 in Hashtbl.replace _d (value_to_str (String \"i\")) (Number 0.0); Hashtbl.replace _d (value_to_str (String \"skip\")) (Bool false); Dict _d) (sx_to_list raw_args))) in (List [kwargs; !children])))\n\n(* cond-scheme? *)\nand cond_scheme_p clauses =\n (Bool (List.for_all (fun c -> sx_truthy ((let _and = (prim_call \"=\" [(type_of (c)); (String \"list\")]) in if not (sx_truthy _and) then _and else (prim_call \"=\" [(len (c)); (Number 2.0)])))) (sx_to_list clauses)))\n\n(* is-else-clause? *)\nand is_else_clause test =\n (let _or = (let _and = (prim_call \"=\" [(type_of (test)); (String \"keyword\")]) in if not (sx_truthy _and) then _and else (prim_call \"=\" [(keyword_name (test)); (String \"else\")])) in if sx_truthy _or then _or else (let _and = (prim_call \"=\" [(type_of (test)); (String \"symbol\")]) in if not (sx_truthy _and) then _and else (let _or = (prim_call \"=\" [(symbol_name (test)); (String \"else\")]) in if sx_truthy _or then _or else (prim_call \"=\" [(symbol_name (test)); (String \":else\")]))))\n\n(* sf-named-let *)\nand sf_named_let args env =\n (let loop_name = (symbol_name ((first (args)))) in let bindings = (nth (args) ((Number 1.0))) in let body = (prim_call \"slice\" [args; (Number 2.0)]) in let params = ref ((List [])) in let inits = ref ((List [])) in (let () = ignore ((if sx_truthy ((let _and = (prim_call \"=\" [(type_of ((first (bindings)))); (String \"list\")]) in if not (sx_truthy _and) then _and else (prim_call \"=\" [(len ((first (bindings)))); (Number 2.0)]))) then (List.iter (fun binding -> ignore ((let () = ignore ((params := sx_append_b !params (if sx_truthy ((prim_call \"=\" [(type_of ((first (binding)))); (String \"symbol\")])) then (symbol_name ((first (binding)))) else (first (binding))); Nil)) in (inits := sx_append_b !inits (nth (binding) ((Number 1.0))); Nil)))) (sx_to_list bindings); Nil) else (List.fold_left (fun _acc pair_idx -> (let () = ignore ((params := sx_append_b !params (if sx_truthy ((prim_call \"=\" [(type_of ((nth (bindings) ((prim_call \"*\" [pair_idx; (Number 2.0)]))))); (String \"symbol\")])) then (symbol_name ((nth (bindings) ((prim_call \"*\" [pair_idx; (Number 2.0)]))))) else (nth (bindings) ((prim_call \"*\" [pair_idx; (Number 2.0)])))); Nil)) in (inits := sx_append_b !inits (nth (bindings) ((prim_call \"inc\" [(prim_call \"*\" [pair_idx; (Number 2.0)])]))); Nil))) Nil (sx_to_list (prim_call \"range\" [(Number 0.0); (prim_call \"/\" [(len (bindings)); (Number 2.0)])]))))) in (let loop_body = (if sx_truthy ((prim_call \"=\" [(len (body)); (Number 1.0)])) then (first (body)) else (cons ((make_symbol ((String \"begin\")))) (body))) in let loop_fn = (make_lambda (!params) (loop_body) (env)) in (let () = ignore ((set_lambda_name loop_fn (sx_to_string loop_name))) in (let () = ignore ((env_bind (lambda_closure (loop_fn)) (sx_to_string loop_name) loop_fn)) in (let init_vals = (List (List.map (fun e -> (trampoline ((eval_expr (e) (env))))) (sx_to_list !inits))) in (call_lambda (loop_fn) (init_vals) (env))))))))\n\n(* sf-lambda *)\nand sf_lambda args env =\n (let params_expr = (first (args)) in let body_exprs = (rest (args)) in let body = (if sx_truthy ((prim_call \"=\" [(len (body_exprs)); (Number 1.0)])) then (first (body_exprs)) else (cons ((make_symbol ((String \"begin\")))) (body_exprs))) in let param_names = (List (List.map (fun p -> (if sx_truthy ((prim_call \"=\" [(type_of (p)); (String \"symbol\")])) then (symbol_name (p)) else (if sx_truthy ((let _and = (prim_call \"=\" [(type_of (p)); (String \"list\")]) in if not (sx_truthy _and) then _and else (let _and = (prim_call \"=\" [(len (p)); (Number 3.0)]) in if not (sx_truthy _and) then _and else (let _and = (prim_call \"=\" [(type_of ((nth (p) ((Number 1.0))))); (String \"keyword\")]) in if not (sx_truthy _and) then _and else (prim_call \"=\" [(keyword_name ((nth (p) ((Number 1.0))))); (String \"as\")]))))) then (symbol_name ((first (p)))) else p))) (sx_to_list params_expr))) in (make_lambda (param_names) (body) (env)))\n\n(* sf-defcomp *)\nand sf_defcomp args env =\n (let name_sym = (first (args)) in let params_raw = (nth (args) ((Number 1.0))) in let body = (last (args)) in let comp_name = (strip_prefix ((symbol_name (name_sym))) ((String \"~\"))) in let parsed = (parse_comp_params (params_raw)) in let params = (first (parsed)) in let has_children = (nth (parsed) ((Number 1.0))) in let param_types = (nth (parsed) ((Number 2.0))) in let affinity = (defcomp_kwarg (args) ((String \"affinity\")) ((String \"auto\"))) in (let comp = (make_component (comp_name) (params) (has_children) (body) (env) (affinity)) in let effects = (defcomp_kwarg (args) ((String \"effects\")) (Nil)) in (let () = ignore ((if sx_truthy ((let _and = (Bool (not (sx_truthy ((is_nil (param_types)))))) in if not (sx_truthy _and) then _and else (Bool (not (sx_truthy ((empty_p ((prim_call \"keys\" [param_types]))))))))) then (component_set_param_types_b (comp) (param_types)) else Nil)) in (let () = ignore ((if sx_truthy ((Bool (not (sx_truthy ((is_nil (effects))))))) then (let effect_list = (if sx_truthy ((prim_call \"=\" [(type_of (effects)); (String \"list\")])) then (List (List.map (fun e -> (if sx_truthy ((prim_call \"=\" [(type_of (e)); (String \"symbol\")])) then (symbol_name (e)) else (String (sx_str [e])))) (sx_to_list effects))) else (List [(String (sx_str [effects]))])) in let effect_anns = (if sx_truthy ((env_has (env) ((String \"*effect-annotations*\")))) then (env_get (env) ((String \"*effect-annotations*\"))) else (Dict (Hashtbl.create 0))) in (let () = ignore ((sx_dict_set_b effect_anns (symbol_name (name_sym)) effect_list)) in (env_bind env (sx_to_string (String \"*effect-annotations*\")) effect_anns))) else Nil)) in (let () = ignore ((env_bind env (sx_to_string (symbol_name (name_sym))) comp)) in comp)))))\n\n(* defcomp-kwarg *)\nand defcomp_kwarg args key default =\n (let end' = (prim_call \"-\" [(len (args)); (Number 1.0)]) in let result' = ref (default) in (let () = ignore ((List.iter (fun i -> ignore ((if sx_truthy ((let _and = (prim_call \"=\" [(type_of ((nth (args) (i)))); (String \"keyword\")]) in if not (sx_truthy _and) then _and else (let _and = (prim_call \"=\" [(keyword_name ((nth (args) (i)))); key]) in if not (sx_truthy _and) then _and else (prim_call \"<\" [(prim_call \"+\" [i; (Number 1.0)]); end'])))) then (let val' = (nth (args) ((prim_call \"+\" [i; (Number 1.0)]))) in (result' := (if sx_truthy ((prim_call \"=\" [(type_of (val')); (String \"keyword\")])) then (keyword_name (val')) else val'); Nil)) else Nil))) (sx_to_list (prim_call \"range\" [(Number 2.0); end'; (Number 1.0)])); Nil)) in !result'))\n\n(* parse-comp-params *)\nand parse_comp_params params_expr =\n (let params = ref ((List [])) in let param_types = (Dict (Hashtbl.create 0)) in let has_children = ref ((Bool false)) in let in_key = ref ((Bool false)) in (let () = ignore ((List.iter (fun p -> ignore ((if sx_truthy ((let _and = (prim_call \"=\" [(type_of (p)); (String \"list\")]) in if not (sx_truthy _and) then _and else (let _and = (prim_call \"=\" [(len (p)); (Number 3.0)]) in if not (sx_truthy _and) then _and else (let _and = (prim_call \"=\" [(type_of ((first (p)))); (String \"symbol\")]) in if not (sx_truthy _and) then _and else (let _and = (prim_call \"=\" [(type_of ((nth (p) ((Number 1.0))))); (String \"keyword\")]) in if not (sx_truthy _and) then _and else (prim_call \"=\" [(keyword_name ((nth (p) ((Number 1.0))))); (String \"as\")])))))) then (let name = (symbol_name ((first (p)))) in let ptype = (nth (p) ((Number 2.0))) in (let type_val = (if sx_truthy ((prim_call \"=\" [(type_of (ptype)); (String \"symbol\")])) then (symbol_name (ptype)) else ptype) in (if sx_truthy ((Bool (not (sx_truthy (!has_children))))) then (let () = ignore ((params := sx_append_b !params name; Nil)) in (sx_dict_set_b param_types name type_val)) else Nil))) else (if sx_truthy ((prim_call \"=\" [(type_of (p)); (String \"symbol\")])) then (let name = (symbol_name (p)) in (if sx_truthy ((prim_call \"=\" [name; (String \"&key\")])) then (in_key := (Bool true); Nil) else (if sx_truthy ((prim_call \"=\" [name; (String \"&rest\")])) then (has_children := (Bool true); Nil) else (if sx_truthy ((prim_call \"=\" [name; (String \"&children\")])) then (has_children := (Bool true); Nil) else (if sx_truthy (!has_children) then Nil else (if sx_truthy (!in_key) then (params := sx_append_b !params name; Nil) else (params := sx_append_b !params name; Nil))))))) else Nil)))) (sx_to_list params_expr); Nil)) in (List [!params; !has_children; param_types])))\n\n(* sf-defisland — multi-expression bodies wrapped in (begin ...) *)\nand sf_defisland args env =\n (let name_sym = (first (args)) in let params_raw = (nth (args) ((Number 1.0))) in let body_exprs = (slice (args) ((Number 2.0))) in let body = (if sx_truthy ((prim_call \"=\" [(len (body_exprs)); (Number 1.0)])) then (first (body_exprs)) else (prim_call \"cons\" [(make_symbol ((String \"begin\"))); body_exprs])) in let comp_name = (strip_prefix ((symbol_name (name_sym))) ((String \"~\"))) in let parsed = (parse_comp_params (params_raw)) in let params = (first (parsed)) in let has_children = (nth (parsed) ((Number 1.0))) in (let island = (make_island (comp_name) (params) (has_children) (body) (env)) in (let () = ignore ((env_bind env (sx_to_string (symbol_name (name_sym))) island)) in island)))\n\n(* sf-defmacro *)\nand sf_defmacro args env =\n (let name_sym = (first (args)) in let params_raw = (nth (args) ((Number 1.0))) in let body = (nth (args) ((Number 2.0))) in let parsed = (parse_macro_params (params_raw)) in let params = (first (parsed)) in let rest_param = (nth (parsed) ((Number 1.0))) in (let mac = (make_macro (params) (rest_param) (body) (env) ((symbol_name (name_sym)))) in (let () = ignore ((env_bind env (sx_to_string (symbol_name (name_sym))) mac)) in mac)))\n\n(* parse-macro-params *)\nand parse_macro_params params_expr =\n (let params = ref ((List [])) in let rest_param = ref (Nil) in (let () = ignore ((List.fold_left (fun state p -> (if sx_truthy ((let _and = (prim_call \"=\" [(type_of (p)); (String \"symbol\")]) in if not (sx_truthy _and) then _and else (prim_call \"=\" [(symbol_name (p)); (String \"&rest\")]))) then (prim_call \"assoc\" [state; (String \"in-rest\"); (Bool true)]) else (if sx_truthy ((get (state) ((String \"in-rest\")))) then (let () = ignore ((rest_param := (if sx_truthy ((prim_call \"=\" [(type_of (p)); (String \"symbol\")])) then (symbol_name (p)) else p); Nil)) in state) else (let () = ignore ((params := sx_append_b !params (if sx_truthy ((prim_call \"=\" [(type_of (p)); (String \"symbol\")])) then (symbol_name (p)) else p); Nil)) in state)))) (let _d = Hashtbl.create 1 in Hashtbl.replace _d (value_to_str (String \"in-rest\")) (Bool false); Dict _d) (sx_to_list params_expr))) in (List [!params; !rest_param])))\n\n(* qq-expand *)\nand qq_expand template env =\n (if sx_truthy ((Bool (not (sx_truthy ((prim_call \"=\" [(type_of (template)); (String \"list\")])))))) then template else (if sx_truthy ((empty_p (template))) then (List []) else (let head = (first (template)) in (if sx_truthy ((let _and = (prim_call \"=\" [(type_of (head)); (String \"symbol\")]) in if not (sx_truthy _and) then _and else (prim_call \"=\" [(symbol_name (head)); (String \"unquote\")]))) then (trampoline ((eval_expr ((nth (template) ((Number 1.0)))) (env)))) else (List.fold_left (fun result' item -> (if sx_truthy ((let _and = (prim_call \"=\" [(type_of (item)); (String \"list\")]) in if not (sx_truthy _and) then _and else (let _and = (prim_call \"=\" [(len (item)); (Number 2.0)]) in if not (sx_truthy _and) then _and else (let _and = (prim_call \"=\" [(type_of ((first (item)))); (String \"symbol\")]) in if not (sx_truthy _and) then _and else (prim_call \"=\" [(symbol_name ((first (item)))); (String \"splice-unquote\")]))))) then (let spliced = (trampoline ((eval_expr ((nth (item) ((Number 1.0)))) (env)))) in (if sx_truthy ((prim_call \"=\" [(type_of (spliced)); (String \"list\")])) then (prim_call \"concat\" [result'; spliced]) else (if sx_truthy ((is_nil (spliced))) then result' else (prim_call \"concat\" [result'; (List [spliced])])))) else (prim_call \"concat\" [result'; (List [(qq_expand (item) (env))])]))) (List []) (sx_to_list template))))))\n\n(* sf-letrec *)\nand sf_letrec args env =\n (let bindings = (first (args)) in let body = (rest (args)) in let local = (env_extend (env)) in let names = ref ((List [])) in let val_exprs = ref ((List [])) in (let () = ignore ((if sx_truthy ((let _and = (prim_call \"=\" [(type_of ((first (bindings)))); (String \"list\")]) in if not (sx_truthy _and) then _and else (prim_call \"=\" [(len ((first (bindings)))); (Number 2.0)]))) then (List.iter (fun binding -> ignore ((let vname = (if sx_truthy ((prim_call \"=\" [(type_of ((first (binding)))); (String \"symbol\")])) then (symbol_name ((first (binding)))) else (first (binding))) in (let () = ignore ((names := sx_append_b !names vname; Nil)) in (let () = ignore ((val_exprs := sx_append_b !val_exprs (nth (binding) ((Number 1.0))); Nil)) in (env_bind local (sx_to_string vname) Nil)))))) (sx_to_list bindings); Nil) else (List.fold_left (fun _acc pair_idx -> (let vname = (if sx_truthy ((prim_call \"=\" [(type_of ((nth (bindings) ((prim_call \"*\" [pair_idx; (Number 2.0)]))))); (String \"symbol\")])) then (symbol_name ((nth (bindings) ((prim_call \"*\" [pair_idx; (Number 2.0)]))))) else (nth (bindings) ((prim_call \"*\" [pair_idx; (Number 2.0)])))) in let val_expr = (nth (bindings) ((prim_call \"inc\" [(prim_call \"*\" [pair_idx; (Number 2.0)])]))) in (let () = ignore ((names := sx_append_b !names vname; Nil)) in (let () = ignore ((val_exprs := sx_append_b !val_exprs val_expr; Nil)) in (env_bind local (sx_to_string vname) Nil))))) Nil (sx_to_list (prim_call \"range\" [(Number 0.0); (prim_call \"/\" [(len (bindings)); (Number 2.0)])]))))) in (let () = ignore ((let values = (List (List.map (fun e -> (trampoline ((eval_expr (e) (local))))) (sx_to_list !val_exprs))) in (let () = ignore ((List.iter (fun pair -> ignore ((env_bind local (sx_to_string (first (pair))) (nth (pair) ((Number 1.0)))))) (sx_to_list (prim_call \"zip\" [!names; values])); Nil)) in (List.iter (fun val' -> ignore ((if sx_truthy ((is_lambda (val'))) then (List.iter (fun n -> ignore ((env_bind (lambda_closure (val')) (sx_to_string n) (env_get (local) (n))))) (sx_to_list !names); Nil) else Nil))) (sx_to_list values); Nil)))) in (let () = ignore ((List.iter (fun e -> ignore ((trampoline ((eval_expr (e) (local)))))) (sx_to_list (prim_call \"slice\" [body; (Number 0.0); (prim_call \"dec\" [(len (body))])])); Nil)) in (make_thunk ((last (body))) (local))))))\n\n(* step-sf-letrec *)\nand step_sf_letrec args env kont =\n (let thk = (sf_letrec (args) (env)) in (make_cek_state ((thunk_expr (thk))) ((thunk_env (thk))) (kont)))\n\n(* sf-dynamic-wind *)\nand sf_dynamic_wind args env =\n (let before = (trampoline ((eval_expr ((first (args))) (env)))) in let body = (trampoline ((eval_expr ((nth (args) ((Number 1.0)))) (env)))) in let after = (trampoline ((eval_expr ((nth (args) ((Number 2.0)))) (env)))) in (dynamic_wind_call (before) (body) (after) (env)))\n\n(* sf-scope *)\nand sf_scope args env =\n (let name = (trampoline ((eval_expr ((first (args))) (env)))) in let rest = (prim_call \"slice\" [args; (Number 1.0)]) in let val' = ref (Nil) in let body_exprs = ref (Nil) in (let () = ignore ((if sx_truthy ((let _and = (prim_call \">=\" [(len (rest)); (Number 2.0)]) in if not (sx_truthy _and) then _and else (let _and = (prim_call \"=\" [(type_of ((first (rest)))); (String \"keyword\")]) in if not (sx_truthy _and) then _and else (prim_call \"=\" [(keyword_name ((first (rest)))); (String \"value\")])))) then (let () = ignore ((val' := (trampoline ((eval_expr ((nth (rest) ((Number 1.0)))) (env)))); Nil)) in (body_exprs := (prim_call \"slice\" [rest; (Number 2.0)]); Nil)) else (body_exprs := rest; Nil))) in (let () = ignore ((scope_push (name) (!val'))) in (let result' = ref (Nil) in (let () = ignore ((List.iter (fun e -> ignore ((result' := (trampoline ((eval_expr (e) (env)))); Nil))) (sx_to_list !body_exprs); Nil)) in (let () = ignore ((scope_pop (name))) in !result'))))))\n\n(* sf-provide *)\nand sf_provide args env =\n (let name = (trampoline ((eval_expr ((first (args))) (env)))) in let val' = (trampoline ((eval_expr ((nth (args) ((Number 1.0)))) (env)))) in let body_exprs = (prim_call \"slice\" [args; (Number 2.0)]) in let result' = ref (Nil) in (let () = ignore ((scope_push (name) (val'))) in (let () = ignore ((List.iter (fun e -> ignore ((result' := (trampoline ((eval_expr (e) (env)))); Nil))) (sx_to_list body_exprs); Nil)) in (let () = ignore ((scope_pop (name))) in !result'))))\n\n(* expand-macro *)\nand expand_macro mac raw_args env =\n (let local = (env_merge ((macro_closure (mac))) (env)) in (let () = ignore ((List.iter (fun pair -> ignore ((env_bind local (sx_to_string (first (pair))) (if sx_truthy ((prim_call \"<\" [(nth (pair) ((Number 1.0))); (len (raw_args))])) then (nth (raw_args) ((nth (pair) ((Number 1.0))))) else Nil)))) (sx_to_list (List (List.mapi (fun i p -> let i = Number (float_of_int i) in (List [p; i])) (sx_to_list (macro_params (mac)))))); Nil)) in (let () = ignore ((if sx_truthy ((macro_rest_param (mac))) then (env_bind local (sx_to_string (macro_rest_param (mac))) (prim_call \"slice\" [raw_args; (len ((macro_params (mac))))])) else Nil)) in (trampoline ((eval_expr ((macro_body (mac))) (local)))))))\n\n(* cek-run — iterative to avoid OCaml stack overflow in js_of_ocaml/WASM *)\nand cek_run state =\n let s = ref state in\n while not (match cek_terminal_p !s with Bool true -> true | _ -> false) do\n s := cek_step !s\n done;\n cek_value !s\n\n(* cek-step *)\nand cek_step state =\n (if sx_truthy ((prim_call \"=\" [(cek_phase (state)); (String \"eval\")])) then (step_eval (state)) else (step_continue (state)))\n\n(* step-eval *)\nand step_eval state =\n (let expr = (cek_control (state)) in let env = (cek_env (state)) in let kont = (cek_kont (state)) in (let _match_val = (type_of (expr)) in (if _match_val = (String \"number\") then (make_cek_value (expr) (env) (kont)) else (if _match_val = (String \"string\") then (make_cek_value (expr) (env) (kont)) else (if _match_val = (String \"boolean\") then (make_cek_value (expr) (env) (kont)) else (if _match_val = (String \"nil\") then (make_cek_value (Nil) (env) (kont)) else (if _match_val = (String \"symbol\") then (let name = (symbol_name (expr)) in (let val' = (if sx_truthy ((env_has (env) (name))) then (env_get (env) (name)) else (if sx_truthy ((is_primitive (name))) then (get_primitive (name)) else (if sx_truthy ((prim_call \"=\" [name; (String \"true\")])) then (Bool true) else (if sx_truthy ((prim_call \"=\" [name; (String \"false\")])) then (Bool false) else (if sx_truthy ((prim_call \"=\" [name; (String \"nil\")])) then Nil else (raise (Eval_error (value_to_str (String (sx_str [(String \"Undefined symbol: \"); name])))))))))) in (let () = ignore ((if sx_truthy ((let _and = (is_nil (val')) in if not (sx_truthy _and) then _and else (prim_call \"starts-with?\" [name; (String \"~\")]))) then (debug_log ((String \"Component not found:\")) (name)) else Nil)) in (make_cek_value (val') (env) (kont))))) else (if _match_val = (String \"keyword\") then (make_cek_value ((keyword_name (expr))) (env) (kont)) else (if _match_val = (String \"dict\") then (let ks = (prim_call \"keys\" [expr]) in (if sx_truthy ((empty_p (ks))) then (make_cek_value ((Dict (Hashtbl.create 0))) (env) (kont)) else (let first_key = (first (ks)) in let remaining_entries = ref ((List [])) in (let () = ignore ((List.iter (fun k -> ignore ((remaining_entries := sx_append_b !remaining_entries (List [k; (get (expr) (k))]); Nil))) (sx_to_list (rest (ks))); Nil)) in (make_cek_state ((get (expr) (first_key))) (env) ((kont_push ((make_dict_frame (!remaining_entries) ((List [(List [first_key])])) (env))) (kont)))))))) else (if _match_val = (String \"list\") then (if sx_truthy ((empty_p (expr))) then (make_cek_value ((List [])) (env) (kont)) else (step_eval_list (expr) (env) (kont))) else (make_cek_value (expr) (env) (kont))))))))))))\n\n(* step-eval-list *)\nand step_eval_list expr env kont =\n (let head = (first (expr)) in let args = (rest (expr)) in (if sx_truthy ((Bool (not (sx_truthy ((let _or = (prim_call \"=\" [(type_of (head)); (String \"symbol\")]) in if sx_truthy _or then _or else (let _or = (prim_call \"=\" [(type_of (head)); (String \"lambda\")]) in if sx_truthy _or then _or else (prim_call \"=\" [(type_of (head)); (String \"list\")])))))))) then (if sx_truthy ((empty_p (expr))) then (make_cek_value ((List [])) (env) (kont)) else (make_cek_state ((first (expr))) (env) ((kont_push ((make_map_frame (Nil) ((rest (expr))) ((List [])) (env))) (kont))))) else (if sx_truthy ((prim_call \"=\" [(type_of (head)); (String \"symbol\")])) then (let name = (symbol_name (head)) in (if sx_truthy ((prim_call \"=\" [name; (String \"if\")])) then (step_sf_if (args) (env) (kont)) else (if sx_truthy ((prim_call \"=\" [name; (String \"when\")])) then (step_sf_when (args) (env) (kont)) else (if sx_truthy ((prim_call \"=\" [name; (String \"cond\")])) then (step_sf_cond (args) (env) (kont)) else (if sx_truthy ((prim_call \"=\" [name; (String \"case\")])) then (step_sf_case (args) (env) (kont)) else (if sx_truthy ((prim_call \"=\" [name; (String \"and\")])) then (step_sf_and (args) (env) (kont)) else (if sx_truthy ((prim_call \"=\" [name; (String \"or\")])) then (step_sf_or (args) (env) (kont)) else (if sx_truthy ((prim_call \"=\" [name; (String \"let\")])) then (step_sf_let (args) (env) (kont)) else (if sx_truthy ((prim_call \"=\" [name; (String \"let*\")])) then (step_sf_let (args) (env) (kont)) else (if sx_truthy ((prim_call \"=\" [name; (String \"lambda\")])) then (step_sf_lambda (args) (env) (kont)) else (if sx_truthy ((prim_call \"=\" [name; (String \"fn\")])) then (step_sf_lambda (args) (env) (kont)) else (if sx_truthy ((prim_call \"=\" [name; (String \"define\")])) then (step_sf_define (args) (env) (kont)) else (if sx_truthy ((prim_call \"=\" [name; (String \"defcomp\")])) then (make_cek_value ((sf_defcomp (args) (env))) (env) (kont)) else (if sx_truthy ((prim_call \"=\" [name; (String \"defisland\")])) then (make_cek_value ((sf_defisland (args) (env))) (env) (kont)) else (if sx_truthy ((prim_call \"=\" [name; (String \"defmacro\")])) then (make_cek_value ((sf_defmacro (args) (env))) (env) (kont)) else (if sx_truthy ((prim_call \"=\" [name; (String \"begin\")])) then (step_sf_begin (args) (env) (kont)) else (if sx_truthy ((prim_call \"=\" [name; (String \"do\")])) then (step_sf_begin (args) (env) (kont)) else (if sx_truthy ((prim_call \"=\" [name; (String \"quote\")])) then (make_cek_value ((if sx_truthy ((empty_p (args))) then Nil else (first (args)))) (env) (kont)) else (if sx_truthy ((prim_call \"=\" [name; (String \"quasiquote\")])) then (make_cek_value ((qq_expand ((first (args))) (env))) (env) (kont)) else (if sx_truthy ((prim_call \"=\" [name; (String \"->\")])) then (step_sf_thread_first (args) (env) (kont)) else (if sx_truthy ((prim_call \"=\" [name; (String \"set!\")])) then (step_sf_set_b (args) (env) (kont)) else (if sx_truthy ((prim_call \"=\" [name; (String \"letrec\")])) then (step_sf_letrec (args) (env) (kont)) else (if sx_truthy ((prim_call \"=\" [name; (String \"reset\")])) then (step_sf_reset (args) (env) (kont)) else (if sx_truthy ((prim_call \"=\" [name; (String \"shift\")])) then (step_sf_shift (args) (env) (kont)) else (if sx_truthy ((prim_call \"=\" [name; (String \"deref\")])) then (step_sf_deref (args) (env) (kont)) else (if sx_truthy ((prim_call \"=\" [name; (String \"scope\")])) then (step_sf_scope (args) (env) (kont)) else (if sx_truthy ((prim_call \"=\" [name; (String \"provide\")])) then (step_sf_provide (args) (env) (kont)) else (if sx_truthy ((prim_call \"=\" [name; (String \"context\")])) then (step_sf_context (args) (env) (kont)) else (if sx_truthy ((prim_call \"=\" [name; (String \"emit!\")])) then (step_sf_emit (args) (env) (kont)) else (if sx_truthy ((prim_call \"=\" [name; (String \"emitted\")])) then (step_sf_emitted (args) (env) (kont)) else (if sx_truthy ((prim_call \"=\" [name; (String \"dynamic-wind\")])) then (make_cek_value ((sf_dynamic_wind (args) (env))) (env) (kont)) else (if sx_truthy ((prim_call \"=\" [name; (String \"map\")])) then (step_ho_map (args) (env) (kont)) else (if sx_truthy ((prim_call \"=\" [name; (String \"map-indexed\")])) then (step_ho_map_indexed (args) (env) (kont)) else (if sx_truthy ((prim_call \"=\" [name; (String \"filter\")])) then (step_ho_filter (args) (env) (kont)) else (if sx_truthy ((prim_call \"=\" [name; (String \"reduce\")])) then (step_ho_reduce (args) (env) (kont)) else (if sx_truthy ((prim_call \"=\" [name; (String \"some\")])) then (step_ho_some (args) (env) (kont)) else (if sx_truthy ((prim_call \"=\" [name; (String \"every?\")])) then (step_ho_every (args) (env) (kont)) else (if sx_truthy ((prim_call \"=\" [name; (String \"for-each\")])) then (step_ho_for_each (args) (env) (kont)) else (if sx_truthy ((prim_call \"has-key?\" [custom_special_forms; name])) then (make_cek_value ((cek_call ((get (custom_special_forms) (name))) (List [args; env]))) (env) (kont)) else (if sx_truthy ((let _and = (env_has (env) (name)) in if not (sx_truthy _and) then _and else (is_macro ((env_get (env) (name)))))) then (let mac = (env_get (env) (name)) in (make_cek_state ((expand_macro (mac) (args) (env))) (env) (kont))) else (if sx_truthy ((let _and = render_check in if not (sx_truthy _and) then _and else (cek_call (render_check) (List [expr; env])))) then (make_cek_value ((cek_call (render_fn) (List [expr; env]))) (env) (kont)) else (step_eval_call (head) (args) (env) (kont))))))))))))))))))))))))))))))))))))))))))) else (step_eval_call (head) (args) (env) (kont)))))\n\n(* step-sf-if *)\nand step_sf_if args env kont =\n (make_cek_state ((first (args))) (env) ((kont_push ((make_if_frame ((nth (args) ((Number 1.0)))) ((if sx_truthy ((prim_call \">\" [(len (args)); (Number 2.0)])) then (nth (args) ((Number 2.0))) else Nil)) (env))) (kont))))\n\n(* step-sf-when *)\nand step_sf_when args env kont =\n (make_cek_state ((first (args))) (env) ((kont_push ((make_when_frame ((rest (args))) (env))) (kont))))\n\n(* step-sf-begin *)\nand step_sf_begin args env kont =\n (if sx_truthy ((empty_p (args))) then (make_cek_value (Nil) (env) (kont)) else (if sx_truthy ((prim_call \"=\" [(len (args)); (Number 1.0)])) then (make_cek_state ((first (args))) (env) (kont)) else (make_cek_state ((first (args))) (env) ((kont_push ((make_begin_frame ((rest (args))) (env))) (kont))))))\n\n(* step-sf-let *)\nand step_sf_let args env kont =\n let pairs = ref Nil in (if sx_truthy ((prim_call \"=\" [(type_of ((first (args)))); (String \"symbol\")])) then (make_cek_value ((trampoline ((sf_named_let (args) (env))))) (env) (kont)) else (let bindings = (first (args)) in let body = (rest (args)) in let local = (env_extend (env)) in (if sx_truthy ((empty_p (bindings))) then (step_sf_begin (body) (local) (kont)) else (let first_binding = (if sx_truthy ((let _and = (prim_call \"=\" [(type_of ((first (bindings)))); (String \"list\")]) in if not (sx_truthy _and) then _and else (prim_call \"=\" [(len ((first (bindings)))); (Number 2.0)]))) then (first (bindings)) else (List [(first (bindings)); (nth (bindings) ((Number 1.0)))])) in let rest_bindings = (if sx_truthy ((let _and = (prim_call \"=\" [(type_of ((first (bindings)))); (String \"list\")]) in if not (sx_truthy _and) then _and else (prim_call \"=\" [(len ((first (bindings)))); (Number 2.0)]))) then (rest (bindings)) else (let pairs = ref ((List [])) in (let () = ignore ((List.fold_left (fun _acc i -> (pairs := sx_append_b !pairs (List [(nth (bindings) ((prim_call \"*\" [i; (Number 2.0)]))); (nth (bindings) ((prim_call \"inc\" [(prim_call \"*\" [i; (Number 2.0)])])))]); Nil)) Nil (sx_to_list (prim_call \"range\" [(Number 1.0); (prim_call \"/\" [(len (bindings)); (Number 2.0)])])))) in !pairs))) in (let vname = (if sx_truthy ((prim_call \"=\" [(type_of ((first (first_binding)))); (String \"symbol\")])) then (symbol_name ((first (first_binding)))) else (first (first_binding))) in (make_cek_state ((nth (first_binding) ((Number 1.0)))) (local) ((kont_push ((make_let_frame (vname) (rest_bindings) (body) (local))) (kont)))))))))\n\n(* step-sf-define *)\nand step_sf_define args env kont =\n (let name_sym = (first (args)) in let has_effects = (let _and = (prim_call \">=\" [(len (args)); (Number 4.0)]) in if not (sx_truthy _and) then _and else (let _and = (prim_call \"=\" [(type_of ((nth (args) ((Number 1.0))))); (String \"keyword\")]) in if not (sx_truthy _and) then _and else (prim_call \"=\" [(keyword_name ((nth (args) ((Number 1.0))))); (String \"effects\")]))) in let val_idx = (if sx_truthy ((let _and = (prim_call \">=\" [(len (args)); (Number 4.0)]) in if not (sx_truthy _and) then _and else (let _and = (prim_call \"=\" [(type_of ((nth (args) ((Number 1.0))))); (String \"keyword\")]) in if not (sx_truthy _and) then _and else (prim_call \"=\" [(keyword_name ((nth (args) ((Number 1.0))))); (String \"effects\")])))) then (Number 3.0) else (Number 1.0)) in let effect_list = (if sx_truthy ((let _and = (prim_call \">=\" [(len (args)); (Number 4.0)]) in if not (sx_truthy _and) then _and else (let _and = (prim_call \"=\" [(type_of ((nth (args) ((Number 1.0))))); (String \"keyword\")]) in if not (sx_truthy _and) then _and else (prim_call \"=\" [(keyword_name ((nth (args) ((Number 1.0))))); (String \"effects\")])))) then (nth (args) ((Number 2.0))) else Nil) in (make_cek_state ((nth (args) (val_idx))) (env) ((kont_push ((make_define_frame ((symbol_name (name_sym))) (env) (has_effects) (effect_list))) (kont)))))\n\n(* step-sf-set! *)\nand step_sf_set_b args env kont =\n (make_cek_state ((nth (args) ((Number 1.0)))) (env) ((kont_push ((make_set_frame ((symbol_name ((first (args))))) (env))) (kont))))\n\n(* step-sf-and *)\nand step_sf_and args env kont =\n (if sx_truthy ((empty_p (args))) then (make_cek_value ((Bool true)) (env) (kont)) else (make_cek_state ((first (args))) (env) ((kont_push ((make_and_frame ((rest (args))) (env))) (kont)))))\n\n(* step-sf-or *)\nand step_sf_or args env kont =\n (if sx_truthy ((empty_p (args))) then (make_cek_value ((Bool false)) (env) (kont)) else (make_cek_state ((first (args))) (env) ((kont_push ((make_or_frame ((rest (args))) (env))) (kont)))))\n\n(* step-sf-cond *)\nand step_sf_cond args env kont =\n (let scheme_p = (cond_scheme_p (args)) in (if sx_truthy (scheme_p) then (if sx_truthy ((empty_p (args))) then (make_cek_value (Nil) (env) (kont)) else (let clause = (first (args)) in let test = (first (clause)) in (if sx_truthy ((is_else_clause (test))) then (make_cek_state ((nth (clause) ((Number 1.0)))) (env) (kont)) else (make_cek_state (test) (env) ((kont_push ((make_cond_frame (args) (env) ((Bool true)))) (kont))))))) else (if sx_truthy ((prim_call \"<\" [(len (args)); (Number 2.0)])) then (make_cek_value (Nil) (env) (kont)) else (let test = (first (args)) in (if sx_truthy ((is_else_clause (test))) then (make_cek_state ((nth (args) ((Number 1.0)))) (env) (kont)) else (make_cek_state (test) (env) ((kont_push ((make_cond_frame (args) (env) ((Bool false)))) (kont)))))))))\n\n(* step-sf-case *)\nand step_sf_case args env kont =\n (make_cek_state ((first (args))) (env) ((kont_push ((make_case_frame (Nil) ((rest (args))) (env))) (kont))))\n\n(* step-sf-thread-first *)\nand step_sf_thread_first args env kont =\n (make_cek_state ((first (args))) (env) ((kont_push ((make_thread_frame ((rest (args))) (env))) (kont))))\n\n(* step-sf-lambda *)\nand step_sf_lambda args env kont =\n (make_cek_value ((sf_lambda (args) (env))) (env) (kont))\n\n(* step-sf-scope *)\nand step_sf_scope args env kont =\n (let name = (trampoline ((eval_expr ((first (args))) (env)))) in let rest_args = (prim_call \"slice\" [args; (Number 1.0)]) in let val' = ref (Nil) in let body = ref (Nil) in (let () = ignore ((if sx_truthy ((let _and = (prim_call \">=\" [(len (rest_args)); (Number 2.0)]) in if not (sx_truthy _and) then _and else (let _and = (prim_call \"=\" [(type_of ((first (rest_args)))); (String \"keyword\")]) in if not (sx_truthy _and) then _and else (prim_call \"=\" [(keyword_name ((first (rest_args)))); (String \"value\")])))) then (let () = ignore ((val' := (trampoline ((eval_expr ((nth (rest_args) ((Number 1.0)))) (env)))); Nil)) in (body := (prim_call \"slice\" [rest_args; (Number 2.0)]); Nil)) else (body := rest_args; Nil))) in (if sx_truthy ((empty_p (!body))) then (make_cek_value (Nil) (env) (kont)) else (make_cek_state ((first (!body))) (env) ((kont_push ((make_scope_acc_frame (name) (!val') ((rest (!body))) (env))) (kont)))))))\n\n(* step-sf-provide *)\nand step_sf_provide args env kont =\n (let name = (trampoline ((eval_expr ((first (args))) (env)))) in let val' = (trampoline ((eval_expr ((nth (args) ((Number 1.0)))) (env)))) in let body = (prim_call \"slice\" [args; (Number 2.0)]) in (if sx_truthy ((empty_p (body))) then (make_cek_value (Nil) (env) (kont)) else (make_cek_state ((first (body))) (env) ((kont_push ((make_provide_frame (name) (val') ((rest (body))) (env))) (kont))))))\n\n(* step-sf-context *)\nand step_sf_context args env kont =\n (let name = (trampoline ((eval_expr ((first (args))) (env)))) in let default_val = (if sx_truthy ((prim_call \">=\" [(len (args)); (Number 2.0)])) then (trampoline ((eval_expr ((nth (args) ((Number 1.0)))) (env)))) else Nil) in let frame = (kont_find_provide (kont) (name)) in (make_cek_value ((if sx_truthy ((is_nil (frame))) then default_val else (get (frame) ((String \"value\"))))) (env) (kont)))\n\n(* step-sf-emit *)\nand step_sf_emit args env kont =\n (let name = (trampoline ((eval_expr ((first (args))) (env)))) in let val' = (trampoline ((eval_expr ((nth (args) ((Number 1.0)))) (env)))) in let frame = (kont_find_scope_acc (kont) (name)) in (let () = ignore ((if sx_truthy (frame) then (sx_dict_set_b frame (String \"emitted\") (prim_call \"append\" [(get (frame) ((String \"emitted\"))); (List [val'])])) else Nil)) in (make_cek_value (Nil) (env) (kont))))\n\n(* step-sf-emitted *)\nand step_sf_emitted args env kont =\n (let name = (trampoline ((eval_expr ((first (args))) (env)))) in let frame = (kont_find_scope_acc (kont) (name)) in (make_cek_value ((if sx_truthy ((is_nil (frame))) then (List []) else (get (frame) ((String \"emitted\"))))) (env) (kont)))\n\n(* step-sf-reset *)\nand step_sf_reset args env kont =\n (make_cek_state ((first (args))) (env) ((kont_push ((make_reset_frame (env))) (kont))))\n\n(* step-sf-shift *)\nand step_sf_shift args env kont =\n (let k_name = (symbol_name ((first (args)))) in let body = (nth (args) ((Number 1.0))) in let captured_result = (kont_capture_to_reset (kont)) in let captured = (first (captured_result)) in let rest_kont = (nth (captured_result) ((Number 1.0))) in (let k = (make_cek_continuation (captured) (rest_kont)) in (let shift_env = (env_extend (env)) in (let () = ignore ((env_bind shift_env (sx_to_string k_name) k)) in (make_cek_state (body) (shift_env) (rest_kont))))))\n\n(* step-sf-deref *)\nand step_sf_deref args env kont =\n (make_cek_state ((first (args))) (env) ((kont_push ((make_deref_frame (env))) (kont))))\n\n(* cek-call *)\nand cek_call f args =\n (let a = (if sx_truthy ((is_nil (args))) then (List []) else args) in (if sx_truthy ((is_nil (f))) then Nil else (if sx_truthy ((let _or = (is_lambda (f)) in if sx_truthy _or then _or else (is_callable (f)))) then (cek_run ((continue_with_call (f) (a) ((make_env ())) (a) ((List []))))) else Nil)))\n\n(* reactive-shift-deref *)\nand reactive_shift_deref sig' env kont =\n (let scan_result = (kont_capture_to_reactive_reset (kont)) in let captured_frames = (first (scan_result)) in let reset_frame = (nth (scan_result) ((Number 1.0))) in let remaining_kont = (nth (scan_result) ((Number 2.0))) in let update_fn = (get (reset_frame) ((String \"update-fn\"))) in (let sub_disposers = ref ((List [])) in (let subscriber = (NativeFn (\"\\206\\187\", fun _args -> (fun () -> let sub_disposers = ref Nil in (let () = ignore ((List.iter (fun d -> ignore ((cek_call (d) (Nil)))) (sx_to_list !sub_disposers); Nil)) in (let () = ignore ((sub_disposers := (List []); Nil)) in (let new_reset = (make_reactive_reset_frame (env) (update_fn) ((Bool false))) in let new_kont = (prim_call \"concat\" [captured_frames; (List [new_reset]); remaining_kont]) in (with_island_scope ((NativeFn (\"\\206\\187\", fun _args -> match _args with [d] -> (fun d -> let sub_disposers = ref Nil in (sub_disposers := sx_append_b !sub_disposers d; Nil)) d | _ -> Nil))) ((NativeFn (\"\\206\\187\", fun _args -> (fun () -> (cek_run ((make_cek_value ((signal_value (sig'))) (env) (new_kont))))) ())))))))) ())) in (let () = ignore ((signal_add_sub_b (sig') (subscriber))) in (let () = ignore ((register_in_scope ((NativeFn (\"\\206\\187\", fun _args -> (fun () -> (let () = ignore ((signal_remove_sub_b (sig') (subscriber))) in (List.iter (fun d -> ignore ((cek_call (d) (Nil)))) (sx_to_list !sub_disposers); Nil))) ()))))) in (let initial_kont = (prim_call \"concat\" [captured_frames; (List [reset_frame]); remaining_kont]) in (make_cek_value ((signal_value (sig'))) (env) (initial_kont))))))))\n\n(* step-eval-call *)\nand step_eval_call head args env kont =\n (let hname = (if sx_truthy ((prim_call \"=\" [(type_of (head)); (String \"symbol\")])) then (symbol_name (head)) else Nil) in (make_cek_state (head) (env) ((kont_push ((make_arg_frame (Nil) ((List [])) (args) (env) (args) (hname))) (kont)))))\n\n(* ho-form-name? *)\nand ho_form_name_p name =\n (let _or = (prim_call \"=\" [name; (String \"map\")]) in if sx_truthy _or then _or else (let _or = (prim_call \"=\" [name; (String \"map-indexed\")]) in if sx_truthy _or then _or else (let _or = (prim_call \"=\" [name; (String \"filter\")]) in if sx_truthy _or then _or else (let _or = (prim_call \"=\" [name; (String \"reduce\")]) in if sx_truthy _or then _or else (let _or = (prim_call \"=\" [name; (String \"some\")]) in if sx_truthy _or then _or else (let _or = (prim_call \"=\" [name; (String \"every?\")]) in if sx_truthy _or then _or else (prim_call \"=\" [name; (String \"for-each\")])))))))\n\n(* ho-fn? *)\nand ho_fn_p v =\n (let _or = (is_callable (v)) in if sx_truthy _or then _or else (is_lambda (v)))\n\n(* ho-swap-args *)\nand ho_swap_args ho_type evaled =\n (if sx_truthy ((prim_call \"=\" [ho_type; (String \"reduce\")])) then (let a = (first (evaled)) in let b = (nth (evaled) ((Number 1.0))) in (if sx_truthy ((let _and = (Bool (not (sx_truthy ((ho_fn_p (a)))))) in if not (sx_truthy _and) then _and else (ho_fn_p (b)))) then (List [b; (nth (evaled) ((Number 2.0))); a]) else evaled)) else (let a = (first (evaled)) in let b = (nth (evaled) ((Number 1.0))) in (if sx_truthy ((let _and = (Bool (not (sx_truthy ((ho_fn_p (a)))))) in if not (sx_truthy _and) then _and else (ho_fn_p (b)))) then (List [b; a]) else evaled)))\n\n(* ho-setup-dispatch *)\nand ho_setup_dispatch ho_type evaled env kont =\n (let ordered = (ho_swap_args (ho_type) (evaled)) in (let f = (first (ordered)) in (if sx_truthy ((prim_call \"=\" [ho_type; (String \"map\")])) then (let coll = (nth (ordered) ((Number 1.0))) in (if sx_truthy ((empty_p (coll))) then (make_cek_value ((List [])) (env) (kont)) else (continue_with_call (f) ((List [(first (coll))])) (env) ((List [])) ((kont_push ((make_map_frame (f) ((rest (coll))) ((List [])) (env))) (kont)))))) else (if sx_truthy ((prim_call \"=\" [ho_type; (String \"map-indexed\")])) then (let coll = (nth (ordered) ((Number 1.0))) in (if sx_truthy ((empty_p (coll))) then (make_cek_value ((List [])) (env) (kont)) else (continue_with_call (f) ((List [(Number 0.0); (first (coll))])) (env) ((List [])) ((kont_push ((make_map_indexed_frame (f) ((rest (coll))) ((List [])) (env))) (kont)))))) else (if sx_truthy ((prim_call \"=\" [ho_type; (String \"filter\")])) then (let coll = (nth (ordered) ((Number 1.0))) in (if sx_truthy ((empty_p (coll))) then (make_cek_value ((List [])) (env) (kont)) else (continue_with_call (f) ((List [(first (coll))])) (env) ((List [])) ((kont_push ((make_filter_frame (f) ((rest (coll))) ((List [])) ((first (coll))) (env))) (kont)))))) else (if sx_truthy ((prim_call \"=\" [ho_type; (String \"reduce\")])) then (let init = (nth (ordered) ((Number 1.0))) in let coll = (nth (ordered) ((Number 2.0))) in (if sx_truthy ((empty_p (coll))) then (make_cek_value (init) (env) (kont)) else (continue_with_call (f) ((List [init; (first (coll))])) (env) ((List [])) ((kont_push ((make_reduce_frame (f) ((rest (coll))) (env))) (kont)))))) else (if sx_truthy ((prim_call \"=\" [ho_type; (String \"some\")])) then (let coll = (nth (ordered) ((Number 1.0))) in (if sx_truthy ((empty_p (coll))) then (make_cek_value ((Bool false)) (env) (kont)) else (continue_with_call (f) ((List [(first (coll))])) (env) ((List [])) ((kont_push ((make_some_frame (f) ((rest (coll))) (env))) (kont)))))) else (if sx_truthy ((prim_call \"=\" [ho_type; (String \"every\")])) then (let coll = (nth (ordered) ((Number 1.0))) in (if sx_truthy ((empty_p (coll))) then (make_cek_value ((Bool true)) (env) (kont)) else (continue_with_call (f) ((List [(first (coll))])) (env) ((List [])) ((kont_push ((make_every_frame (f) ((rest (coll))) (env))) (kont)))))) else (if sx_truthy ((prim_call \"=\" [ho_type; (String \"for-each\")])) then (let coll = (nth (ordered) ((Number 1.0))) in (if sx_truthy ((empty_p (coll))) then (make_cek_value (Nil) (env) (kont)) else (continue_with_call (f) ((List [(first (coll))])) (env) ((List [])) ((kont_push ((make_for_each_frame (f) ((rest (coll))) (env))) (kont)))))) else (raise (Eval_error (value_to_str (String (sx_str [(String \"Unknown HO type: \"); ho_type]))))))))))))))\n\n(* step-ho-map *)\nand step_ho_map args env kont =\n (make_cek_state ((first (args))) (env) ((kont_push ((make_ho_setup_frame ((String \"map\")) ((rest (args))) ((List [])) (env))) (kont))))\n\n(* step-ho-map-indexed *)\nand step_ho_map_indexed args env kont =\n (make_cek_state ((first (args))) (env) ((kont_push ((make_ho_setup_frame ((String \"map-indexed\")) ((rest (args))) ((List [])) (env))) (kont))))\n\n(* step-ho-filter *)\nand step_ho_filter args env kont =\n (make_cek_state ((first (args))) (env) ((kont_push ((make_ho_setup_frame ((String \"filter\")) ((rest (args))) ((List [])) (env))) (kont))))\n\n(* step-ho-reduce *)\nand step_ho_reduce args env kont =\n (make_cek_state ((first (args))) (env) ((kont_push ((make_ho_setup_frame ((String \"reduce\")) ((rest (args))) ((List [])) (env))) (kont))))\n\n(* step-ho-some *)\nand step_ho_some args env kont =\n (make_cek_state ((first (args))) (env) ((kont_push ((make_ho_setup_frame ((String \"some\")) ((rest (args))) ((List [])) (env))) (kont))))\n\n(* step-ho-every *)\nand step_ho_every args env kont =\n (make_cek_state ((first (args))) (env) ((kont_push ((make_ho_setup_frame ((String \"every\")) ((rest (args))) ((List [])) (env))) (kont))))\n\n(* step-ho-for-each *)\nand step_ho_for_each args env kont =\n (make_cek_state ((first (args))) (env) ((kont_push ((make_ho_setup_frame ((String \"for-each\")) ((rest (args))) ((List [])) (env))) (kont))))\n\n(* step-continue *)\nand step_continue state =\n (let value = (cek_value (state)) in let env = (cek_env (state)) in let kont = (cek_kont (state)) in (if sx_truthy ((kont_empty_p (kont))) then state else (let frame = (kont_top (kont)) in let rest_k = (kont_pop (kont)) in let ft = (frame_type (frame)) in (if sx_truthy ((prim_call \"=\" [ft; (String \"if\")])) then (if sx_truthy ((let _and = value in if not (sx_truthy _and) then _and else (Bool (not (sx_truthy ((is_nil (value)))))))) then (make_cek_state ((get (frame) ((String \"then\")))) ((get (frame) ((String \"env\")))) (rest_k)) else (if sx_truthy ((is_nil ((get (frame) ((String \"else\")))))) then (make_cek_value (Nil) (env) (rest_k)) else (make_cek_state ((get (frame) ((String \"else\")))) ((get (frame) ((String \"env\")))) (rest_k)))) else (if sx_truthy ((prim_call \"=\" [ft; (String \"when\")])) then (if sx_truthy ((let _and = value in if not (sx_truthy _and) then _and else (Bool (not (sx_truthy ((is_nil (value)))))))) then (let body = (get (frame) ((String \"body\"))) in let fenv = (get (frame) ((String \"env\"))) in (if sx_truthy ((empty_p (body))) then (make_cek_value (Nil) (fenv) (rest_k)) else (if sx_truthy ((prim_call \"=\" [(len (body)); (Number 1.0)])) then (make_cek_state ((first (body))) (fenv) (rest_k)) else (make_cek_state ((first (body))) (fenv) ((kont_push ((make_begin_frame ((rest (body))) (fenv))) (rest_k))))))) else (make_cek_value (Nil) (env) (rest_k))) else (if sx_truthy ((prim_call \"=\" [ft; (String \"begin\")])) then (let remaining = (get (frame) ((String \"remaining\"))) in let fenv = (get (frame) ((String \"env\"))) in (if sx_truthy ((empty_p (remaining))) then (make_cek_value (value) (fenv) (rest_k)) else (if sx_truthy ((prim_call \"=\" [(len (remaining)); (Number 1.0)])) then (make_cek_state ((first (remaining))) (fenv) (rest_k)) else (make_cek_state ((first (remaining))) (fenv) ((kont_push ((make_begin_frame ((rest (remaining))) (fenv))) (rest_k))))))) else (if sx_truthy ((prim_call \"=\" [ft; (String \"let\")])) then (let name = (get (frame) ((String \"name\"))) in let remaining = (get (frame) ((String \"remaining\"))) in let body = (get (frame) ((String \"body\"))) in let local = (get (frame) ((String \"env\"))) in (let () = ignore ((env_bind local (sx_to_string name) value)) in (if sx_truthy ((empty_p (remaining))) then (step_sf_begin (body) (local) (rest_k)) else (let next_binding = (first (remaining)) in let vname = (if sx_truthy ((prim_call \"=\" [(type_of ((first (next_binding)))); (String \"symbol\")])) then (symbol_name ((first (next_binding)))) else (first (next_binding))) in (make_cek_state ((nth (next_binding) ((Number 1.0)))) (local) ((kont_push ((make_let_frame (vname) ((rest (remaining))) (body) (local))) (rest_k)))))))) else (if sx_truthy ((prim_call \"=\" [ft; (String \"define\")])) then (let name = (get (frame) ((String \"name\"))) in let fenv = (get (frame) ((String \"env\"))) in let has_effects = (get (frame) ((String \"has-effects\"))) in let effect_list = (get (frame) ((String \"effect-list\"))) in (let () = ignore ((if sx_truthy ((let _and = (is_lambda (value)) in if not (sx_truthy _and) then _and else (is_nil ((lambda_name (value)))))) then (set_lambda_name value (sx_to_string name)) else Nil)) in (let () = ignore ((env_bind fenv (sx_to_string name) value)) in (let () = ignore ((if sx_truthy (has_effects) then (let effect_names = (if sx_truthy ((prim_call \"=\" [(type_of (effect_list)); (String \"list\")])) then (List (List.map (fun e -> (if sx_truthy ((prim_call \"=\" [(type_of (e)); (String \"symbol\")])) then (symbol_name (e)) else (String (sx_str [e])))) (sx_to_list effect_list))) else (List [(String (sx_str [effect_list]))])) in let effect_anns = (if sx_truthy ((env_has (fenv) ((String \"*effect-annotations*\")))) then (env_get (fenv) ((String \"*effect-annotations*\"))) else (Dict (Hashtbl.create 0))) in (let () = ignore ((sx_dict_set_b effect_anns name effect_names)) in (env_bind fenv (sx_to_string (String \"*effect-annotations*\")) effect_anns))) else Nil)) in (make_cek_value (value) (fenv) (rest_k)))))) else (if sx_truthy ((prim_call \"=\" [ft; (String \"set\")])) then (let name = (get (frame) ((String \"name\"))) in let fenv = (get (frame) ((String \"env\"))) in (let () = ignore ((env_set fenv (sx_to_string name) value)) in (make_cek_value (value) (env) (rest_k)))) else (if sx_truthy ((prim_call \"=\" [ft; (String \"and\")])) then (if sx_truthy ((Bool (not (sx_truthy (value))))) then (make_cek_value (value) (env) (rest_k)) else (let remaining = (get (frame) ((String \"remaining\"))) in (if sx_truthy ((empty_p (remaining))) then (make_cek_value (value) (env) (rest_k)) else (make_cek_state ((first (remaining))) ((get (frame) ((String \"env\")))) ((if sx_truthy ((prim_call \"=\" [(len (remaining)); (Number 1.0)])) then rest_k else (kont_push ((make_and_frame ((rest (remaining))) ((get (frame) ((String \"env\")))))) (rest_k)))))))) else (if sx_truthy ((prim_call \"=\" [ft; (String \"or\")])) then (if sx_truthy (value) then (make_cek_value (value) (env) (rest_k)) else (let remaining = (get (frame) ((String \"remaining\"))) in (if sx_truthy ((empty_p (remaining))) then (make_cek_value ((Bool false)) (env) (rest_k)) else (make_cek_state ((first (remaining))) ((get (frame) ((String \"env\")))) ((if sx_truthy ((prim_call \"=\" [(len (remaining)); (Number 1.0)])) then rest_k else (kont_push ((make_or_frame ((rest (remaining))) ((get (frame) ((String \"env\")))))) (rest_k)))))))) else (if sx_truthy ((prim_call \"=\" [ft; (String \"cond\")])) then (let remaining = (get (frame) ((String \"remaining\"))) in let fenv = (get (frame) ((String \"env\"))) in let scheme_p = (get (frame) ((String \"scheme\"))) in (if sx_truthy (scheme_p) then (if sx_truthy (value) then (make_cek_state ((nth ((first (remaining))) ((Number 1.0)))) (fenv) (rest_k)) else (let next_clauses = (rest (remaining)) in (if sx_truthy ((empty_p (next_clauses))) then (make_cek_value (Nil) (fenv) (rest_k)) else (let next_clause = (first (next_clauses)) in let next_test = (first (next_clause)) in (if sx_truthy ((is_else_clause (next_test))) then (make_cek_state ((nth (next_clause) ((Number 1.0)))) (fenv) (rest_k)) else (make_cek_state (next_test) (fenv) ((kont_push ((make_cond_frame (next_clauses) (fenv) ((Bool true)))) (rest_k))))))))) else (if sx_truthy (value) then (make_cek_state ((nth (remaining) ((Number 1.0)))) (fenv) (rest_k)) else (let next = (prim_call \"slice\" [remaining; (Number 2.0)]) in (if sx_truthy ((prim_call \"<\" [(len (next)); (Number 2.0)])) then (make_cek_value (Nil) (fenv) (rest_k)) else (let next_test = (first (next)) in (if sx_truthy ((is_else_clause (next_test))) then (make_cek_state ((nth (next) ((Number 1.0)))) (fenv) (rest_k)) else (make_cek_state (next_test) (fenv) ((kont_push ((make_cond_frame (next) (fenv) ((Bool false)))) (rest_k))))))))))) else (if sx_truthy ((prim_call \"=\" [ft; (String \"case\")])) then (let match_val = (get (frame) ((String \"match-val\"))) in let remaining = (get (frame) ((String \"remaining\"))) in let fenv = (get (frame) ((String \"env\"))) in (if sx_truthy ((is_nil (match_val))) then (sf_case_step_loop (value) (remaining) (fenv) (rest_k)) else (sf_case_step_loop (match_val) (remaining) (fenv) (rest_k)))) else (if sx_truthy ((prim_call \"=\" [ft; (String \"thread\")])) then (let remaining = (get (frame) ((String \"remaining\"))) in let fenv = (get (frame) ((String \"env\"))) in (if sx_truthy ((empty_p (remaining))) then (make_cek_value (value) (fenv) (rest_k)) else (let form = (first (remaining)) in let rest_forms = (rest (remaining)) in let new_kont = (if sx_truthy ((empty_p ((rest (remaining))))) then rest_k else (kont_push ((make_thread_frame ((rest (remaining))) (fenv))) (rest_k))) in (if sx_truthy ((let _and = (prim_call \"=\" [(type_of (form)); (String \"list\")]) in if not (sx_truthy _and) then _and else (let _and = (Bool (not (sx_truthy ((empty_p (form)))))) in if not (sx_truthy _and) then _and else (let _and = (prim_call \"=\" [(type_of ((first (form)))); (String \"symbol\")]) in if not (sx_truthy _and) then _and else (ho_form_name_p ((symbol_name ((first (form)))))))))) then (make_cek_state ((cons ((first (form))) ((cons ((List [(Symbol \"quote\"); value])) ((rest (form))))))) (fenv) (new_kont)) else (let result' = (if sx_truthy ((prim_call \"=\" [(type_of (form)); (String \"list\")])) then (let f = (trampoline ((eval_expr ((first (form))) (fenv)))) in let rargs = (List (List.map (fun a -> (trampoline ((eval_expr (a) (fenv))))) (sx_to_list (rest (form))))) in let all_args = (cons (value) (rargs)) in (if sx_truthy ((let _and = (is_callable (f)) in if not (sx_truthy _and) then _and else (Bool (not (sx_truthy ((is_lambda (f)))))))) then (sx_apply f all_args) else (if sx_truthy ((is_lambda (f))) then (trampoline ((call_lambda (f) (all_args) (fenv)))) else (raise (Eval_error (value_to_str (String (sx_str [(String \"-> form not callable: \"); (inspect (f))])))))))) else (let f = (trampoline ((eval_expr (form) (fenv)))) in (if sx_truthy ((let _and = (is_callable (f)) in if not (sx_truthy _and) then _and else (Bool (not (sx_truthy ((is_lambda (f)))))))) then (cek_call (f) (List [value])) else (if sx_truthy ((is_lambda (f))) then (trampoline ((call_lambda (f) ((List [value])) (fenv)))) else (raise (Eval_error (value_to_str (String (sx_str [(String \"-> form not callable: \"); (inspect (f))]))))))))) in (if sx_truthy ((empty_p (rest_forms))) then (make_cek_value (result') (fenv) (rest_k)) else (make_cek_value (result') (fenv) ((kont_push ((make_thread_frame (rest_forms) (fenv))) (rest_k)))))))))) else (if sx_truthy ((prim_call \"=\" [ft; (String \"arg\")])) then (let f = (get (frame) ((String \"f\"))) in let evaled = (get (frame) ((String \"evaled\"))) in let remaining = (get (frame) ((String \"remaining\"))) in let fenv = (get (frame) ((String \"env\"))) in let raw_args = (get (frame) ((String \"raw-args\"))) in let hname = (get (frame) ((String \"head-name\"))) in (if sx_truthy ((is_nil (f))) then (let () = ignore ((if sx_truthy ((let _and = !_strict_ref in if not (sx_truthy _and) then _and else hname)) then (strict_check_args (hname) ((List []))) else Nil)) in (if sx_truthy ((empty_p (remaining))) then (continue_with_call (value) ((List [])) (fenv) (raw_args) (rest_k)) else (make_cek_state ((first (remaining))) (fenv) ((kont_push ((make_arg_frame (value) ((List [])) ((rest (remaining))) (fenv) (raw_args) (hname))) (rest_k)))))) else (let new_evaled = (prim_call \"append\" [evaled; (List [value])]) in (if sx_truthy ((empty_p (remaining))) then (let () = ignore ((if sx_truthy ((let _and = !_strict_ref in if not (sx_truthy _and) then _and else hname)) then (strict_check_args (hname) (new_evaled)) else Nil)) in (continue_with_call (f) (new_evaled) (fenv) (raw_args) (rest_k))) else (make_cek_state ((first (remaining))) (fenv) ((kont_push ((make_arg_frame (f) (new_evaled) ((rest (remaining))) (fenv) (raw_args) (hname))) (rest_k)))))))) else (if sx_truthy ((prim_call \"=\" [ft; (String \"dict\")])) then (let remaining = (get (frame) ((String \"remaining\"))) in let results = (get (frame) ((String \"results\"))) in let fenv = (get (frame) ((String \"env\"))) in (let last_result = (last (results)) in let completed = (prim_call \"append\" [(prim_call \"slice\" [results; (Number 0.0); (prim_call \"dec\" [(len (results))])]); (List [(List [(first (last_result)); value])])]) in (if sx_truthy ((empty_p (remaining))) then (let d = (Dict (Hashtbl.create 0)) in (let () = ignore ((List.iter (fun pair -> ignore ((sx_dict_set_b d (first (pair)) (nth (pair) ((Number 1.0)))))) (sx_to_list completed); Nil)) in (make_cek_value (d) (fenv) (rest_k)))) else (let next_entry = (first (remaining)) in (make_cek_state ((nth (next_entry) ((Number 1.0)))) (fenv) ((kont_push ((make_dict_frame ((rest (remaining))) ((prim_call \"append\" [completed; (List [(List [(first (next_entry))])])])) (fenv))) (rest_k)))))))) else (if sx_truthy ((prim_call \"=\" [ft; (String \"ho-setup\")])) then (let ho_type = (get (frame) ((String \"ho-type\"))) in let remaining = (get (frame) ((String \"remaining\"))) in let evaled = (prim_call \"append\" [(get (frame) ((String \"evaled\"))); (List [value])]) in let fenv = (get (frame) ((String \"env\"))) in (if sx_truthy ((empty_p (remaining))) then (ho_setup_dispatch (ho_type) (evaled) (fenv) (rest_k)) else (make_cek_state ((first (remaining))) (fenv) ((kont_push ((make_ho_setup_frame (ho_type) ((rest (remaining))) (evaled) (fenv))) (rest_k)))))) else (if sx_truthy ((prim_call \"=\" [ft; (String \"reset\")])) then (make_cek_value (value) (env) (rest_k)) else (if sx_truthy ((prim_call \"=\" [ft; (String \"deref\")])) then (let val' = value in let fenv = (get (frame) ((String \"env\"))) in (if sx_truthy ((Bool (not (sx_truthy ((is_signal (val'))))))) then (make_cek_value (val') (fenv) (rest_k)) else (if sx_truthy ((has_reactive_reset_frame_p (rest_k))) then (reactive_shift_deref (val') (fenv) (rest_k)) else (let () = ignore ((let ctx = (sx_context ((String \"sx-reactive\")) (Nil)) in (if sx_truthy (ctx) then (let dep_list = ref ((get (ctx) ((String \"deps\")))) in let notify_fn = (get (ctx) ((String \"notify\"))) in (if sx_truthy ((Bool (not (sx_truthy ((prim_call \"contains?\" [!dep_list; val'])))))) then (let () = ignore ((dep_list := sx_append_b !dep_list val'; Nil)) in (signal_add_sub_b (val') (notify_fn))) else Nil)) else Nil))) in (make_cek_value ((signal_value (val'))) (fenv) (rest_k)))))) else (if sx_truthy ((prim_call \"=\" [ft; (String \"reactive-reset\")])) then (let update_fn = (get (frame) ((String \"update-fn\"))) in let first_p = (get (frame) ((String \"first-render\"))) in (let () = ignore ((if sx_truthy ((let _and = update_fn in if not (sx_truthy _and) then _and else (Bool (not (sx_truthy (first_p)))))) then (cek_call (update_fn) ((List [value]))) else Nil)) in (make_cek_value (value) (env) (rest_k)))) else (if sx_truthy ((prim_call \"=\" [ft; (String \"scope\")])) then (let name = (get (frame) ((String \"name\"))) in let remaining = (get (frame) ((String \"remaining\"))) in let fenv = (get (frame) ((String \"env\"))) in (if sx_truthy ((empty_p (remaining))) then (let () = ignore ((scope_pop (name))) in (make_cek_value (value) (fenv) (rest_k))) else (make_cek_state ((first (remaining))) (fenv) ((kont_push ((make_scope_frame (name) ((rest (remaining))) (fenv))) (rest_k)))))) else (if sx_truthy ((prim_call \"=\" [ft; (String \"provide\")])) then (let remaining = (get (frame) ((String \"remaining\"))) in let fenv = (get (frame) ((String \"env\"))) in (if sx_truthy ((empty_p (remaining))) then (make_cek_value (value) (fenv) (rest_k)) else (make_cek_state ((first (remaining))) (fenv) ((kont_push ((make_provide_frame ((get (frame) ((String \"name\")))) ((get (frame) ((String \"value\")))) ((rest (remaining))) (fenv))) (rest_k)))))) else (if sx_truthy ((prim_call \"=\" [ft; (String \"scope-acc\")])) then (let remaining = (get (frame) ((String \"remaining\"))) in let fenv = (get (frame) ((String \"env\"))) in (if sx_truthy ((empty_p (remaining))) then (make_cek_value (value) (fenv) (rest_k)) else (make_cek_state ((first (remaining))) (fenv) ((kont_push ((let new_frame = (make_scope_acc_frame ((get (frame) ((String \"name\")))) ((get (frame) ((String \"value\")))) ((rest (remaining))) (fenv)) in (let () = ignore ((sx_dict_set_b new_frame (String \"emitted\") (get (frame) ((String \"emitted\"))))) in new_frame))) (rest_k)))))) else (if sx_truthy ((prim_call \"=\" [ft; (String \"map\")])) then (let f = (get (frame) ((String \"f\"))) in let remaining = (get (frame) ((String \"remaining\"))) in let results = (get (frame) ((String \"results\"))) in let indexed = (get (frame) ((String \"indexed\"))) in let fenv = (get (frame) ((String \"env\"))) in (let new_results = (prim_call \"append\" [results; (List [value])]) in (if sx_truthy ((empty_p (remaining))) then (make_cek_value (new_results) (fenv) (rest_k)) else (let call_args = (if sx_truthy (indexed) then (List [(len (new_results)); (first (remaining))]) else (List [(first (remaining))])) in let next_frame = (if sx_truthy (indexed) then (make_map_indexed_frame (f) ((rest (remaining))) (new_results) (fenv)) else (make_map_frame (f) ((rest (remaining))) (new_results) (fenv))) in (continue_with_call (f) (call_args) (fenv) ((List [])) ((kont_push (next_frame) (rest_k)))))))) else (if sx_truthy ((prim_call \"=\" [ft; (String \"filter\")])) then (let f = (get (frame) ((String \"f\"))) in let remaining = (get (frame) ((String \"remaining\"))) in let results = (get (frame) ((String \"results\"))) in let current_item = (get (frame) ((String \"current-item\"))) in let fenv = (get (frame) ((String \"env\"))) in (let new_results = (if sx_truthy (value) then (prim_call \"append\" [results; (List [current_item])]) else results) in (if sx_truthy ((empty_p (remaining))) then (make_cek_value (new_results) (fenv) (rest_k)) else (continue_with_call (f) ((List [(first (remaining))])) (fenv) ((List [])) ((kont_push ((make_filter_frame (f) ((rest (remaining))) (new_results) ((first (remaining))) (fenv))) (rest_k))))))) else (if sx_truthy ((prim_call \"=\" [ft; (String \"reduce\")])) then (let f = (get (frame) ((String \"f\"))) in let remaining = (get (frame) ((String \"remaining\"))) in let fenv = (get (frame) ((String \"env\"))) in (if sx_truthy ((empty_p (remaining))) then (make_cek_value (value) (fenv) (rest_k)) else (continue_with_call (f) ((List [value; (first (remaining))])) (fenv) ((List [])) ((kont_push ((make_reduce_frame (f) ((rest (remaining))) (fenv))) (rest_k)))))) else (if sx_truthy ((prim_call \"=\" [ft; (String \"for-each\")])) then (let f = (get (frame) ((String \"f\"))) in let remaining = (get (frame) ((String \"remaining\"))) in let fenv = (get (frame) ((String \"env\"))) in (if sx_truthy ((empty_p (remaining))) then (make_cek_value (Nil) (fenv) (rest_k)) else (continue_with_call (f) ((List [(first (remaining))])) (fenv) ((List [])) ((kont_push ((make_for_each_frame (f) ((rest (remaining))) (fenv))) (rest_k)))))) else (if sx_truthy ((prim_call \"=\" [ft; (String \"some\")])) then (let f = (get (frame) ((String \"f\"))) in let remaining = (get (frame) ((String \"remaining\"))) in let fenv = (get (frame) ((String \"env\"))) in (if sx_truthy (value) then (make_cek_value (value) (fenv) (rest_k)) else (if sx_truthy ((empty_p (remaining))) then (make_cek_value ((Bool false)) (fenv) (rest_k)) else (continue_with_call (f) ((List [(first (remaining))])) (fenv) ((List [])) ((kont_push ((make_some_frame (f) ((rest (remaining))) (fenv))) (rest_k))))))) else (if sx_truthy ((prim_call \"=\" [ft; (String \"every\")])) then (let f = (get (frame) ((String \"f\"))) in let remaining = (get (frame) ((String \"remaining\"))) in let fenv = (get (frame) ((String \"env\"))) in (if sx_truthy ((Bool (not (sx_truthy (value))))) then (make_cek_value ((Bool false)) (fenv) (rest_k)) else (if sx_truthy ((empty_p (remaining))) then (make_cek_value ((Bool true)) (fenv) (rest_k)) else (continue_with_call (f) ((List [(first (remaining))])) (fenv) ((List [])) ((kont_push ((make_every_frame (f) ((rest (remaining))) (fenv))) (rest_k))))))) else (raise (Eval_error (value_to_str (String (sx_str [(String \"Unknown frame type: \"); ft]))))))))))))))))))))))))))))))))))\n\n(* continue-with-call *)\nand continue_with_call f args env raw_args kont =\n (if sx_truthy ((continuation_p (f))) then (let arg = (if sx_truthy ((empty_p (args))) then Nil else (first (args))) in let cont_data = (continuation_data (f)) in (let captured = (get (cont_data) ((String \"captured\"))) in (let result' = (cek_run ((make_cek_value (arg) (env) (captured)))) in (make_cek_value (result') (env) (kont))))) else (if sx_truthy ((let _and = (is_callable (f)) in if not (sx_truthy _and) then _and else (let _and = (Bool (not (sx_truthy ((is_lambda (f)))))) in if not (sx_truthy _and) then _and else (let _and = (Bool (not (sx_truthy ((is_component (f)))))) in if not (sx_truthy _and) then _and else (Bool (not (sx_truthy ((is_island (f)))))))))) then (make_cek_value ((sx_apply f args)) (env) (kont)) else (if sx_truthy ((is_lambda (f))) then (let local = (env_merge ((lambda_closure (f))) (env)) in let () = bind_lambda_params f args local in (match !jit_call_hook, f with | Some hook, Lambda l when l.l_name <> None -> let args_list = match args with List a | ListRef { contents = a } -> a | _ -> [] in (match hook f args_list with Some result -> make_cek_value result local kont | None -> make_cek_state (lambda_body f) local kont) | _ -> make_cek_state ((lambda_body (f))) (local) (kont))) else (if sx_truthy ((let _or = (is_component (f)) in if sx_truthy _or then _or else (is_island (f)))) then (let parsed = (parse_keyword_args (raw_args) (env)) in let kwargs = (first (parsed)) in let children = (nth (parsed) ((Number 1.0))) in let local = (env_merge ((component_closure (f))) (env)) in (let () = ignore ((List.iter (fun p -> ignore ((env_bind local (sx_to_string p) (let _or = (dict_get (kwargs) (p)) in if sx_truthy _or then _or else Nil)))) (sx_to_list (component_params (f))); Nil)) in (let () = ignore ((if sx_truthy ((component_has_children (f))) then (env_bind local (sx_to_string (String \"children\")) children) else Nil)) in (make_cek_state ((component_body (f))) (local) (kont))))) else (raise (Eval_error (value_to_str (String (sx_str [(String \"Not callable: \"); (inspect (f))])))))))))\n\n(* sf-case-step-loop *)\nand sf_case_step_loop match_val clauses env kont =\n (if sx_truthy ((prim_call \"<\" [(len (clauses)); (Number 2.0)])) then (make_cek_value (Nil) (env) (kont)) else (let test = (first (clauses)) in let body = (nth (clauses) ((Number 1.0))) in (if sx_truthy ((is_else_clause (test))) then (make_cek_state (body) (env) (kont)) else (let test_val = (trampoline ((eval_expr (test) (env)))) in (if sx_truthy ((prim_call \"=\" [match_val; test_val])) then (make_cek_state (body) (env) (kont)) else (sf_case_step_loop (match_val) ((prim_call \"slice\" [clauses; (Number 2.0)])) (env) (kont)))))))\n\n(* eval-expr-cek *)\nand eval_expr_cek expr env =\n (cek_run ((make_cek_state (expr) (env) ((List [])))))\n\n(* trampoline-cek *)\nand trampoline_cek val' =\n (if sx_truthy ((is_thunk (val'))) then (eval_expr_cek ((thunk_expr (val'))) ((thunk_env (val')))) else val')\n\n(* eval-expr *)\nand eval_expr expr env =\n (cek_run ((make_cek_state (expr) (env) ((List [])))))\n\n\n(* Wire up trampoline to resolve thunks via the CEK machine *)\nlet () = trampoline_fn := (fun v ->\n match v with\n | Thunk (expr, env) -> eval_expr expr (Env env)\n | _ -> v)\n\n(* Wire up the primitives trampoline so call_any in HO forms resolves Thunks *)\nlet () = Sx_primitives._sx_trampoline_fn := !trampoline_fn\n\n(* Wire up as_number trampoline so arithmetic on leaked thunks auto-resolves *)\nlet () = Sx_primitives.trampoline_hook := !trampoline_fn\n\n(* Override recursive cek_run with iterative loop *)\nlet cek_run_iterative state =\n let s = ref state in\n while not (match cek_terminal_p !s with Bool true -> true | _ -> false) do\n s := cek_step !s\n done;\n cek_value !s\n\n\n\n","(* generated code *)"],"names":[],"mappings":"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","ignoreList":[1]}},{"offset":{"line":0,"column":190901},"map":{"version":3,"sources":["/workspace_root/lib/sx_vm.ml","/builtin/blackbox.ml"],"sourcesContent":["(** SX bytecode VM — stack-based interpreter.\n\n Executes bytecode produced by compiler.sx.\n Designed for speed: array-based stack, direct dispatch,\n no allocation per step (unlike the CEK machine).\n\n This is the platform-native execution engine. The same bytecode\n runs on all platforms (OCaml, JS, WASM).\n\n VM types (vm_code, vm_upvalue_cell, vm_closure) are defined in\n sx_types.ml to share the mutual recursion block with [value]. *)\n\nopen Sx_types\n\n(** Call frame — one per function invocation. *)\ntype frame = {\n closure : vm_closure;\n mutable ip : int;\n base : int; (* base index in value stack for locals *)\n local_cells : (int, vm_upvalue_cell) Hashtbl.t; (* slot → shared cell for captured locals *)\n}\n\n(** VM state. *)\ntype vm = {\n mutable stack : value array;\n mutable sp : int;\n mutable frames : frame list;\n globals : (string, value) Hashtbl.t; (* live reference to kernel env *)\n}\n\n(** Forward reference for JIT compilation — set after definition. *)\nlet jit_compile_ref : (lambda -> (string, value) Hashtbl.t -> vm_closure option) ref =\n ref (fun _ _ -> None)\n\n(** Sentinel closure indicating JIT compilation was attempted and failed.\n Prevents retrying compilation on every call. *)\nlet jit_failed_sentinel = {\n vm_code = { vc_arity = -1; vc_locals = 0; vc_bytecode = [||]; vc_constants = [||] };\n vm_upvalues = [||]; vm_name = Some \"__jit_failed__\"; vm_env_ref = Hashtbl.create 0; vm_closure_env = None\n}\n\nlet is_jit_failed cl = cl.vm_code.vc_arity = -1\n\nlet create globals =\n { stack = Array.make 4096 Nil; sp = 0; frames = []; globals }\n\n(** Stack ops — inlined for speed. *)\nlet push vm v =\n if vm.sp >= Array.length vm.stack then begin\n let ns = Array.make (vm.sp * 2) Nil in\n Array.blit vm.stack 0 ns 0 vm.sp;\n vm.stack <- ns\n end;\n vm.stack.(vm.sp) <- v;\n vm.sp <- vm.sp + 1\n\nlet[@inline] pop vm =\n vm.sp <- vm.sp - 1;\n vm.stack.(vm.sp)\n\nlet[@inline] peek vm = vm.stack.(vm.sp - 1)\n\n(** Read operands. *)\nlet[@inline] read_u8 f =\n let v = f.closure.vm_code.vc_bytecode.(f.ip) in\n f.ip <- f.ip + 1; v\n\nlet[@inline] read_u16 f =\n let lo = f.closure.vm_code.vc_bytecode.(f.ip) in\n let hi = f.closure.vm_code.vc_bytecode.(f.ip + 1) in\n f.ip <- f.ip + 2;\n lo lor (hi lsl 8)\n\nlet[@inline] read_i16 f =\n let v = read_u16 f in\n if v >= 32768 then v - 65536 else v\n\n(** Wrap a VM closure as an SX value (NativeFn). *)\nlet closure_to_value cl =\n NativeFn (\"vm:\" ^ (match cl.vm_name with Some n -> n | None -> \"anon\"),\n fun args -> raise (Eval_error (\"VM_CLOSURE_CALL:\" ^ String.concat \",\" (List.map Sx_runtime.value_to_str args))))\n (* Placeholder — actual calls go through vm_call below *)\n\nlet _vm_insn_count = ref 0\nlet _vm_call_count = ref 0\nlet _vm_cek_count = ref 0\nlet vm_reset_counters () = _vm_insn_count := 0; _vm_call_count := 0; _vm_cek_count := 0\nlet vm_report_counters () =\n Printf.eprintf \"[vm-perf] insns=%d calls=%d cek_fallbacks=%d\\n%!\"\n !_vm_insn_count !_vm_call_count !_vm_cek_count\n\n(** Push a VM closure frame onto the current VM — no new VM allocation.\n This is the fast path for intra-VM closure calls. *)\nlet push_closure_frame vm cl args =\n let frame = { closure = cl; ip = 0; base = vm.sp; local_cells = Hashtbl.create 4 } in\n List.iter (fun a -> push vm a) args;\n for _ = List.length args to cl.vm_code.vc_locals - 1 do push vm Nil done;\n vm.frames <- frame :: vm.frames\n\n(** Convert compiler output (SX dict) to a vm_code object. *)\nlet code_from_value v =\n match v with\n | Dict d ->\n let bc_list = match Hashtbl.find_opt d \"bytecode\" with\n | Some (List l | ListRef { contents = l }) ->\n Array.of_list (List.map (fun x -> match x with Number n -> int_of_float n | _ -> 0) l)\n | _ -> [||]\n in\n let entries = match Hashtbl.find_opt d \"constants\" with\n | Some (List l | ListRef { contents = l }) -> Array.of_list l\n | _ -> [||]\n in\n let constants = Array.map (fun entry ->\n match entry with\n | Dict ed when Hashtbl.mem ed \"bytecode\" -> entry (* nested code — convert lazily *)\n | _ -> entry\n ) entries in\n let arity = match Hashtbl.find_opt d \"arity\" with\n | Some (Number n) -> int_of_float n | _ -> 0\n in\n { vc_arity = arity; vc_locals = arity + 16; vc_bytecode = bc_list; vc_constants = constants }\n | _ -> { vc_arity = 0; vc_locals = 16; vc_bytecode = [||]; vc_constants = [||] }\n\n(** Execute a closure with arguments — creates a fresh VM.\n Used for entry points: JIT Lambda calls, module execution, cross-boundary. *)\nlet rec call_closure cl args globals =\n incr _vm_call_count;\n let vm = create globals in\n push_closure_frame vm cl args;\n (try run vm with e -> raise e);\n pop vm\n\n(** Call a value as a function — dispatch by type.\n VmClosure: pushes frame on current VM (fast intra-VM path).\n Lambda: tries JIT then falls back to CEK.\n NativeFn: calls directly. *)\nand vm_call vm f args =\n match f with\n | VmClosure cl ->\n (* Fast path: push frame on current VM — no allocation, enables TCO *)\n push_closure_frame vm cl args\n | NativeFn (_name, fn) ->\n let result = fn args in\n push vm result\n | Lambda l ->\n (match l.l_compiled with\n | Some cl when not (is_jit_failed cl) ->\n (* Cached bytecode — run on VM using the closure's captured env,\n not the caller's globals. Closure vars were merged at compile time. *)\n (try push vm (call_closure cl args cl.vm_env_ref)\n with _ -> push vm (Sx_ref.cek_call f (List args)))\n | Some _ ->\n (* Compile failed — CEK *)\n push vm (Sx_ref.cek_call f (List args))\n | None ->\n if l.l_name <> None\n then begin\n (* Pre-mark before compile attempt to prevent re-entrancy *)\n l.l_compiled <- Some jit_failed_sentinel;\n match !jit_compile_ref l vm.globals with\n | Some cl ->\n l.l_compiled <- Some cl;\n (try push vm (call_closure cl args cl.vm_env_ref)\n with _ ->\n l.l_compiled <- Some jit_failed_sentinel;\n push vm (Sx_ref.cek_call f (List args)))\n | None ->\n push vm (Sx_ref.cek_call f (List args))\n end\n else\n push vm (Sx_ref.cek_call f (List args)))\n | Component _ | Island _ ->\n (* Components use keyword-arg parsing — CEK handles this *)\n incr _vm_cek_count;\n let result = Sx_ref.cek_call f (List args) in\n push vm result\n | _ ->\n raise (Eval_error (\"VM: not callable: \" ^ Sx_runtime.value_to_str f))\n\n(** Main execution loop — iterative (no OCaml stack growth).\n VmClosure calls push frames; the loop picks them up.\n OP_TAIL_CALL + VmClosure = true TCO: drop frame, push new, loop. *)\nand run vm =\n while vm.frames <> [] do\n match vm.frames with\n | [] -> () (* guard handled by while condition *)\n | frame :: rest_frames ->\n let bc = frame.closure.vm_code.vc_bytecode in\n let consts = frame.closure.vm_code.vc_constants in\n if frame.ip >= Array.length bc then\n vm.frames <- [] (* bytecode exhausted — stop *)\n else begin\n let saved_ip = frame.ip in\n let op = bc.(frame.ip) in\n frame.ip <- frame.ip + 1;\n (try match op with\n (* ---- Constants ---- *)\n | 1 (* OP_CONST *) ->\n let idx = read_u16 frame in\n if idx >= Array.length consts then\n raise (Eval_error (Printf.sprintf \"VM: CONST index %d out of bounds (pool size %d)\"\n idx (Array.length consts)));\n push vm consts.(idx)\n | 2 (* OP_NIL *) -> push vm Nil\n | 3 (* OP_TRUE *) -> push vm (Bool true)\n | 4 (* OP_FALSE *) -> push vm (Bool false)\n | 5 (* OP_POP *) -> ignore (pop vm)\n | 6 (* OP_DUP *) -> push vm (peek vm)\n\n (* ---- Variable access ---- *)\n | 16 (* OP_LOCAL_GET *) ->\n let slot = read_u8 frame in\n let v = match Hashtbl.find_opt frame.local_cells slot with\n | Some cell -> cell.uv_value\n | None ->\n let idx = frame.base + slot in\n if idx >= vm.sp then\n raise (Eval_error (Printf.sprintf\n \"VM: LOCAL_GET slot=%d base=%d sp=%d out of bounds\" slot frame.base vm.sp));\n vm.stack.(idx)\n in\n push vm v\n | 17 (* OP_LOCAL_SET *) ->\n let slot = read_u8 frame in\n let v = peek vm in\n (* Write to shared cell if captured, else to stack *)\n (match Hashtbl.find_opt frame.local_cells slot with\n | Some cell -> cell.uv_value <- v\n | None -> vm.stack.(frame.base + slot) <- v)\n | 18 (* OP_UPVALUE_GET *) ->\n let idx = read_u8 frame in\n if idx >= Array.length frame.closure.vm_upvalues then\n raise (Eval_error (Printf.sprintf\n \"VM: UPVALUE_GET idx=%d out of bounds (have %d)\" idx\n (Array.length frame.closure.vm_upvalues)));\n push vm frame.closure.vm_upvalues.(idx).uv_value\n | 19 (* OP_UPVALUE_SET *) ->\n let idx = read_u8 frame in\n frame.closure.vm_upvalues.(idx).uv_value <- peek vm\n | 20 (* OP_GLOBAL_GET *) ->\n let idx = read_u16 frame in\n let name = match consts.(idx) with String s -> s | _ -> \"\" in\n let v = try Hashtbl.find vm.globals name with Not_found ->\n (* Walk the closure env chain for inner functions *)\n let id = Sx_types.intern name in\n let rec env_lookup e =\n try Hashtbl.find e.bindings id\n with Not_found ->\n match e.parent with Some p -> env_lookup p | None ->\n try Sx_primitives.get_primitive name\n with _ -> raise (Eval_error (\"VM undefined: \" ^ name))\n in\n match frame.closure.vm_closure_env with\n | Some env -> env_lookup env\n | None ->\n try Sx_primitives.get_primitive name\n with _ -> raise (Eval_error (\"VM undefined: \" ^ name))\n in\n push vm v\n | 21 (* OP_GLOBAL_SET *) ->\n let idx = read_u16 frame in\n let name = match consts.(idx) with String s -> s | _ -> \"\" in\n (* Write to closure env if the name exists there (mutable closure vars) *)\n let written = match frame.closure.vm_closure_env with\n | Some env ->\n let id = Sx_types.intern name in\n let rec find_env e =\n if Hashtbl.mem e.bindings id then\n (Hashtbl.replace e.bindings id (peek vm); true)\n else match e.parent with Some p -> find_env p | None -> false\n in find_env env\n | None -> false\n in\n if not written then Hashtbl.replace vm.globals name (peek vm)\n\n (* ---- Control flow ---- *)\n | 32 (* OP_JUMP *) ->\n let offset = read_i16 frame in\n frame.ip <- frame.ip + offset\n | 33 (* OP_JUMP_IF_FALSE *) ->\n let offset = read_i16 frame in\n let v = pop vm in\n if not (sx_truthy v) then frame.ip <- frame.ip + offset\n | 34 (* OP_JUMP_IF_TRUE *) ->\n let offset = read_i16 frame in\n let v = pop vm in\n if sx_truthy v then frame.ip <- frame.ip + offset\n\n (* ---- Function calls ---- *)\n | 48 (* OP_CALL *) ->\n let argc = read_u8 frame in\n let args = Array.init argc (fun _ -> pop vm) in\n let f = pop vm in\n let args_list = List.rev (Array.to_list args) in\n vm_call vm f args_list\n (* Loop continues — if VmClosure, new frame runs next iteration *)\n | 49 (* OP_TAIL_CALL *) ->\n let argc = read_u8 frame in\n let args = Array.init argc (fun _ -> pop vm) in\n let f = pop vm in\n let args_list = List.rev (Array.to_list args) in\n (* Drop current frame, reuse stack space — true TCO for VmClosure *)\n vm.frames <- rest_frames;\n vm.sp <- frame.base;\n vm_call vm f args_list\n | 50 (* OP_RETURN *) ->\n let result = pop vm in\n vm.frames <- rest_frames;\n vm.sp <- frame.base;\n push vm result\n (* Loop continues with caller frame *)\n | 51 (* OP_CLOSURE *) ->\n let idx = read_u16 frame in\n if idx >= Array.length consts then\n raise (Eval_error (Printf.sprintf \"VM: CLOSURE idx %d >= consts %d\" idx (Array.length consts)));\n let code_val = consts.(idx) in\n let code = code_from_value code_val in\n (* Read upvalue descriptors from bytecode *)\n let uv_count = match code_val with\n | Dict d -> (match Hashtbl.find_opt d \"upvalue-count\" with\n | Some (Number n) -> int_of_float n | _ -> 0)\n | _ -> 0\n in\n let upvalues = Array.init uv_count (fun _ ->\n let is_local = read_u8 frame in\n let index = read_u8 frame in\n if is_local = 1 then begin\n (* Capture from enclosing frame's local slot.\n Create a shared cell — both parent and closure\n read/write through this cell. *)\n let cell = match Hashtbl.find_opt frame.local_cells index with\n | Some existing -> existing (* reuse existing cell *)\n | None ->\n let c = { uv_value = vm.stack.(frame.base + index) } in\n Hashtbl.replace frame.local_cells index c;\n c\n in\n cell\n end else\n (* Capture from enclosing frame's upvalue — already a shared cell *)\n frame.closure.vm_upvalues.(index)\n ) in\n let cl = { vm_code = code; vm_upvalues = upvalues; vm_name = None;\n vm_env_ref = vm.globals; vm_closure_env = None } in\n push vm (VmClosure cl)\n | 52 (* OP_CALL_PRIM *) ->\n let idx = read_u16 frame in\n let argc = read_u8 frame in\n let name = match consts.(idx) with String s -> s | _ -> \"\" in\n let args = List.init argc (fun _ -> pop vm) |> List.rev in\n (* Resolve thunks — the CEK evaluator does this automatically\n via trampoline, but the VM must do it explicitly before\n passing args to primitives. *)\n let args = List.map (fun v ->\n match v with\n | Thunk _ -> !Sx_primitives._sx_trampoline_fn v\n | _ -> v) args in\n let result =\n try\n (* Check primitives FIRST (native implementations of map/filter/etc.),\n then globals (which may have ho_via_cek wrappers that route\n through the CEK — these can't call VM closures). *)\n let fn_val = try Sx_primitives.get_primitive name with _ ->\n try Hashtbl.find vm.globals name with Not_found ->\n raise (Eval_error (\"VM: unknown primitive \" ^ name))\n in\n (match fn_val with\n | NativeFn (_, fn) -> fn args\n | _ -> Nil)\n with Eval_error msg ->\n raise (Eval_error (Printf.sprintf \"%s (in CALL_PRIM \\\"%s\\\" with %d args)\"\n msg name argc))\n in\n push vm result\n\n (* ---- Collections ---- *)\n | 64 (* OP_LIST *) ->\n let count = read_u16 frame in\n let items = List.init count (fun _ -> pop vm) |> List.rev in\n push vm (List items)\n | 65 (* OP_DICT *) ->\n let count = read_u16 frame in\n let d = Hashtbl.create count in\n for _ = 1 to count do\n let v = pop vm in\n let k = pop vm in\n let key = match k with String s -> s | Keyword s -> s | _ -> Sx_runtime.value_to_str k in\n Hashtbl.replace d key v\n done;\n push vm (Dict d)\n\n (* ---- String ops ---- *)\n | 144 (* OP_STR_CONCAT *) ->\n let count = read_u8 frame in\n let parts = List.init count (fun _ -> pop vm) |> List.rev in\n let s = String.concat \"\" (List.map Sx_runtime.value_to_str parts) in\n push vm (String s)\n\n (* ---- Define ---- *)\n | 128 (* OP_DEFINE *) ->\n let idx = read_u16 frame in\n let name = match consts.(idx) with String s -> s | _ -> \"\" in\n let v = peek vm in\n Hashtbl.replace vm.globals name v\n\n (* ---- Inline primitives ----\n Fast path for common types; fallback to actual primitive\n for edge cases (type coercion, thunks, RawHTML, etc.)\n to guarantee behavioral parity with CALL_PRIM. *)\n | 160 (* OP_ADD *) ->\n let b = pop vm and a = pop vm in\n push vm (match a, b with\n | Number x, Number y -> Number (x +. y)\n | _ -> (Hashtbl.find Sx_primitives.primitives \"+\") [a; b])\n | 161 (* OP_SUB *) ->\n let b = pop vm and a = pop vm in\n push vm (match a, b with\n | Number x, Number y -> Number (x -. y)\n | _ -> (Hashtbl.find Sx_primitives.primitives \"-\") [a; b])\n | 162 (* OP_MUL *) ->\n let b = pop vm and a = pop vm in\n push vm (match a, b with\n | Number x, Number y -> Number (x *. y)\n | _ -> (Hashtbl.find Sx_primitives.primitives \"*\") [a; b])\n | 163 (* OP_DIV *) ->\n let b = pop vm and a = pop vm in\n push vm (match a, b with\n | Number x, Number y -> Number (x /. y)\n | _ -> (Hashtbl.find Sx_primitives.primitives \"/\") [a; b])\n | 164 (* OP_EQ *) ->\n let b = pop vm and a = pop vm in\n let rec norm = function\n | ListRef { contents = l } -> List (List.map norm l)\n | List l -> List (List.map norm l) | v -> v in\n push vm (Bool (norm a = norm b))\n | 165 (* OP_LT *) ->\n let b = pop vm and a = pop vm in\n push vm (match a, b with\n | Number x, Number y -> Bool (x < y)\n | String x, String y -> Bool (x < y)\n | _ -> (Hashtbl.find Sx_primitives.primitives \"<\") [a; b])\n | 166 (* OP_GT *) ->\n let b = pop vm and a = pop vm in\n push vm (match a, b with\n | Number x, Number y -> Bool (x > y)\n | String x, String y -> Bool (x > y)\n | _ -> (Hashtbl.find Sx_primitives.primitives \">\") [a; b])\n | 167 (* OP_NOT *) ->\n let v = pop vm in\n push vm (Bool (not (sx_truthy v)))\n | 168 (* OP_LEN *) ->\n let v = pop vm in\n push vm (match v with\n | List l | ListRef { contents = l } -> Number (float_of_int (List.length l))\n | String s -> Number (float_of_int (String.length s))\n | Dict d -> Number (float_of_int (Hashtbl.length d))\n | Nil -> Number 0.0\n | _ -> (Hashtbl.find Sx_primitives.primitives \"len\") [v])\n | 169 (* OP_FIRST *) ->\n let v = pop vm in\n push vm (match v with\n | List (x :: _) | ListRef { contents = x :: _ } -> x\n | List [] | ListRef { contents = [] } | Nil -> Nil\n | _ -> (Hashtbl.find Sx_primitives.primitives \"first\") [v])\n | 170 (* OP_REST *) ->\n let v = pop vm in\n push vm (match v with\n | List (_ :: xs) | ListRef { contents = _ :: xs } -> List xs\n | List [] | ListRef { contents = [] } | Nil -> List []\n | _ -> (Hashtbl.find Sx_primitives.primitives \"rest\") [v])\n | 171 (* OP_NTH *) ->\n let n = pop vm and coll = pop vm in\n push vm (match coll, n with\n | (List l | ListRef { contents = l }), Number f ->\n (try List.nth l (int_of_float f) with _ -> Nil)\n | String s, Number f ->\n let i = int_of_float f in\n if i >= 0 && i < String.length s then String (String.make 1 s.[i])\n else Nil\n | _ -> (Hashtbl.find Sx_primitives.primitives \"nth\") [coll; n])\n | 172 (* OP_CONS *) ->\n let coll = pop vm and x = pop vm in\n push vm (match coll with\n | List l -> List (x :: l)\n | ListRef { contents = l } -> List (x :: l)\n | Nil -> List [x]\n | _ -> (Hashtbl.find Sx_primitives.primitives \"cons\") [x; coll])\n | 173 (* OP_NEG *) ->\n let v = pop vm in\n push vm (match v with\n | Number x -> Number (-.x)\n | _ -> (Hashtbl.find Sx_primitives.primitives \"-\") [v])\n | 174 (* OP_INC *) ->\n let v = pop vm in\n push vm (match v with\n | Number x -> Number (x +. 1.0)\n | _ -> (Hashtbl.find Sx_primitives.primitives \"inc\") [v])\n | 175 (* OP_DEC *) ->\n let v = pop vm in\n push vm (match v with\n | Number x -> Number (x -. 1.0)\n | _ -> (Hashtbl.find Sx_primitives.primitives \"dec\") [v])\n\n | opcode ->\n raise (Eval_error (Printf.sprintf \"VM: unknown opcode %d at ip=%d\"\n opcode (frame.ip - 1)))\n with Invalid_argument msg ->\n let fn_name = match frame.closure.vm_name with Some n -> n | None -> \"?\" in\n raise (Eval_error (Printf.sprintf\n \"VM: %s at ip=%d op=%d in %s (base=%d sp=%d bc_len=%d consts=%d)\"\n msg saved_ip op fn_name frame.base vm.sp\n (Array.length bc) (Array.length consts))))\n end\n done\n\n(** Execute a compiled module (top-level bytecode). *)\nlet execute_module code globals =\n let cl = { vm_code = code; vm_upvalues = [||]; vm_name = Some \"module\"; vm_env_ref = globals; vm_closure_env = None } in\n let vm = create globals in\n let frame = { closure = cl; ip = 0; base = 0; local_cells = Hashtbl.create 4 } in\n for _ = 0 to code.vc_locals - 1 do push vm Nil done;\n vm.frames <- [frame];\n run vm;\n pop vm\n\n\n(** {1 Lazy JIT compilation} *)\n\n(** Compile a lambda or component body to bytecode using the SX compiler.\n Invokes [compile] from spec/compiler.sx via the CEK machine.\n Returns a [vm_closure] ready for execution, or [None] on failure\n (safe fallback to CEK interpretation).\n\n The compilation cost is a single CEK evaluation of the compiler —\n microseconds per function. The result is cached in the lambda/component\n record so subsequent calls go straight to the VM. *)\nlet jit_compile_lambda (l : lambda) globals =\n let fn_name = match l.l_name with Some n -> n | None -> \"<anon>\" in\n try\n let compile_fn = try Hashtbl.find globals \"compile\"\n with Not_found -> raise (Eval_error \"JIT: compiler not loaded\") in\n (* Reconstruct the (fn (params) body) form so the compiler produces\n a proper closure. l.l_body is the inner body; we need the full\n function form with params so the compiled code binds them. *)\n let param_syms = List (List.map (fun s -> Symbol s) l.l_params) in\n let fn_expr = List [Symbol \"fn\"; param_syms; l.l_body] in\n let quoted = List [Symbol \"quote\"; fn_expr] in\n let result = Sx_ref.eval_expr (List [compile_fn; quoted]) (Env (make_env ())) in\n (* If the lambda has closure-captured variables, merge them into globals\n so the VM can find them via GLOBAL_GET. The compiler doesn't know\n about the enclosing scope, so closure vars get compiled as globals. *)\n let effective_globals =\n let closure = l.l_closure in\n if Hashtbl.length closure.bindings = 0 && closure.parent = None then\n globals (* no closure vars — use globals directly *)\n else begin\n (* Merge: closure bindings layered on top of globals.\n Use a shallow copy so we don't pollute the real globals. *)\n let merged = Hashtbl.copy globals in\n let rec inject env =\n Hashtbl.iter (fun id v -> Hashtbl.replace merged (Sx_types.unintern id) v) env.bindings;\n match env.parent with Some p -> inject p | None -> ()\n in\n inject closure;\n let n = Hashtbl.length merged - Hashtbl.length globals in\n if n > 0 then\n Printf.eprintf \"[jit] %s: injected %d closure bindings\\n%!\" fn_name n;\n merged\n end\n in\n (match result with\n | Dict d when Hashtbl.mem d \"bytecode\" ->\n let outer_code = code_from_value result in\n let bc = outer_code.vc_bytecode in\n if Array.length bc >= 4 && bc.(0) = 51 (* OP_CLOSURE *) then begin\n let idx = bc.(1) lor (bc.(2) lsl 8) in\n if idx < Array.length outer_code.vc_constants then\n let inner_val = outer_code.vc_constants.(idx) in\n let code = code_from_value inner_val in\n Some { vm_code = code; vm_upvalues = [||];\n vm_name = l.l_name; vm_env_ref = effective_globals; vm_closure_env = Some l.l_closure }\n else begin\n Printf.eprintf \"[jit] FAIL %s: closure index %d out of bounds (pool=%d)\\n%!\"\n fn_name idx (Array.length outer_code.vc_constants);\n\n None\n end\n end else begin\n (* Not a closure — constant expression, alias, or simple computation.\n Execute the bytecode as a module to get the value, then wrap\n as a NativeFn if it's callable (so the CEK can dispatch to it). *)\n (try\n let value = execute_module outer_code globals in\n Printf.eprintf \"[jit] RESOLVED %s: %s (bc[0]=%d)\\n%!\"\n fn_name (type_of value) (if Array.length bc > 0 then bc.(0) else -1);\n (* If the resolved value is a NativeFn, we can't wrap it as a\n vm_closure — just let the CEK handle it directly. Return None\n so the lambda falls through to CEK, which will find the\n resolved value in the env on next lookup. *)\n None\n with _ ->\n Printf.eprintf \"[jit] SKIP %s: non-closure execution failed (bc[0]=%d, len=%d)\\n%!\"\n fn_name (if Array.length bc > 0 then bc.(0) else -1) (Array.length bc);\n None)\n end\n | _ ->\n Printf.eprintf \"[jit] FAIL %s: compiler returned %s\\n%!\" fn_name (type_of result);\n None)\n with e ->\n Printf.eprintf \"[jit] FAIL %s: %s\\n%!\" fn_name (Printexc.to_string e);\n None\n\n(* Wire up forward references *)\nlet () = jit_compile_ref := jit_compile_lambda\nlet () = _vm_call_closure_ref := (fun cl args -> call_closure cl args cl.vm_env_ref)\n","(* generated code *)"],"names":[],"mappings":"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","ignoreList":[1]}},{"offset":{"line":0,"column":206046},"map":{"version":3,"sources":["/workspace_root/lib/sx_scope.ml","/builtin/blackbox.ml"],"sourcesContent":["(** Scope stacks — dynamic scope for render-time effects.\n\n Provides scope-push!/pop!/peek, collect!/collected/clear-collected!,\n scope-emit!/emitted/scope-emitted, context, and cookie access.\n\n All functions are registered as primitives so both the CEK evaluator\n and the JIT VM can find them in the same place. *)\n\nopen Sx_types\n\n(** The shared scope stacks hashtable. Each key maps to a stack of values.\n Used by aser for spread/provide/emit patterns, CSSX collect/flush, etc. *)\nlet scope_stacks : (string, value list) Hashtbl.t = Hashtbl.create 8\n\n(** Request cookies — set by the Python bridge before each render.\n get-cookie reads from here; set-cookie is a no-op on the server. *)\nlet request_cookies : (string, string) Hashtbl.t = Hashtbl.create 8\n\n(** Clear all scope stacks. Called between requests if needed. *)\nlet clear_all () = Hashtbl.clear scope_stacks\n\nlet () =\n let register = Sx_primitives.register in\n\n (* --- Cookies --- *)\n\n register \"get-cookie\" (fun args ->\n match args with\n | [String name] ->\n (match Hashtbl.find_opt request_cookies name with\n | Some v -> String v\n | None -> Nil)\n | _ -> Nil);\n\n register \"set-cookie\" (fun _args -> Nil);\n\n (* --- Core scope stack operations --- *)\n\n register \"scope-push!\" (fun args ->\n match args with\n | [String name; value] ->\n let stack = try Hashtbl.find scope_stacks name with Not_found -> [] in\n Hashtbl.replace scope_stacks name (value :: stack); Nil\n | _ -> Nil);\n\n register \"scope-pop!\" (fun args ->\n match args with\n | [String name] ->\n let stack = try Hashtbl.find scope_stacks name with Not_found -> [] in\n (match stack with _ :: rest -> Hashtbl.replace scope_stacks name rest | [] -> ()); Nil\n | _ -> Nil);\n\n register \"scope-peek\" (fun args ->\n match args with\n | [String name] ->\n let stack = try Hashtbl.find scope_stacks name with Not_found -> [] in\n (match stack with v :: _ -> v | [] -> Nil)\n | _ -> Nil);\n\n (* --- Context (scope lookup with optional default) --- *)\n\n register \"context\" (fun args ->\n match args with\n | [String name] | [String name; _] ->\n let stack = try Hashtbl.find scope_stacks name with Not_found -> [] in\n (match stack, args with\n | v :: _, _ -> v\n | [], [_; default_val] -> default_val\n | [], _ -> Nil)\n | _ -> Nil);\n\n (* --- Collect / collected / clear-collected! --- *)\n\n register \"collect!\" (fun args ->\n match args with\n | [String name; value] ->\n let stack = try Hashtbl.find scope_stacks name with Not_found -> [] in\n (match stack with\n | List items :: rest ->\n if not (List.mem value items) then\n Hashtbl.replace scope_stacks name (List (items @ [value]) :: rest)\n | [] ->\n Hashtbl.replace scope_stacks name [List [value]]\n | _ :: _ -> ());\n Nil\n | _ -> Nil);\n\n register \"collected\" (fun args ->\n match args with\n | [String name] ->\n let stack = try Hashtbl.find scope_stacks name with Not_found -> [] in\n (match stack with List items :: _ -> List items | _ -> List [])\n | _ -> List []);\n\n register \"clear-collected!\" (fun args ->\n match args with\n | [String name] ->\n let stack = try Hashtbl.find scope_stacks name with Not_found -> [] in\n (match stack with\n | _ :: rest -> Hashtbl.replace scope_stacks name (List [] :: rest)\n | [] -> Hashtbl.replace scope_stacks name [List []]);\n Nil\n | _ -> Nil);\n\n (* --- Emit / emitted (for spread attrs in adapter-html.sx) --- *)\n\n register \"scope-emit!\" (fun args ->\n match args with\n | [String name; value] ->\n let stack = try Hashtbl.find scope_stacks name with Not_found -> [] in\n (match stack with\n | List items :: rest ->\n Hashtbl.replace scope_stacks name (List (items @ [value]) :: rest)\n | Nil :: rest ->\n Hashtbl.replace scope_stacks name (List [value] :: rest)\n | [] ->\n Hashtbl.replace scope_stacks name [List [value]]\n | _ :: _ -> ());\n Nil\n | _ -> Nil);\n\n register \"emit!\" (fun args ->\n (* Alias for scope-emit! *)\n match Sx_primitives.get_primitive \"scope-emit!\" with\n | NativeFn (_, fn) -> fn args | _ -> Nil);\n\n register \"emitted\" (fun args ->\n match args with\n | [String name] ->\n let stack = try Hashtbl.find scope_stacks name with Not_found -> [] in\n (match stack with List items :: _ -> List items | _ -> List [])\n | _ -> List []);\n\n register \"scope-emitted\" (fun args ->\n match Sx_primitives.get_primitive \"emitted\" with\n | NativeFn (_, fn) -> fn args | _ -> List []);\n\n register \"scope-collected\" (fun args ->\n match Sx_primitives.get_primitive \"collected\" with\n | NativeFn (_, fn) -> fn args | _ -> List []);\n\n register \"scope-clear-collected!\" (fun args ->\n match Sx_primitives.get_primitive \"clear-collected!\" with\n | NativeFn (_, fn) -> fn args | _ -> Nil);\n\n (* --- Provide aliases --- *)\n\n register \"provide-push!\" (fun args ->\n match Sx_primitives.get_primitive \"scope-push!\" with\n | NativeFn (_, fn) -> fn args | _ -> Nil);\n\n register \"provide-pop!\" (fun args ->\n match Sx_primitives.get_primitive \"scope-pop!\" with\n | NativeFn (_, fn) -> fn args | _ -> Nil)\n","(* generated code *)"],"names":[],"mappings":"KAwJU,GAAN,QAAM,eAAwC,G,CAAA,qBACxB,EADwB,OACxB,eAAe,IAAG,C,KALlC,GAAN,QAAM,eAAyC,G,CAAA,qBACzB,EADyB,OACzB,eAAe,IAAG,C,KAPlC,GAAN,QAAM,eAA8C,G,CAAA,qBAC9B,EAD8B,OAC9B,eAAe,IAAG,C,KALlC,GAAN,QAAM,eAAuC,G,CAAA,qBACvB,EADuB,OACvB,eAAe,GAAO,C,KALtC,GAAN,QAAM,eAAqC,G,CAAA,qBACrB,EADqB,OACrB,eAAe,GAAO,C,SAR5C,O,CAAA,0B,CAAA,mCAEE,UAAgB,MAFlB,OAEE,OAAgB,aAA8B,I,AAAA,I,AAAA,G,EAAA,GCjIpD,kDDiIuE,WAAjE,EACA,K,CAAA,iB,CAAA,qBAAqC,IAArC,OAAqC,QAAkB,QAClD,GAAO,C,KARR,GAAN,QAAM,eAAyC,G,CAAA,qBACzB,EADyB,OACzB,eAAe,IAAG,C,cAjBxC,O,CAAA,0B,CAAA,mC,CAAA,8BAEE,UAAgB,MAFlB,S,CAEE,OAAgB,aAA8B,I,AAAA,I,AAAA,G,EAAA,GC7GpD,kDD6GuE,WAAjE,EACA,OAMG,Q,CAAA,wDAEH,mBAJG,Q,CAAA,0BAIH,OAJG,0BAAwD,+BAFxD,Q,CAAyD,QAED,OAFxD,qBAAwC,aAAiB,iBAAzD,iBAMH,UACK,IAAG,C,WAxBV,O,CAAA,0B,CAAA,mCAEE,UAAgB,MAFlB,S,CAEE,OAAgB,aAA8B,I,AAAA,I,AAAA,G,EAAA,GCjGpD,kDDiGuE,WAAjE,EACA,QAES,Q,CAAA,wBADO,Q,CAAA,OAEhB,UAFgB,yBADhB,CAGA,SACK,IAAG,C,SAdV,O,CAAA,0B,CAAA,mCAEE,UAAgB,MAFlB,OAEE,OAAgB,aAA8B,I,AAAA,I,AAAA,G,EAAA,GC1FpD,kDD0FuE,WAAjE,EACA,K,CAAA,iB,CAAA,qBAAqC,IAArC,OAAqC,QAAkB,QAClD,GAAO,C,cAlBd,O,CAAA,0B,CAAA,mC,CAAA,8BAEE,UAAgB,MAFlB,S,CAEE,OAAgB,aAA8B,I,AAAA,I,AAAA,G,EAAA,GC5EpD,kDD4EuE,WAAjE,EACA,OAKG,Q,CAAA,wDAEH,iB,CAAA,8BALU,EAKV,SALG,OAAO,aAAsB,QAC3B,Q,CAAyD,QAAjB,EAAxC,qBAAwC,aAAiB,iBAAzD,kBAIL,UACK,IAAG,C,YAvBV,O,CAAA,0B,CAAA,mB,EAAA,c,CAAA,iB,CAAA,GAEE,UAAgB,MAFlB,UAEE,OAAgB,aAA8B,I,AAAA,I,AAAA,G,EAAA,GChEpD,kDDgEuE,WAAjE,EACA,c,CAAA,mB,CAAA,4BAE2B,IACf,gBAFI,E,KAGX,IAAG,C,SAhBV,O,CAAA,0B,CAAA,mCAEE,UAAgB,MAFlB,OAEE,OAAgB,aAA8B,I,AAAA,I,AAAA,G,EAAA,GCvDpD,kDDuDuE,WAAjE,EACA,OAAsC,gBAAV,E,KACvB,IAAG,C,WAXV,O,CAAA,0B,CAAA,mCAEE,UAAgB,MAFlB,S,CAEE,OAAgB,aAA8B,I,AAAA,I,AAAA,G,EAAA,GChDpD,kDDgDuE,WAAjE,EACA,K,CAAA,EAA+B,Q,CAA/B,UAA+B,sBAAoD,SAC9E,IAAG,C,cAXV,O,CAAA,0B,CAAA,mC,CAAA,8BAEE,UAAgB,MAFlB,S,CAEE,OAAgB,aAA8B,I,AAAA,I,AAAA,G,EAAA,GCzCpD,kDDyCuE,WAAjE,EACA,Q,CAAA,iCAAkD,UAC7C,IAAG,C,EATwB,IAAG,C,SAPrC,O,CAAA,0B,CAAA,mCAES,MAFT,OAEE,OAAO,eAAqC,OAEjC,MADE,IACF,UADE,M,KAER,IAAG,C,EAbK,6BAA0B,C,YAPO,QCZpD,ODYoD,eAID,QAJiB,OAIjB,eAAgB,UAUjE,WAViE,QAUjE,cAQA,sBAIA,GAJwC,QAIxC,WAOA,GAFa,QAEb,WAOA,GAFa,QAEb,WASA,GAJa,QAIb,WAYA,GAJa,QAIb,WAcA,GAFa,QAEb,WAOA,GAFiB,QAEjB,WAYA,GAJa,QAIb,WAeA,iBAKA,GAF2C,QAE3C,WAOA,iBAIA,iBAIA,iBAMA,iBAIA,iBAE2C","ignoreList":[1]}},{"offset":{"line":0,"column":210241},"map":{"version":3,"sources":["/workspace_root/lib/sx_parser.ml","/builtin/blackbox.ml"],"sourcesContent":["(** S-expression parser.\n\n Recursive descent over a string, producing [Sx_types.value list].\n Supports: lists, dicts, symbols, keywords, strings (with escapes),\n numbers, booleans, nil, comments, quote/quasiquote/unquote sugar. *)\n\nopen Sx_types\n\ntype state = {\n src : string;\n len : int;\n mutable pos : int;\n}\n\nlet make_state src = { src; len = String.length src; pos = 0 }\n\nlet peek s = if s.pos < s.len then Some s.src.[s.pos] else None\nlet advance s = s.pos <- s.pos + 1\nlet at_end s = s.pos >= s.len\n\nlet skip_whitespace_and_comments s =\n let rec go () =\n if at_end s then ()\n else match s.src.[s.pos] with\n | ' ' | '\\t' | '\\n' | '\\r' -> advance s; go ()\n | ';' ->\n while s.pos < s.len && s.src.[s.pos] <> '\\n' do advance s done;\n if s.pos < s.len then advance s;\n go ()\n | _ -> ()\n in go ()\n\n(* Character classification — matches spec/parser.sx ident-start/ident-char.\n ident-start: a-z A-Z _ ~ * + - > < = / ! ? &\n ident-char: ident-start plus 0-9 . : / # , *)\nlet is_ident_start = function\n | 'a'..'z' | 'A'..'Z' | '_' | '~' | '*' | '+' | '-'\n | '>' | '<' | '=' | '/' | '!' | '?' | '&' -> true\n | _ -> false\n\nlet is_ident_char = function\n | c when is_ident_start c -> true\n | '0'..'9' | '.' | ':' | '#' | ',' -> true\n | _ -> false\n\n(* Symbol reading uses ident_char; first char must be ident_start or digit/colon *)\nlet is_symbol_char = is_ident_char\n\nlet read_string s =\n (* s.pos is on the opening quote *)\n advance s;\n let buf = Buffer.create 64 in\n let rec go () =\n if at_end s then raise (Parse_error \"Unterminated string\");\n let c = s.src.[s.pos] in\n advance s;\n if c = '\"' then Buffer.contents buf\n else if c = '\\\\' then begin\n if at_end s then raise (Parse_error \"Unterminated string escape\");\n let esc = s.src.[s.pos] in\n advance s;\n (match esc with\n | 'n' -> Buffer.add_char buf '\\n'\n | 't' -> Buffer.add_char buf '\\t'\n | 'r' -> Buffer.add_char buf '\\r'\n | '\"' -> Buffer.add_char buf '\"'\n | '\\\\' -> Buffer.add_char buf '\\\\'\n | 'u' ->\n (* \\uXXXX — read 4 hex digits, encode as UTF-8 *)\n if s.pos + 4 > s.len then raise (Parse_error \"Incomplete \\\\u escape\");\n let hex = String.sub s.src s.pos 4 in\n s.pos <- s.pos + 4;\n let code = int_of_string (\"0x\" ^ hex) in\n let ubuf = Buffer.create 4 in\n Buffer.add_utf_8_uchar ubuf (Uchar.of_int code);\n Buffer.add_string buf (Buffer.contents ubuf)\n | '`' -> Buffer.add_char buf '`'\n | _ -> Buffer.add_char buf '\\\\'; Buffer.add_char buf esc);\n go ()\n end else begin\n Buffer.add_char buf c;\n go ()\n end\n in go ()\n\nlet read_symbol s =\n let start = s.pos in\n while s.pos < s.len && is_symbol_char s.src.[s.pos] do advance s done;\n String.sub s.src start (s.pos - start)\n\nlet try_number str =\n match float_of_string_opt str with\n | Some n -> Some (Number n)\n | None -> None\n\nlet rec read_value s : value =\n skip_whitespace_and_comments s;\n if at_end s then begin\n let line = ref 1 in\n String.iter (fun c -> if c = '\\n' then incr line) s.src;\n raise (Parse_error (Printf.sprintf \"Unexpected end of input at line %d (pos %d)\" !line s.pos))\n end;\n match s.src.[s.pos] with\n | '(' -> read_list s ')'\n | '[' -> read_list s ']'\n | '{' -> read_dict s\n | '\"' -> String (read_string s)\n | '\\'' -> advance s; List [Symbol \"quote\"; read_value s]\n | '`' -> advance s; List [Symbol \"quasiquote\"; read_value s]\n | '#' when s.pos + 1 < s.len && s.src.[s.pos + 1] = ';' ->\n (* Datum comment: #; discards next expression *)\n advance s; advance s;\n ignore (read_value s);\n read_value s\n | '#' when s.pos + 1 < s.len && s.src.[s.pos + 1] = '\\'' ->\n (* Quote shorthand: #'expr -> (quote expr) *)\n advance s; advance s;\n List [Symbol \"quote\"; read_value s]\n | '#' when s.pos + 1 < s.len && s.src.[s.pos + 1] = '|' ->\n (* Raw string: #|...| — ends at next | *)\n advance s; advance s;\n let buf = Buffer.create 64 in\n let rec go () =\n if at_end s then raise (Parse_error \"Unterminated raw string\");\n let c = s.src.[s.pos] in\n advance s;\n if c = '|' then\n String (Buffer.contents buf)\n else begin\n Buffer.add_char buf c;\n go ()\n end\n in go ()\n | ',' ->\n (* Unquote / splice-unquote — matches spec: , always triggers unquote *)\n advance s;\n if s.pos < s.len && s.src.[s.pos] = '@' then begin\n advance s;\n List [Symbol \"splice-unquote\"; read_value s]\n end else\n List [Symbol \"unquote\"; read_value s]\n | _ ->\n begin\n (* Symbol, keyword, number, or boolean *)\n let token = read_symbol s in\n if token = \"\" then begin\n let line = ref 1 and col = ref 1 in\n for i = 0 to s.pos - 1 do\n if s.src.[i] = '\\n' then (incr line; col := 1) else incr col\n done;\n raise (Parse_error (Printf.sprintf \"Unexpected char: %c at line %d col %d (pos %d)\"\n s.src.[s.pos] !line !col s.pos))\n end;\n match token with\n | \"true\" -> Bool true\n | \"false\" -> Bool false\n | \"nil\" -> Nil\n | _ when token.[0] = ':' ->\n Keyword (String.sub token 1 (String.length token - 1))\n | _ ->\n match try_number token with\n | Some n -> n\n | None -> Symbol token\n end\n\nand read_list s close_char =\n advance s; (* skip opening paren/bracket *)\n let items = ref [] in\n let rec go () =\n skip_whitespace_and_comments s;\n if at_end s then raise (Parse_error \"Unterminated list\");\n if s.src.[s.pos] = close_char then begin\n advance s;\n List (List.rev !items)\n end else begin\n items := read_value s :: !items;\n go ()\n end\n in go ()\n\nand read_dict s =\n advance s; (* skip { *)\n let d = make_dict () in\n let rec go () =\n skip_whitespace_and_comments s;\n if at_end s then raise (Parse_error \"Unterminated dict\");\n if s.src.[s.pos] = '}' then begin\n advance s;\n Dict d\n end else begin\n let key = read_value s in\n let key_str = match key with\n | Keyword k -> k\n | String k -> k\n | Symbol k -> k\n | _ -> raise (Parse_error \"Dict key must be keyword, string, or symbol\")\n in\n let v = read_value s in\n dict_set d key_str v;\n go ()\n end\n in go ()\n\n\n(** Parse a string into a list of SX values. *)\nlet parse_all src =\n let s = make_state src in\n let results = ref [] in\n let rec go () =\n skip_whitespace_and_comments s;\n if at_end s then List.rev !results\n else begin\n results := read_value s :: !results;\n go ()\n end\n in go ()\n\n(** Parse a file into a list of SX values. *)\nlet parse_file path =\n let ic = open_in path in\n let n = in_channel_length ic in\n let src = really_input_string ic n in\n close_in ic;\n parse_all src\n","(* generated code *)"],"names":[],"mappings":"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","ignoreList":[1]}},{"offset":{"line":0,"column":215061},"map":{"version":3,"sources":["/workspace_root/lib/sx_render.ml","/builtin/blackbox.ml"],"sourcesContent":["(** HTML renderer for SX values.\n\n Extracted from run_tests.ml — renders an SX expression tree to an\n HTML string, expanding components and macros along the way.\n\n Depends on [Sx_ref.eval_expr] for evaluating sub-expressions\n during rendering (keyword arg values, conditionals, etc.). *)\n\nopen Sx_types\n\n(* ====================================================================== *)\n(* Tag / attribute registries *)\n(* ====================================================================== *)\n\nlet html_tags = [\n \"html\"; \"head\"; \"body\"; \"title\"; \"meta\"; \"link\"; \"script\"; \"style\"; \"noscript\";\n \"header\"; \"nav\"; \"main\"; \"section\"; \"article\"; \"aside\"; \"footer\";\n \"h1\"; \"h2\"; \"h3\"; \"h4\"; \"h5\"; \"h6\"; \"hgroup\";\n \"div\"; \"p\"; \"blockquote\"; \"pre\"; \"figure\"; \"figcaption\"; \"address\"; \"hr\";\n \"ul\"; \"ol\"; \"li\"; \"dl\"; \"dt\"; \"dd\"; \"menu\";\n \"a\"; \"span\"; \"em\"; \"strong\"; \"small\"; \"b\"; \"i\"; \"u\"; \"s\"; \"sub\"; \"sup\";\n \"mark\"; \"del\"; \"ins\"; \"q\"; \"cite\"; \"dfn\"; \"abbr\"; \"code\"; \"var\"; \"samp\";\n \"kbd\"; \"data\"; \"time\"; \"ruby\"; \"rt\"; \"rp\"; \"bdi\"; \"bdo\"; \"wbr\"; \"br\";\n \"table\"; \"thead\"; \"tbody\"; \"tfoot\"; \"tr\"; \"th\"; \"td\"; \"caption\"; \"colgroup\"; \"col\";\n \"form\"; \"input\"; \"textarea\"; \"select\"; \"option\"; \"optgroup\"; \"button\"; \"label\";\n \"fieldset\"; \"legend\"; \"datalist\"; \"output\"; \"progress\"; \"meter\";\n \"details\"; \"summary\"; \"dialog\";\n \"img\"; \"video\"; \"audio\"; \"source\"; \"picture\"; \"canvas\"; \"iframe\"; \"embed\"; \"object\"; \"param\";\n \"svg\"; \"path\"; \"circle\"; \"rect\"; \"line\"; \"polyline\"; \"polygon\"; \"ellipse\";\n \"g\"; \"defs\"; \"use\"; \"text\"; \"tspan\"; \"clipPath\"; \"mask\"; \"pattern\";\n \"linearGradient\"; \"radialGradient\"; \"stop\"; \"filter\"; \"feBlend\"; \"feFlood\";\n \"feGaussianBlur\"; \"feOffset\"; \"feMerge\"; \"feMergeNode\"; \"feComposite\";\n \"template\"; \"slot\";\n]\n\nlet void_elements = [\n \"area\"; \"base\"; \"br\"; \"col\"; \"embed\"; \"hr\"; \"img\"; \"input\";\n \"link\"; \"meta\"; \"param\"; \"source\"; \"track\"; \"wbr\"\n]\n\nlet boolean_attrs = [\n \"async\"; \"autofocus\"; \"autoplay\"; \"checked\"; \"controls\"; \"default\";\n \"defer\"; \"disabled\"; \"formnovalidate\"; \"hidden\"; \"inert\"; \"ismap\";\n \"loop\"; \"multiple\"; \"muted\"; \"nomodule\"; \"novalidate\"; \"open\";\n \"playsinline\"; \"readonly\"; \"required\"; \"reversed\"; \"selected\"\n]\n\nlet is_html_tag name = List.mem name html_tags\nlet is_void name = List.mem name void_elements\nlet is_boolean_attr name = List.mem name boolean_attrs\n\n\n(* ====================================================================== *)\n(* HTML escaping *)\n(* ====================================================================== *)\n\nlet escape_html s =\n let buf = Buffer.create (String.length s) in\n String.iter (function\n | '&' -> Buffer.add_string buf \"&amp;\"\n | '<' -> Buffer.add_string buf \"&lt;\"\n | '>' -> Buffer.add_string buf \"&gt;\"\n | '\"' -> Buffer.add_string buf \"&quot;\"\n | c -> Buffer.add_char buf c) s;\n Buffer.contents buf\n\n\n(* ====================================================================== *)\n(* Attribute rendering *)\n(* ====================================================================== *)\n\nlet render_attrs attrs =\n let buf = Buffer.create 64 in\n Hashtbl.iter (fun k v ->\n if is_boolean_attr k then begin\n if sx_truthy v then begin\n Buffer.add_char buf ' ';\n Buffer.add_string buf k\n end\n end else if not (is_nil v) then begin\n Buffer.add_char buf ' ';\n Buffer.add_string buf k;\n Buffer.add_string buf \"=\\\"\";\n Buffer.add_string buf (escape_html (value_to_string v));\n Buffer.add_char buf '\"'\n end) attrs;\n Buffer.contents buf\n\n\n(* ====================================================================== *)\n(* HTML renderer *)\n(* ====================================================================== *)\n\n(* Forward ref — resolved at setup time *)\nlet render_to_html_ref : (value -> env -> string) ref =\n ref (fun _expr _env -> \"\")\n\nlet render_to_html expr env = !render_to_html_ref expr env\n\nlet render_children children env =\n String.concat \"\" (List.map (fun c -> render_to_html c env) children)\n\n(** Parse keyword attrs and positional children from an element call's args.\n Attrs are evaluated; children are returned UNEVALUATED for render dispatch. *)\nlet parse_element_args args env =\n let attrs = Hashtbl.create 8 in\n let children = ref [] in\n let skip = ref false in\n let len = List.length args in\n List.iteri (fun idx arg ->\n if !skip then skip := false\n else match arg with\n | Keyword k when idx + 1 < len ->\n let v = Sx_ref.eval_expr (List.nth args (idx + 1)) (Env env) in\n Hashtbl.replace attrs k v;\n skip := true\n | Spread pairs ->\n List.iter (fun (k, v) -> Hashtbl.replace attrs k v) pairs\n | _ ->\n children := arg :: !children\n ) args;\n (attrs, List.rev !children)\n\nlet render_html_element tag args env =\n let (attrs, children) = parse_element_args args env in\n let attr_str = render_attrs attrs in\n if is_void tag then\n \"<\" ^ tag ^ attr_str ^ \" />\"\n else\n let content = String.concat \"\"\n (List.map (fun c -> render_to_html c env) children) in\n \"<\" ^ tag ^ attr_str ^ \">\" ^ content ^ \"</\" ^ tag ^ \">\"\n\nlet render_component comp args env =\n match comp with\n | Component c ->\n let kwargs = Hashtbl.create 8 in\n let children_exprs = ref [] in\n let skip = ref false in\n let len = List.length args in\n List.iteri (fun idx arg ->\n if !skip then skip := false\n else match arg with\n | Keyword k when idx + 1 < len ->\n let v = Sx_ref.eval_expr (List.nth args (idx + 1)) (Env env) in\n Hashtbl.replace kwargs k v;\n skip := true\n | _ ->\n children_exprs := arg :: !children_exprs\n ) args;\n let children = List.rev !children_exprs in\n let local = env_merge c.c_closure env in\n List.iter (fun p ->\n let v = match Hashtbl.find_opt kwargs p with Some v -> v | None -> Nil in\n ignore (env_bind local p v)\n ) c.c_params;\n if c.c_has_children then begin\n let rendered_children = String.concat \"\"\n (List.map (fun c -> render_to_html c env) children) in\n ignore (env_bind local \"children\" (RawHTML rendered_children))\n end;\n render_to_html c.c_body local\n | _ -> \"\"\n\nlet expand_macro (m : macro) args _env =\n let local = env_extend m.m_closure in\n let params = m.m_params in\n let rec bind_params ps as' =\n match ps, as' with\n | [], rest ->\n (match m.m_rest_param with\n | Some rp -> ignore (env_bind local rp (List rest))\n | None -> ())\n | p :: ps_rest, a :: as_rest ->\n ignore (env_bind local p a);\n bind_params ps_rest as_rest\n | _ :: _, [] ->\n List.iter (fun p -> ignore (env_bind local p Nil)) (List.rev ps)\n in\n bind_params params args;\n Sx_ref.eval_expr m.m_body (Env local)\n\nlet rec do_render_to_html (expr : value) (env : env) : string =\n match expr with\n | Nil -> \"\"\n | Bool true -> \"true\"\n | Bool false -> \"false\"\n | Number n ->\n if Float.is_integer n then string_of_int (int_of_float n)\n else Printf.sprintf \"%g\" n\n | String s -> escape_html s\n | Keyword k -> escape_html k\n | RawHTML s -> s\n | Symbol s ->\n let v = Sx_ref.eval_expr (Symbol s) (Env env) in\n do_render_to_html v env\n | List [] | ListRef { contents = [] } -> \"\"\n | List (head :: args) | ListRef { contents = head :: args } ->\n render_list_to_html head args env\n | _ ->\n let v = Sx_ref.eval_expr expr (Env env) in\n do_render_to_html v env\n\nand render_list_to_html head args env =\n match head with\n | Symbol \"<>\" ->\n render_children args env\n | Symbol \"raw!\" ->\n (* Inject pre-rendered HTML without escaping *)\n let v = Sx_ref.eval_expr (List.hd args) (Env env) in\n (match v with\n | String s | RawHTML s -> s\n | _ -> value_to_string v)\n | Symbol tag when is_html_tag tag ->\n render_html_element tag args env\n | Symbol \"if\" ->\n let cond_val = Sx_ref.eval_expr (List.hd args) (Env env) in\n if sx_truthy cond_val then\n (if List.length args > 1 then do_render_to_html (List.nth args 1) env else \"\")\n else\n (if List.length args > 2 then do_render_to_html (List.nth args 2) env else \"\")\n | Symbol \"when\" ->\n let cond_val = Sx_ref.eval_expr (List.hd args) (Env env) in\n if sx_truthy cond_val then\n String.concat \"\" (List.map (fun e -> do_render_to_html e env) (List.tl args))\n else \"\"\n | Symbol \"cond\" ->\n render_cond args env\n | Symbol \"case\" ->\n let v = Sx_ref.eval_expr (List (head :: args)) (Env env) in\n do_render_to_html v env\n | Symbol (\"let\" | \"let*\") ->\n render_let args env\n | Symbol (\"begin\" | \"do\") ->\n let rec go = function\n | [] -> \"\"\n | [last] -> do_render_to_html last env\n | e :: rest ->\n ignore (Sx_ref.eval_expr e (Env env));\n go rest\n in go args\n | Symbol (\"define\" | \"defcomp\" | \"defmacro\" | \"defisland\") ->\n ignore (Sx_ref.eval_expr (List (head :: args)) (Env env));\n \"\"\n | Symbol \"map\" ->\n render_map args env false\n | Symbol \"map-indexed\" ->\n render_map args env true\n | Symbol \"filter\" ->\n let v = Sx_ref.eval_expr (List (head :: args)) (Env env) in\n do_render_to_html v env\n | Symbol \"for-each\" ->\n render_for_each args env\n | Symbol name ->\n (try\n let v = env_get env name in\n (match v with\n | Component c when c.c_affinity = \"client\" -> \"\" (* skip client-only *)\n | Component _ -> render_component v args env\n | Island _i ->\n (* Islands: SSR via the SX render-to-html from adapter-html.sx.\n It handles deref/signal/computed through the CEK correctly,\n and renders island bodies with hydration markers. *)\n (try\n let call_expr = List (Symbol name :: args) in\n let quoted = List [Symbol \"quote\"; call_expr] in\n let render_call = List [Symbol \"render-to-html\"; quoted; Env env] in\n let result = Sx_ref.eval_expr render_call (Env env) in\n (match result with\n | String s | RawHTML s -> s\n | _ -> value_to_string result)\n with e ->\n Printf.eprintf \"[ssr-island] ~%s FAILED: %s\\n%s\\n%!\" _i.i_name (Printexc.to_string e) (Printexc.get_backtrace ());\n \"\")\n | Macro m ->\n let expanded = expand_macro m args env in\n do_render_to_html expanded env\n | _ ->\n let result = Sx_ref.eval_expr (List (head :: args)) (Env env) in\n do_render_to_html result env)\n with Eval_error _ ->\n let result = Sx_ref.eval_expr (List (head :: args)) (Env env) in\n do_render_to_html result env)\n | _ ->\n let result = Sx_ref.eval_expr (List (head :: args)) (Env env) in\n do_render_to_html result env\n\nand render_cond args env =\n let as_list = function List l | ListRef { contents = l } -> Some l | _ -> None in\n let is_scheme = List.for_all (fun a -> match as_list a with\n | Some items when List.length items = 2 -> true\n | _ -> false) args\n in\n if is_scheme then begin\n let rec go = function\n | [] -> \"\"\n | clause :: rest ->\n (match as_list clause with\n | Some [test; body] ->\n let is_else = match test with\n | Keyword \"else\" -> true\n | Symbol \"else\" | Symbol \":else\" -> true\n | _ -> false\n in\n if is_else then do_render_to_html body env\n else\n let v = Sx_ref.eval_expr test (Env env) in\n if sx_truthy v then do_render_to_html body env\n else go rest\n | _ -> \"\")\n in go args\n end else begin\n let rec go = function\n | [] -> \"\"\n | [_] -> \"\"\n | test :: body :: rest ->\n let is_else = match test with\n | Keyword \"else\" -> true\n | Symbol \"else\" | Symbol \":else\" -> true\n | _ -> false\n in\n if is_else then do_render_to_html body env\n else\n let v = Sx_ref.eval_expr test (Env env) in\n if sx_truthy v then do_render_to_html body env\n else go rest\n in go args\n end\n\nand render_let args env =\n let as_list = function List l | ListRef { contents = l } -> Some l | _ -> None in\n let bindings_expr = List.hd args in\n let body = List.tl args in\n let local = env_extend env in\n let bindings = match as_list bindings_expr with Some l -> l | None -> [] in\n let is_scheme = match bindings with\n | (List _ :: _) | (ListRef _ :: _) -> true\n | _ -> false\n in\n if is_scheme then\n List.iter (fun b ->\n match as_list b with\n | Some [Symbol name; expr] | Some [String name; expr] ->\n let v = Sx_ref.eval_expr expr (Env local) in\n ignore (env_bind local name v)\n | _ -> ()\n ) bindings\n else begin\n let rec go = function\n | [] -> ()\n | (Symbol name) :: expr :: rest | (String name) :: expr :: rest ->\n let v = Sx_ref.eval_expr expr (Env local) in\n ignore (env_bind local name v);\n go rest\n | _ -> ()\n in go bindings\n end;\n let rec render_body = function\n | [] -> \"\"\n | [last] -> do_render_to_html last local\n | e :: rest ->\n ignore (Sx_ref.eval_expr e (Env local));\n render_body rest\n in render_body body\n\nand render_map args env indexed =\n let (fn_val, coll_val) = match args with\n | [a; b] ->\n let va = Sx_ref.eval_expr a (Env env) in\n let vb = Sx_ref.eval_expr b (Env env) in\n (match va, vb with\n | (Lambda _ | NativeFn _), _ -> (va, vb)\n | _, (Lambda _ | NativeFn _) -> (vb, va)\n | _ -> (va, vb))\n | _ -> (Nil, Nil)\n in\n let items = match coll_val with List l | ListRef { contents = l } -> l | _ -> [] in\n String.concat \"\" (List.mapi (fun i item ->\n let call_args = if indexed then [Number (float_of_int i); item] else [item] in\n match fn_val with\n | Lambda l ->\n let local = env_extend l.l_closure in\n List.iter2 (fun p a -> ignore (env_bind local p a))\n l.l_params call_args;\n do_render_to_html l.l_body local\n | _ ->\n let result = Sx_runtime.sx_call fn_val call_args in\n do_render_to_html result env\n ) items)\n\nand render_for_each args env =\n let (fn_val, coll_val) = match args with\n | [a; b] ->\n let va = Sx_ref.eval_expr a (Env env) in\n let vb = Sx_ref.eval_expr b (Env env) in\n (match va, vb with\n | (Lambda _ | NativeFn _), _ -> (va, vb)\n | _, (Lambda _ | NativeFn _) -> (vb, va)\n | _ -> (va, vb))\n | _ -> (Nil, Nil)\n in\n let items = match coll_val with List l | ListRef { contents = l } -> l | _ -> [] in\n String.concat \"\" (List.map (fun item ->\n match fn_val with\n | Lambda l ->\n let local = env_extend l.l_closure in\n List.iter2 (fun p a -> ignore (env_bind local p a))\n l.l_params [item];\n do_render_to_html l.l_body local\n | _ ->\n let result = Sx_runtime.sx_call fn_val [item] in\n do_render_to_html result env\n ) items)\n\n\n(* ====================================================================== *)\n(* Setup — bind render primitives in an env and wire up the ref *)\n(* ====================================================================== *)\n\nlet setup_render_env env =\n render_to_html_ref := do_render_to_html;\n\n let bind name fn =\n ignore (env_bind env name (NativeFn (name, fn)))\n in\n\n bind \"render-html\" (fun args ->\n match args with\n | [String src] ->\n let exprs = Sx_parser.parse_all src in\n let expr = match exprs with\n | [e] -> e\n | [] -> Nil\n | _ -> List (Symbol \"do\" :: exprs)\n in\n String (render_to_html expr env)\n | [expr] ->\n String (render_to_html expr env)\n | [expr; Env e] ->\n String (render_to_html expr e)\n | _ -> String \"\");\n\n bind \"render-to-html\" (fun args ->\n match args with\n | [String src] ->\n let exprs = Sx_parser.parse_all src in\n let expr = match exprs with\n | [e] -> e\n | [] -> Nil\n | _ -> List (Symbol \"do\" :: exprs)\n in\n String (render_to_html expr env)\n | [expr] ->\n String (render_to_html expr env)\n | [expr; Env e] ->\n String (render_to_html expr e)\n | _ -> String \"\")\n","(* generated code *)"],"names":[],"mappings":"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","ignoreList":[1]}}]}