From b62dfb25e599645f01d87c94feb95435fdfbd1b3 Mon Sep 17 00:00:00 2001 From: giles Date: Tue, 31 Mar 2026 23:12:36 +0000 Subject: [PATCH] Highlight returns SX tree, rendered to HTML/DOM by pipeline highlight.sx now returns a list of (span :class "..." "text") elements instead of a string. The rendering pipeline handles the rest: - Server render-to-html: produces text - Client render-to-dom: produces DOM span elements - Aser: serializes spans as SX for client rendering Key fixes: - hl-span uses (make-keyword "class") not :class (keywords evaluate to strings in list context) - render-sx-tokens returns flat list of spans (no wrapper) - hl-escape is identity (no escaping needed for tree values) - highlight.sx added to browser bundle + platform loader - ~docs/code renders src directly as child of pre Co-Authored-By: Claude Opus 4.6 (1M context) --- hosts/ocaml/browser/bundle.sh | 3 +- hosts/ocaml/browser/sx-platform.js | 3 +- lib/highlight.sx | 50 +- shared/static/wasm/sx-platform-2.js | 3 +- shared/static/wasm/sx/highlight.sx | 300 +++++ shared/static/wasm/sx/vm.sx | 1027 ++++++++--------- shared/static/wasm/sx/vm.sxbc | 4 +- .../{sx-86ee6606.wasm => sx-80621fb4.wasm} | Bin 354041 -> 354050 bytes .../sx-80621fb4.wasm.map | 1 + .../sx-86ee6606.wasm.map | 1 - shared/static/wasm/sx_browser.bc.wasm.js | 2 +- sx/sxc/docs.sx | 157 ++- 12 files changed, 901 insertions(+), 650 deletions(-) create mode 100644 shared/static/wasm/sx/highlight.sx rename shared/static/wasm/sx_browser.bc.wasm.assets/{sx-86ee6606.wasm => sx-80621fb4.wasm} (99%) create mode 100644 shared/static/wasm/sx_browser.bc.wasm.assets/sx-80621fb4.wasm.map delete mode 100644 shared/static/wasm/sx_browser.bc.wasm.assets/sx-86ee6606.wasm.map diff --git a/hosts/ocaml/browser/bundle.sh b/hosts/ocaml/browser/bundle.sh index 1380732b..cb7fc38c 100755 --- a/hosts/ocaml/browser/bundle.sh +++ b/hosts/ocaml/browser/bundle.sh @@ -34,8 +34,9 @@ cp "$ROOT/web/deps.sx" "$DIST/sx/" cp "$ROOT/web/router.sx" "$DIST/sx/" cp "$ROOT/web/page-helpers.sx" "$DIST/sx/" -# 3b. Freeze scope (signal persistence) +# 3b. Freeze scope (signal persistence) + highlight (syntax coloring) cp "$ROOT/lib/freeze.sx" "$DIST/sx/" +cp "$ROOT/lib/highlight.sx" "$DIST/sx/" # 4. Bytecode compiler + VM cp "$ROOT/lib/bytecode.sx" "$DIST/sx/" diff --git a/hosts/ocaml/browser/sx-platform.js b/hosts/ocaml/browser/sx-platform.js index 320bf33c..d8867161 100644 --- a/hosts/ocaml/browser/sx-platform.js +++ b/hosts/ocaml/browser/sx-platform.js @@ -301,8 +301,9 @@ "sx/deps.sx", "sx/router.sx", "sx/page-helpers.sx", - // Freeze scope (signal persistence) + // Freeze scope (signal persistence) + highlight (syntax coloring) "sx/freeze.sx", + "sx/highlight.sx", // Bytecode compiler + VM "sx/bytecode.sx", "sx/compiler.sx", diff --git a/lib/highlight.sx b/lib/highlight.sx index 2c2de272..46a455bb 100644 --- a/lib/highlight.sx +++ b/lib/highlight.sx @@ -67,36 +67,7 @@ (define hl-ws? (fn (c) (or (= c " ") (= c "\n") (= c "\t") (= c "\r")))) -(define - hl-escape - (fn - (s) - (let - ((result "") (i 0) (len (string-length s))) - (let - loop - () - (when - (< i len) - (let - ((c (substring s i (+ i 1)))) - (set! - result - (str - result - (if - (= c "\\") - "\\\\" - (if - (= c "\"") - "\\\"" - (if - (= c "\n") - "\\n" - (if (= c "\t") "\\t" (if (= c "\r") "\\r" c))))))) - (set! i (+ i 1)) - (loop)))) - result))) +(define hl-escape (fn (s) s)) (define hl-span @@ -104,8 +75,8 @@ (class text) (if (= class "") - (str "(span \"" (hl-escape text) "\")") - (str "(span :class \"" class "\" \"" (hl-escape text) "\")")))) + (list (quote span) text) + (list (quote span) (make-keyword "class") class text)))) (define tokenize-sx @@ -309,9 +280,13 @@ render-sx-tokens (fn (tokens) - (let - ((parts (map (fn (tok) (let ((kind (first tok)) (text (first (rest tok)))) (hl-span (get sx-token-classes kind "") text))) tokens))) - (str "(<> " (join " " parts) ")")))) + (map + (fn + (tok) + (let + ((cls (or (dict-get sx-token-classes (first tok)) ""))) + (hl-span cls (nth tok 1)))) + tokens))) (define highlight-sx (fn (code) (render-sx-tokens (tokenize-sx code)))) @@ -322,7 +297,4 @@ (if (or (= lang "lisp") (= lang "sx") (= lang "sexp") (= lang "scheme")) (highlight-sx code) - (str - "(pre :class \"text-sm overflow-x-auto\" (code \"" - (hl-escape code) - "\"))")))) + (list (quote code) code)))) diff --git a/shared/static/wasm/sx-platform-2.js b/shared/static/wasm/sx-platform-2.js index 320bf33c..d8867161 100644 --- a/shared/static/wasm/sx-platform-2.js +++ b/shared/static/wasm/sx-platform-2.js @@ -301,8 +301,9 @@ "sx/deps.sx", "sx/router.sx", "sx/page-helpers.sx", - // Freeze scope (signal persistence) + // Freeze scope (signal persistence) + highlight (syntax coloring) "sx/freeze.sx", + "sx/highlight.sx", // Bytecode compiler + VM "sx/bytecode.sx", "sx/compiler.sx", diff --git a/shared/static/wasm/sx/highlight.sx b/shared/static/wasm/sx/highlight.sx new file mode 100644 index 00000000..46a455bb --- /dev/null +++ b/shared/static/wasm/sx/highlight.sx @@ -0,0 +1,300 @@ +(define + sx-specials + (list + "defcomp" + "defrelation" + "defisland" + "defpage" + "defhelper" + "define" + "defmacro" + "defconfig" + "deftest" + "if" + "when" + "cond" + "case" + "and" + "or" + "not" + "let" + "let*" + "lambda" + "fn" + "do" + "begin" + "quote" + "quasiquote" + "->" + "map" + "filter" + "reduce" + "some" + "every?" + "map-indexed" + "for-each" + "&key" + "&rest" + "set!")) + +(define sx-special? (fn (s) (some (fn (x) (= x s)) sx-specials))) + +(define hl-digit? (fn (c) (and (>= c "0") (<= c "9")))) + +(define + hl-alpha? + (fn (c) (or (and (>= c "a") (<= c "z")) (and (>= c "A") (<= c "Z"))))) + +(define + hl-sym-char? + (fn + (c) + (or + (hl-alpha? c) + (hl-digit? c) + (= c "_") + (= c "-") + (= c "?") + (= c "!") + (= c "+") + (= c "*") + (= c "/") + (= c "<") + (= c ">") + (= c "=") + (= c "&") + (= c ".")))) + +(define hl-ws? (fn (c) (or (= c " ") (= c "\n") (= c "\t") (= c "\r")))) + +(define hl-escape (fn (s) s)) + +(define + hl-span + (fn + (class text) + (if + (= class "") + (list (quote span) text) + (list (quote span) (make-keyword "class") class text)))) + +(define + tokenize-sx + (fn + (code) + (let + ((tokens (list)) (i 0) (len (string-length code))) + (let + loop + () + (when + (< i len) + (let + ((c (substring code i (+ i 1)))) + (if + (= c ";") + (let + ((start i)) + (set! i (+ i 1)) + (let + scan + () + (when + (and + (< i len) + (not (= (substring code i (+ i 1)) "\n"))) + (set! i (+ i 1)) + (scan))) + (set! + tokens + (append + tokens + (list (list "comment" (substring code start i)))))) + (if + (= c "\"") + (let + ((start i)) + (set! i (+ i 1)) + (let + sloop + () + (when + (< i len) + (let + ((sc (substring code i (+ i 1)))) + (if + (= sc "\\") + (do (set! i (+ i 2)) (sloop)) + (if + (= sc "\"") + (set! i (+ i 1)) + (do (set! i (+ i 1)) (sloop))))))) + (set! + tokens + (append + tokens + (list (list "string" (substring code start i)))))) + (if + (= c ":") + (let + ((start i)) + (set! i (+ i 1)) + (when + (and + (< i len) + (hl-alpha? (substring code i (+ i 1)))) + (let + scan + () + (when + (and + (< i len) + (hl-sym-char? (substring code i (+ i 1)))) + (set! i (+ i 1)) + (scan)))) + (set! + tokens + (append + tokens + (list (list "keyword" (substring code start i)))))) + (if + (= c "~") + (let + ((start i)) + (set! i (+ i 1)) + (let + scan + () + (when + (and + (< i len) + (let + ((x (substring code i (+ i 1)))) + (or (hl-sym-char? x) (= x "/")))) + (set! i (+ i 1)) + (scan))) + (set! + tokens + (append + tokens + (list (list "component" (substring code start i)))))) + (if + (or + (= c "(") + (= c ")") + (= c "[") + (= c "]") + (= c "{") + (= c "}")) + (do + (set! + tokens + (append tokens (list (list "paren" c)))) + (set! i (+ i 1))) + (if + (hl-digit? c) + (let + ((start i)) + (let + scan + () + (when + (and + (< i len) + (let + ((x (substring code i (+ i 1)))) + (or (hl-digit? x) (= x ".")))) + (set! i (+ i 1)) + (scan))) + (set! + tokens + (append + tokens + (list (list "number" (substring code start i)))))) + (if + (hl-sym-char? c) + (let + ((start i)) + (let + scan + () + (when + (and + (< i len) + (hl-sym-char? (substring code i (+ i 1)))) + (set! i (+ i 1)) + (scan))) + (let + ((text (substring code start i))) + (if + (or + (= text "true") + (= text "false") + (= text "nil")) + (set! + tokens + (append + tokens + (list (list "boolean" text)))) + (if + (sx-special? text) + (set! + tokens + (append + tokens + (list (list "special" text)))) + (set! + tokens + (append + tokens + (list (list "symbol" text)))))))) + (if + (hl-ws? c) + (let + ((start i)) + (let + scan + () + (when + (and + (< i len) + (hl-ws? (substring code i (+ i 1)))) + (set! i (+ i 1)) + (scan))) + (set! + tokens + (append + tokens + (list (list "ws" (substring code start i)))))) + (do + (set! + tokens + (append tokens (list (list "other" c)))) + (set! i (+ i 1)))))))))))) + (loop))) + tokens))) + +(define sx-token-classes {:boolean "text-orange-600" :component "text-rose-600 font-semibold" :number "text-amber-700" :string "text-emerald-700" :special "text-sky-700 font-semibold" :paren "text-stone-400" :keyword "text-violet-600" :comment "text-stone-400 italic"}) + +(define + render-sx-tokens + (fn + (tokens) + (map + (fn + (tok) + (let + ((cls (or (dict-get sx-token-classes (first tok)) ""))) + (hl-span cls (nth tok 1)))) + tokens))) + +(define highlight-sx (fn (code) (render-sx-tokens (tokenize-sx code)))) + +(define + highlight + (fn + (code lang) + (if + (or (= lang "lisp") (= lang "sx") (= lang "sexp") (= lang "scheme")) + (highlight-sx code) + (list (quote code) code)))) diff --git a/shared/static/wasm/sx/vm.sx b/shared/static/wasm/sx/vm.sx index 691ea5ac..5af86bc8 100644 --- a/shared/static/wasm/sx/vm.sx +++ b/shared/static/wasm/sx/vm.sx @@ -1,607 +1,550 @@ -;; ========================================================================== -;; vm.sx — SX bytecode virtual machine -;; -;; Stack-based interpreter for bytecode produced by compiler.sx. -;; Written in SX — transpiled to each target (OCaml, JS, WASM). -;; -;; Architecture: -;; - Array-based value stack (no allocation per step) -;; - Frame list for call stack (one frame per function invocation) -;; - Upvalue cells for shared mutable closure variables -;; - Iterative dispatch loop (no host-stack growth) -;; - TCO via frame replacement on OP_TAIL_CALL -;; -;; Platform interface: -;; The host must provide: -;; - make-vm-stack, vm-stack-get, vm-stack-set!, vm-stack-grow -;; - cek-call (fallback for Lambda/Component) -;; - get-primitive (primitive lookup) -;; Everything else is defined here. -;; ========================================================================== - - -;; -------------------------------------------------------------------------- -;; 1. Types — VM data structures -;; -------------------------------------------------------------------------- - -;; Upvalue cell — shared mutable reference for captured variables. -;; When a closure captures a local, both the parent frame and the -;; closure read/write through this cell. -(define make-upvalue-cell - (fn (value) - {:uv-value value})) +(define make-upvalue-cell (fn (value) {:uv-value value})) (define uv-get (fn (cell) (get cell "uv-value"))) + (define uv-set! (fn (cell value) (dict-set! cell "uv-value" value))) -;; VM code object — compiled bytecode + constant pool. -;; Produced by compiler.sx, consumed by the VM. -(define make-vm-code - (fn (arity locals bytecode constants) - {:vc-arity arity - :vc-locals locals - :vc-bytecode bytecode - :vc-constants constants})) +(define make-vm-code (fn (arity locals bytecode constants) {:vc-bytecode bytecode :vc-locals locals :vc-arity arity :vc-constants constants})) -;; VM closure — code + captured upvalues + globals reference. -(define make-vm-closure - (fn (code upvalues name globals closure-env) - {:vm-code code - :vm-upvalues upvalues - :vm-name name - :vm-globals globals - :vm-closure-env closure-env})) +(define + make-vm-closure + (fn (code upvalues name globals closure-env) {:vm-globals globals :vm-upvalues upvalues :vm-name name :vm-code code :vm-closure-env closure-env})) -;; VM frame — one per active function invocation. -(define make-vm-frame - (fn (closure base) - {:closure closure - :ip 0 - :base base - :local-cells {}})) +(define make-vm-frame (fn (closure base) {:ip 0 :closure closure :base base :local-cells {}})) -;; VM state — the virtual machine. -(define make-vm - (fn (globals) - {:stack (make-vm-stack 4096) - :sp 0 - :frames (list) - :globals globals})) +(define make-vm (fn (globals) {:sp 0 :frames (list) :stack (make-vm-stack 4096) :globals globals})) - -;; -------------------------------------------------------------------------- -;; 2. Stack operations -;; -------------------------------------------------------------------------- - -(define vm-push - (fn (vm value) - (let ((sp (get vm "sp")) - (stack (get vm "stack"))) - ;; Grow stack if needed - (when (>= sp (vm-stack-length stack)) - (let ((new-stack (make-vm-stack (* sp 2)))) +(define + vm-push + (fn + (vm value) + (let + ((sp (get vm "sp")) (stack (get vm "stack"))) + (when + (>= sp (vm-stack-length stack)) + (let + ((new-stack (make-vm-stack (* sp 2)))) (vm-stack-copy! stack new-stack sp) (dict-set! vm "stack" new-stack) (set! stack new-stack))) (vm-stack-set! stack sp value) (dict-set! vm "sp" (+ sp 1))))) -(define vm-pop - (fn (vm) - (let ((sp (- (get vm "sp") 1))) +(define + vm-pop + (fn + (vm) + (let + ((sp (- (get vm "sp") 1))) (dict-set! vm "sp" sp) (vm-stack-get (get vm "stack") sp)))) -(define vm-peek - (fn (vm) - (vm-stack-get (get vm "stack") (- (get vm "sp") 1)))) +(define + vm-peek + (fn (vm) (vm-stack-get (get vm "stack") (- (get vm "sp") 1)))) +(define + frame-read-u8 + (fn + (frame) + (let + ((ip (get frame "ip")) + (bc (get (get (get frame "closure") "vm-code") "vc-bytecode"))) + (let ((v (nth bc ip))) (dict-set! frame "ip" (+ ip 1)) v)))) -;; -------------------------------------------------------------------------- -;; 3. Operand reading — read from bytecode stream -;; -------------------------------------------------------------------------- - -(define frame-read-u8 - (fn (frame) - (let ((ip (get frame "ip")) - (bc (get (get (get frame "closure") "vm-code") "vc-bytecode"))) - (let ((v (nth bc ip))) - (dict-set! frame "ip" (+ ip 1)) - v)))) - -(define frame-read-u16 - (fn (frame) - (let ((lo (frame-read-u8 frame)) - (hi (frame-read-u8 frame))) +(define + frame-read-u16 + (fn + (frame) + (let + ((lo (frame-read-u8 frame)) (hi (frame-read-u8 frame))) (+ lo (* hi 256))))) -(define frame-read-i16 - (fn (frame) - (let ((v (frame-read-u16 frame))) - (if (>= v 32768) (- v 65536) v)))) +(define + frame-read-i16 + (fn + (frame) + (let ((v (frame-read-u16 frame))) (if (>= v 32768) (- v 65536) v)))) - -;; -------------------------------------------------------------------------- -;; 4. Frame management -;; -------------------------------------------------------------------------- - -;; Push a closure frame onto the VM. -;; Lays out args as locals, pads remaining locals with nil. -(define vm-push-frame - (fn (vm closure args) - (let ((frame (make-vm-frame closure (get vm "sp")))) +(define + vm-push-frame + (fn + (vm closure args) + (let + ((frame (make-vm-frame closure (get vm "sp")))) (for-each (fn (a) (vm-push vm a)) args) - ;; Pad remaining local slots with nil - (let ((arity (len args)) - (total-locals (get (get closure "vm-code") "vc-locals"))) - (let ((pad-count (- total-locals arity))) - (when (> pad-count 0) - (let ((i 0)) - (define pad-loop - (fn () - (when (< i pad-count) + (let + ((arity (len args)) + (total-locals (get (get closure "vm-code") "vc-locals"))) + (let + ((pad-count (- total-locals arity))) + (when + (> pad-count 0) + (let + ((i 0)) + (define + pad-loop + (fn + () + (when + (< i pad-count) (vm-push vm nil) (set! i (+ i 1)) (pad-loop)))) (pad-loop))))) (dict-set! vm "frames" (cons frame (get vm "frames")))))) - -;; -------------------------------------------------------------------------- -;; 5. Code loading — convert compiler output to VM structures -;; -------------------------------------------------------------------------- - -(define code-from-value - (fn (v) +(define + code-from-value + (fn + (v) "Convert a compiler output dict to a vm-code object." - (if (not (dict? v)) + (if + (not (dict? v)) (make-vm-code 0 16 (list) (list)) - (let ((bc-raw (get v "bytecode")) - (bc (if (nil? bc-raw) (list) bc-raw)) - (consts-raw (get v "constants")) - (consts (if (nil? consts-raw) (list) consts-raw)) - (arity-raw (get v "arity")) - (arity (if (nil? arity-raw) 0 arity-raw))) + (let + ((bc-raw (get v "bytecode")) + (bc (if (nil? bc-raw) (list) bc-raw)) + (consts-raw (get v "constants")) + (consts (if (nil? consts-raw) (list) consts-raw)) + (arity-raw (get v "arity")) + (arity (if (nil? arity-raw) 0 arity-raw))) (make-vm-code arity (+ arity 16) bc consts))))) +(define vm-closure? (fn (v) (and (dict? v) (has-key? v "vm-code")))) -;; -------------------------------------------------------------------------- -;; 6. Call dispatch — route calls by value type -;; -------------------------------------------------------------------------- - -;; vm-call dispatches a function call within the VM. -;; VmClosure: push frame on current VM (fast path, enables TCO). -;; NativeFn: call directly, push result. -;; Lambda/Component: fall back to CEK evaluator. -(define vm-closure? - (fn (v) - (and (dict? v) (has-key? v "vm-code")))) - -(define vm-call - (fn (vm f args) +(define + vm-call + (fn + (vm f args) (cond (vm-closure? f) - ;; Fast path: push frame on current VM - (vm-push-frame vm f args) - + (vm-push-frame vm f args) + (or + (= (type-of f) "lambda") + (= (type-of f) "component") + (= (type-of f) "island")) + (vm-push vm (cek-call f args)) (callable? f) - ;; Native function or primitive - (vm-push vm (apply f args)) + (vm-push vm (apply f args)) + :else (error (str "VM: not callable: " (type-of f)))))) - (or (= (type-of f) "lambda") (= (type-of f) "component") (= (type-of f) "island")) - ;; CEK fallback — the host provides cek-call - (vm-push vm (cek-call f args)) - - :else - (error (str "VM: not callable: " (type-of f)))))) - - -;; -------------------------------------------------------------------------- -;; 7. Local/upvalue access helpers -;; -------------------------------------------------------------------------- - -(define frame-local-get - (fn (vm frame slot) +(define + frame-local-get + (fn + (vm frame slot) "Read a local variable — check shared cells first, then stack." - (let ((cells (get frame "local-cells")) - (key (str slot))) - (if (has-key? cells key) + (let + ((cells (get frame "local-cells")) (key (str slot))) + (if + (has-key? cells key) (uv-get (get cells key)) (vm-stack-get (get vm "stack") (+ (get frame "base") slot)))))) -(define frame-local-set - (fn (vm frame slot value) +(define + frame-local-set + (fn + (vm frame slot value) "Write a local variable — to shared cell if captured, else to stack." - (let ((cells (get frame "local-cells")) - (key (str slot))) - (if (has-key? cells key) + (let + ((cells (get frame "local-cells")) (key (str slot))) + (if + (has-key? cells key) (uv-set! (get cells key) value) (vm-stack-set! (get vm "stack") (+ (get frame "base") slot) value))))) -(define frame-upvalue-get - (fn (frame idx) +(define + frame-upvalue-get + (fn + (frame idx) (uv-get (nth (get (get frame "closure") "vm-upvalues") idx)))) -(define frame-upvalue-set - (fn (frame idx value) +(define + frame-upvalue-set + (fn + (frame idx value) (uv-set! (nth (get (get frame "closure") "vm-upvalues") idx) value))) - -;; -------------------------------------------------------------------------- -;; 8. Global variable access with closure env chain -;; -------------------------------------------------------------------------- - -(define vm-global-get - (fn (vm frame name) - "Look up a global: globals table → closure env chain → primitives." - (let ((globals (get vm "globals"))) - (if (has-key? globals name) +(define + vm-global-get + (fn + (vm frame name) + "Look up a global: globals table → closure env → primitives → HO wrappers" + (let + ((globals (get vm "globals"))) + (if + (has-key? globals name) (get globals name) - ;; Walk the closure env chain for inner functions - (let ((closure-env (get (get frame "closure") "vm-closure-env"))) - (if (nil? closure-env) - (get-primitive name) - (let ((found (env-walk closure-env name))) - (if (nil? found) - (get-primitive name) + (let + ((closure-env (get (get frame "closure") "closure-env"))) + (if + (nil? closure-env) + (cek-try + (fn () (get-primitive name)) + (fn (e) (vm-resolve-ho-form vm name))) + (let + ((found (env-walk closure-env name))) + (if + (nil? found) + (cek-try + (fn () (get-primitive name)) + (fn (e) (vm-resolve-ho-form vm name))) found)))))))) -(define vm-global-set - (fn (vm frame name value) +(define + vm-resolve-ho-form + (fn + (vm name) + (cond + (= name "for-each") + (fn + (f coll) + (for-each (fn (x) (vm-call-external vm f (list x))) coll)) + (= name "map") + (fn (f coll) (map (fn (x) (vm-call-external vm f (list x))) coll)) + (= name "map-indexed") + (fn + (f coll) + (map-indexed (fn (i x) (vm-call-external vm f (list i x))) coll)) + (= name "filter") + (fn + (f coll) + (filter (fn (x) (vm-call-external vm f (list x))) coll)) + (= name "reduce") + (fn + (f init coll) + (reduce + (fn (acc x) (vm-call-external vm f (list acc x))) + init + coll)) + (= name "some") + (fn (f coll) (some (fn (x) (vm-call-external vm f (list x))) coll)) + (= name "every?") + (fn + (f coll) + (every? (fn (x) (vm-call-external vm f (list x))) coll)) + :else (error (str "VM undefined: " name))))) + +(define + vm-call-external + (fn + (vm f args) + (if + (vm-closure? f) + (vm-call-closure f args (get vm "globals")) + (cek-call f args)))) + +(define + vm-global-set + (fn + (vm frame name value) "Set a global: write to closure env if name exists there, else globals." - (let ((closure-env (get (get frame "closure") "vm-closure-env")) - (written false)) - (when (not (nil? closure-env)) + (let + ((closure-env (get (get frame "closure") "vm-closure-env")) + (written false)) + (when + (not (nil? closure-env)) (set! written (env-walk-set! closure-env name value))) - (when (not written) - (dict-set! (get vm "globals") name value))))) + (when (not written) (dict-set! (get vm "globals") name value))))) -;; env-walk: walk an environment chain looking for a binding. -;; Returns the value or nil if not found. -(define env-walk - (fn (env name) - (if (nil? env) nil - (if (env-has? env name) +(define + env-walk + (fn + (env name) + (if + (nil? env) + nil + (if + (env-has? env name) (env-get env name) - (let ((parent (env-parent env))) - (if (nil? parent) nil - (env-walk parent name))))))) + (let + ((parent (env-parent env))) + (if (nil? parent) nil (env-walk parent name))))))) -;; env-walk-set!: walk an environment chain, set value if name found. -;; Returns true if set, false if not found. -(define env-walk-set! - (fn (env name value) - (if (nil? env) false - (if (env-has? env name) +(define + env-walk-set! + (fn + (env name value) + (if + (nil? env) + false + (if + (env-has? env name) (do (env-set! env name value) true) - (let ((parent (env-parent env))) - (if (nil? parent) false - (env-walk-set! parent name value))))))) + (let + ((parent (env-parent env))) + (if (nil? parent) false (env-walk-set! parent name value))))))) +(define + vm-create-closure + (fn + (vm frame code-val) + "Create a closure from a code constant. Reads upvalue descriptors\n from the bytecode stream and captures values from the enclosing frame." + (let + ((code (code-from-value code-val)) + (uv-count + (if + (dict? code-val) + (let ((n (get code-val "upvalue-count"))) (if (nil? n) 0 n)) + 0))) + (let + ((upvalues (let ((result (list)) (i 0)) (define capture-loop (fn () (when (< i uv-count) (let ((is-local (frame-read-u8 frame)) (index (frame-read-u8 frame))) (let ((cell (if (= is-local 1) (let ((cells (get frame "local-cells")) (key (str index))) (if (has-key? cells key) (get cells key) (let ((c (make-upvalue-cell (vm-stack-get (get vm "stack") (+ (get frame "base") index))))) (dict-set! cells key c) c))) (nth (get (get frame "closure") "vm-upvalues") index)))) (append! result cell) (set! i (+ i 1)) (capture-loop)))))) (capture-loop) result))) + (make-vm-closure code upvalues nil (get vm "globals") nil))))) -;; -------------------------------------------------------------------------- -;; 9. Closure creation — OP_CLOSURE with upvalue capture -;; -------------------------------------------------------------------------- - -(define vm-create-closure - (fn (vm frame code-val) - "Create a closure from a code constant. Reads upvalue descriptors - from the bytecode stream and captures values from the enclosing frame." - (let ((code (code-from-value code-val)) - (uv-count (if (dict? code-val) - (let ((n (get code-val "upvalue-count"))) - (if (nil? n) 0 n)) - 0))) - (let ((upvalues - (let ((result (list)) - (i 0)) - (define capture-loop - (fn () - (when (< i uv-count) - (let ((is-local (frame-read-u8 frame)) - (index (frame-read-u8 frame))) - (let ((cell - (if (= is-local 1) - ;; Capture from enclosing frame's local slot. - ;; Create/reuse a shared cell so both parent - ;; and closure read/write through it. - (let ((cells (get frame "local-cells")) - (key (str index))) - (if (has-key? cells key) - (get cells key) - (let ((c (make-upvalue-cell - (vm-stack-get (get vm "stack") - (+ (get frame "base") index))))) - (dict-set! cells key c) - c))) - ;; Capture from enclosing frame's upvalue - (nth (get (get frame "closure") "vm-upvalues") index)))) - (append! result cell) - (set! i (+ i 1)) - (capture-loop)))))) - (capture-loop) - result))) - (make-vm-closure code upvalues nil - (get vm "globals") nil))))) - - -;; -------------------------------------------------------------------------- -;; 10. Main execution loop — iterative dispatch -;; -------------------------------------------------------------------------- - -(define vm-run - (fn (vm) - "Execute bytecode until all frames are exhausted. - VmClosure calls push new frames; the loop picks them up. - OP_TAIL_CALL + VmClosure = true TCO: drop frame, push new, loop." - (define loop - (fn () - (when (not (empty? (get vm "frames"))) - (let ((frame (first (get vm "frames"))) - (rest-frames (rest (get vm "frames")))) - (let ((bc (get (get (get frame "closure") "vm-code") "vc-bytecode")) - (consts (get (get (get frame "closure") "vm-code") "vc-constants"))) - (if (>= (get frame "ip") (len bc)) - ;; Bytecode exhausted — stop +(define + vm-run + (fn + (vm) + "Execute bytecode until all frames are exhausted.\n VmClosure calls push new frames; the loop picks them up.\n OP_TAIL_CALL + VmClosure = true TCO: drop frame, push new, loop." + (define + loop + (fn + () + (when + (not (empty? (get vm "frames"))) + (let + ((frame (first (get vm "frames"))) + (rest-frames (rest (get vm "frames")))) + (let + ((bc (get (get (get frame "closure") "vm-code") "vc-bytecode")) + (consts + (get (get (get frame "closure") "vm-code") "vc-constants"))) + (if + (>= (get frame "ip") (len bc)) (dict-set! vm "frames" (list)) - (do - (vm-step vm frame rest-frames bc consts) - (loop)))))))) + (do (vm-step vm frame rest-frames bc consts) (loop)))))))) (loop))) - -;; -------------------------------------------------------------------------- -;; 11. Single step — opcode dispatch -;; -------------------------------------------------------------------------- - -(define vm-step - (fn (vm frame rest-frames bc consts) - (let ((op (frame-read-u8 frame))) +(define + vm-step + (fn + (vm frame rest-frames bc consts) + (let + ((op (frame-read-u8 frame))) (cond - - ;; ---- Constants ---- - (= op 1) ;; OP_CONST - (let ((idx (frame-read-u16 frame))) - (vm-push vm (nth consts idx))) - - (= op 2) ;; OP_NIL - (vm-push vm nil) - - (= op 3) ;; OP_TRUE - (vm-push vm true) - - (= op 4) ;; OP_FALSE - (vm-push vm false) - - (= op 5) ;; OP_POP - (vm-pop vm) - - (= op 6) ;; OP_DUP - (vm-push vm (vm-peek vm)) - - ;; ---- Variable access ---- - (= op 16) ;; OP_LOCAL_GET - (let ((slot (frame-read-u8 frame))) - (vm-push vm (frame-local-get vm frame slot))) - - (= op 17) ;; OP_LOCAL_SET - (let ((slot (frame-read-u8 frame))) - (frame-local-set vm frame slot (vm-peek vm))) - - (= op 18) ;; OP_UPVALUE_GET - (let ((idx (frame-read-u8 frame))) - (vm-push vm (frame-upvalue-get frame idx))) - - (= op 19) ;; OP_UPVALUE_SET - (let ((idx (frame-read-u8 frame))) - (frame-upvalue-set frame idx (vm-peek vm))) - - (= op 20) ;; OP_GLOBAL_GET - (let ((idx (frame-read-u16 frame)) - (name (nth consts idx))) - (vm-push vm (vm-global-get vm frame name))) - - (= op 21) ;; OP_GLOBAL_SET - (let ((idx (frame-read-u16 frame)) - (name (nth consts idx))) - (vm-global-set vm frame name (vm-peek vm))) - - ;; ---- Control flow ---- - (= op 32) ;; OP_JUMP - (let ((offset (frame-read-i16 frame))) - (dict-set! frame "ip" (+ (get frame "ip") offset))) - - (= op 33) ;; OP_JUMP_IF_FALSE - (let ((offset (frame-read-i16 frame)) - (v (vm-pop vm))) - (when (not v) - (dict-set! frame "ip" (+ (get frame "ip") offset)))) - - (= op 34) ;; OP_JUMP_IF_TRUE - (let ((offset (frame-read-i16 frame)) - (v (vm-pop vm))) - (when v - (dict-set! frame "ip" (+ (get frame "ip") offset)))) - - ;; ---- Function calls ---- - (= op 48) ;; OP_CALL - (let ((argc (frame-read-u8 frame)) - (args-rev (list)) - (i 0)) - (define collect-args - (fn () - (when (< i argc) - (set! args-rev (cons (vm-pop vm) args-rev)) - (set! i (+ i 1)) - (collect-args)))) - (collect-args) - (let ((f (vm-pop vm))) - (vm-call vm f args-rev))) - - (= op 49) ;; OP_TAIL_CALL - (let ((argc (frame-read-u8 frame)) - (args-rev (list)) - (i 0)) - (define collect-args - (fn () - (when (< i argc) - (set! args-rev (cons (vm-pop vm) args-rev)) - (set! i (+ i 1)) - (collect-args)))) - (collect-args) - (let ((f (vm-pop vm))) - ;; Drop current frame, reuse stack space — true TCO - (dict-set! vm "frames" rest-frames) - (dict-set! vm "sp" (get frame "base")) - (vm-call vm f args-rev))) - - (= op 50) ;; OP_RETURN - (let ((result (vm-pop vm))) + (= op 1) + (let ((idx (frame-read-u16 frame))) (vm-push vm (nth consts idx))) + (= op 2) + (vm-push vm nil) + (= op 3) + (vm-push vm true) + (= op 4) + (vm-push vm false) + (= op 5) + (vm-pop vm) + (= op 6) + (vm-push vm (vm-peek vm)) + (= op 16) + (let + ((slot (frame-read-u8 frame))) + (vm-push vm (frame-local-get vm frame slot))) + (= op 17) + (let + ((slot (frame-read-u8 frame))) + (frame-local-set vm frame slot (vm-peek vm))) + (= op 18) + (let + ((idx (frame-read-u8 frame))) + (vm-push vm (frame-upvalue-get frame idx))) + (= op 19) + (let + ((idx (frame-read-u8 frame))) + (frame-upvalue-set frame idx (vm-peek vm))) + (= op 20) + (let + ((idx (frame-read-u16 frame)) (name (nth consts idx))) + (vm-push vm (vm-global-get vm frame name))) + (= op 21) + (let + ((idx (frame-read-u16 frame)) (name (nth consts idx))) + (vm-global-set vm frame name (vm-peek vm))) + (= op 32) + (let + ((offset (frame-read-i16 frame))) + (dict-set! frame "ip" (+ (get frame "ip") offset))) + (= op 33) + (let + ((offset (frame-read-i16 frame)) (v (vm-pop vm))) + (when (not v) (dict-set! frame "ip" (+ (get frame "ip") offset)))) + (= op 34) + (let + ((offset (frame-read-i16 frame)) (v (vm-pop vm))) + (when v (dict-set! frame "ip" (+ (get frame "ip") offset)))) + (= op 48) + (let + ((argc (frame-read-u8 frame)) (args-rev (list)) (i 0)) + (define + collect-args + (fn + () + (when + (< i argc) + (set! args-rev (cons (vm-pop vm) args-rev)) + (set! i (+ i 1)) + (collect-args)))) + (collect-args) + (let ((f (vm-pop vm))) (vm-call vm f args-rev))) + (= op 49) + (let + ((argc (frame-read-u8 frame)) (args-rev (list)) (i 0)) + (define + collect-args + (fn + () + (when + (< i argc) + (set! args-rev (cons (vm-pop vm) args-rev)) + (set! i (+ i 1)) + (collect-args)))) + (collect-args) + (let + ((f (vm-pop vm))) (dict-set! vm "frames" rest-frames) (dict-set! vm "sp" (get frame "base")) - (vm-push vm result)) - - (= op 51) ;; OP_CLOSURE - (let ((idx (frame-read-u16 frame)) - (code-val (nth consts idx))) - (let ((cl (vm-create-closure vm frame code-val))) - (vm-push vm cl))) - - (= op 52) ;; OP_CALL_PRIM - (let ((idx (frame-read-u16 frame)) - (argc (frame-read-u8 frame)) - (name (nth consts idx)) - (args-rev (list)) - (i 0)) - (define collect-args - (fn () - (when (< i argc) - (set! args-rev (cons (vm-pop vm) args-rev)) + (vm-call vm f args-rev))) + (= op 50) + (let + ((result (vm-pop vm))) + (dict-set! vm "frames" rest-frames) + (dict-set! vm "sp" (get frame "base")) + (vm-push vm result)) + (= op 51) + (let + ((idx (frame-read-u16 frame)) (code-val (nth consts idx))) + (let + ((cl (vm-create-closure vm frame code-val))) + (vm-push vm cl))) + (= op 52) + (let + ((idx (frame-read-u16 frame)) + (argc (frame-read-u8 frame)) + (name (nth consts idx)) + (args-rev (list)) + (i 0)) + (define + collect-args + (fn + () + (when + (< i argc) + (set! args-rev (cons (vm-pop vm) args-rev)) + (set! i (+ i 1)) + (collect-args)))) + (collect-args) + (vm-push vm (call-primitive name args-rev))) + (= op 64) + (let + ((count (frame-read-u16 frame)) (items-rev (list)) (i 0)) + (define + collect-items + (fn + () + (when + (< i count) + (set! items-rev (cons (vm-pop vm) items-rev)) + (set! i (+ i 1)) + (collect-items)))) + (collect-items) + (vm-push vm items-rev)) + (= op 65) + (let + ((count (frame-read-u16 frame)) (d {}) (i 0)) + (define + collect-pairs + (fn + () + (when + (< i count) + (let + ((v (vm-pop vm)) (k (vm-pop vm))) + (dict-set! d k v) (set! i (+ i 1)) - (collect-args)))) - (collect-args) - (vm-push vm (call-primitive name args-rev))) + (collect-pairs))))) + (collect-pairs) + (vm-push vm d)) + (= op 144) + (let + ((count (frame-read-u8 frame)) (parts-rev (list)) (i 0)) + (define + collect-parts + (fn + () + (when + (< i count) + (set! parts-rev (cons (vm-pop vm) parts-rev)) + (set! i (+ i 1)) + (collect-parts)))) + (collect-parts) + (vm-push vm (apply str parts-rev))) + (= op 128) + (let + ((idx (frame-read-u16 frame)) (name (nth consts idx))) + (dict-set! (get vm "globals") name (vm-peek vm))) + (= op 160) + (let ((b (vm-pop vm)) (a (vm-pop vm))) (vm-push vm (+ a b))) + (= op 161) + (let ((b (vm-pop vm)) (a (vm-pop vm))) (vm-push vm (- a b))) + (= op 162) + (let ((b (vm-pop vm)) (a (vm-pop vm))) (vm-push vm (* a b))) + (= op 163) + (let ((b (vm-pop vm)) (a (vm-pop vm))) (vm-push vm (/ a b))) + (= op 164) + (let ((b (vm-pop vm)) (a (vm-pop vm))) (vm-push vm (= a b))) + (= op 165) + (let ((b (vm-pop vm)) (a (vm-pop vm))) (vm-push vm (< a b))) + (= op 166) + (let ((b (vm-pop vm)) (a (vm-pop vm))) (vm-push vm (> a b))) + (= op 167) + (vm-push vm (not (vm-pop vm))) + (= op 168) + (vm-push vm (len (vm-pop vm))) + (= op 169) + (vm-push vm (first (vm-pop vm))) + (= op 170) + (vm-push vm (rest (vm-pop vm))) + (= op 171) + (let + ((n (vm-pop vm)) (coll (vm-pop vm))) + (vm-push vm (nth coll n))) + (= op 172) + (let + ((coll (vm-pop vm)) (x (vm-pop vm))) + (vm-push vm (cons x coll))) + (= op 173) + (vm-push vm (- 0 (vm-pop vm))) + (= op 174) + (vm-push vm (inc (vm-pop vm))) + (= op 175) + (vm-push vm (dec (vm-pop vm))) + :else (error (str "VM: unknown opcode " op)))))) - ;; ---- Collections ---- - (= op 64) ;; OP_LIST - (let ((count (frame-read-u16 frame)) - (items-rev (list)) - (i 0)) - (define collect-items - (fn () - (when (< i count) - (set! items-rev (cons (vm-pop vm) items-rev)) - (set! i (+ i 1)) - (collect-items)))) - (collect-items) - (vm-push vm items-rev)) - - (= op 65) ;; OP_DICT - (let ((count (frame-read-u16 frame)) - (d {}) - (i 0)) - (define collect-pairs - (fn () - (when (< i count) - (let ((v (vm-pop vm)) - (k (vm-pop vm))) - (dict-set! d k v) - (set! i (+ i 1)) - (collect-pairs))))) - (collect-pairs) - (vm-push vm d)) - - ;; ---- String ops ---- - (= op 144) ;; OP_STR_CONCAT - (let ((count (frame-read-u8 frame)) - (parts-rev (list)) - (i 0)) - (define collect-parts - (fn () - (when (< i count) - (set! parts-rev (cons (vm-pop vm) parts-rev)) - (set! i (+ i 1)) - (collect-parts)))) - (collect-parts) - (vm-push vm (apply str parts-rev))) - - ;; ---- Define ---- - (= op 128) ;; OP_DEFINE - (let ((idx (frame-read-u16 frame)) - (name (nth consts idx))) - (dict-set! (get vm "globals") name (vm-peek vm))) - - ;; ---- Inline primitives ---- - (= op 160) ;; OP_ADD - (let ((b (vm-pop vm)) (a (vm-pop vm))) - (vm-push vm (+ a b))) - (= op 161) ;; OP_SUB - (let ((b (vm-pop vm)) (a (vm-pop vm))) - (vm-push vm (- a b))) - (= op 162) ;; OP_MUL - (let ((b (vm-pop vm)) (a (vm-pop vm))) - (vm-push vm (* a b))) - (= op 163) ;; OP_DIV - (let ((b (vm-pop vm)) (a (vm-pop vm))) - (vm-push vm (/ a b))) - (= op 164) ;; OP_EQ - (let ((b (vm-pop vm)) (a (vm-pop vm))) - (vm-push vm (= a b))) - (= op 165) ;; OP_LT - (let ((b (vm-pop vm)) (a (vm-pop vm))) - (vm-push vm (< a b))) - (= op 166) ;; OP_GT - (let ((b (vm-pop vm)) (a (vm-pop vm))) - (vm-push vm (> a b))) - (= op 167) ;; OP_NOT - (vm-push vm (not (vm-pop vm))) - (= op 168) ;; OP_LEN - (vm-push vm (len (vm-pop vm))) - (= op 169) ;; OP_FIRST - (vm-push vm (first (vm-pop vm))) - (= op 170) ;; OP_REST - (vm-push vm (rest (vm-pop vm))) - (= op 171) ;; OP_NTH - (let ((n (vm-pop vm)) (coll (vm-pop vm))) - (vm-push vm (nth coll n))) - (= op 172) ;; OP_CONS - (let ((coll (vm-pop vm)) (x (vm-pop vm))) - (vm-push vm (cons x coll))) - (= op 173) ;; OP_NEG - (vm-push vm (- 0 (vm-pop vm))) - (= op 174) ;; OP_INC - (vm-push vm (inc (vm-pop vm))) - (= op 175) ;; OP_DEC - (vm-push vm (dec (vm-pop vm))) - - :else - (error (str "VM: unknown opcode " op)))))) - - -;; -------------------------------------------------------------------------- -;; 12. Entry points -;; -------------------------------------------------------------------------- - -;; Execute a closure with arguments — creates a fresh VM. -(define vm-call-closure - (fn (closure args globals) - (let ((vm (make-vm globals))) +(define + vm-call-closure + (fn + (closure args globals) + (let + ((vm (make-vm globals))) (vm-push-frame vm closure args) (vm-run vm) (vm-pop vm)))) -;; Execute a compiled module (top-level bytecode). -(define vm-execute-module - (fn (code globals) - (let ((closure (make-vm-closure code (list) "module" globals nil)) - (vm (make-vm globals))) - (let ((frame (make-vm-frame closure 0))) - ;; Pad local slots - (let ((i 0) - (total (get code "vc-locals"))) - (define pad-loop - (fn () - (when (< i total) +(define + vm-execute-module + (fn + (code globals) + (let + ((closure (make-vm-closure code (list) "module" globals nil)) + (vm (make-vm globals))) + (let + ((frame (make-vm-frame closure 0))) + (let + ((i 0) (total (get code "vc-locals"))) + (define + pad-loop + (fn + () + (when + (< i total) (vm-push vm nil) (set! i (+ i 1)) (pad-loop)))) @@ -609,25 +552,3 @@ (dict-set! vm "frames" (list frame)) (vm-run vm) (vm-pop vm))))) - - -;; -------------------------------------------------------------------------- -;; 13. Platform interface -;; -------------------------------------------------------------------------- -;; -;; Each target must provide: -;; -;; make-vm-stack(size) → opaque stack (array-like) -;; vm-stack-get(stack, idx) → value at index -;; vm-stack-set!(stack, idx, value) → mutate index -;; vm-stack-length(stack) → current capacity -;; vm-stack-copy!(src, dst, count) → copy first count elements -;; -;; cek-call(f, args) → evaluate via CEK machine (fallback) -;; get-primitive(name) → look up primitive by name (returns callable) -;; call-primitive(name, args) → call primitive directly with args list -;; -;; env-parent(env) → parent environment or nil -;; env-has?(env, name) → boolean -;; env-get(env, name) → value -;; env-set!(env, name, value) → mutate binding diff --git a/shared/static/wasm/sx/vm.sxbc b/shared/static/wasm/sx/vm.sxbc index 4609af65..eb9d2e6e 100644 --- a/shared/static/wasm/sx/vm.sxbc +++ b/shared/static/wasm/sx/vm.sxbc @@ -1,3 +1,3 @@ -(sxbc 1 "3a8a55b66b6597f5" +(sxbc 1 "4392516544c7a1c4" (code - :constants ("make-upvalue-cell" {:upvalue-count 0 :arity 1 :constants ("uv-value") :bytecode (1 0 0 16 0 65 1 0 50)} "uv-get" {:upvalue-count 0 :arity 1 :constants ("get" "uv-value") :bytecode (16 0 1 1 0 52 0 0 2 50)} "uv-set!" {:upvalue-count 0 :arity 2 :constants ("dict-set!" "uv-value") :bytecode (16 0 1 1 0 16 1 52 0 0 3 50)} "make-vm-code" {:upvalue-count 0 :arity 4 :constants ("vc-bytecode" "vc-locals" "vc-arity" "vc-constants") :bytecode (1 0 0 16 2 1 1 0 16 1 1 2 0 16 0 1 3 0 16 3 65 4 0 50)} "make-vm-closure" {:upvalue-count 0 :arity 5 :constants ("vm-globals" "vm-upvalues" "vm-name" "vm-code" "vm-closure-env") :bytecode (1 0 0 16 3 1 1 0 16 1 1 2 0 16 2 1 3 0 16 0 1 4 0 16 4 65 5 0 50)} "make-vm-frame" {:upvalue-count 0 :arity 2 :constants ("ip" 0 "closure" "base" "local-cells") :bytecode (1 0 0 1 1 0 1 2 0 16 0 1 3 0 16 1 1 4 0 65 0 0 65 4 0 50)} "make-vm" {:upvalue-count 0 :arity 1 :constants ("sp" 0 "frames" "list" "stack" "make-vm-stack" 4096 "globals") :bytecode (1 0 0 1 1 0 1 2 0 52 3 0 0 1 4 0 1 6 0 52 5 0 1 1 7 0 16 0 65 4 0 50)} "vm-push" {:upvalue-count 0 :arity 2 :constants ("get" "sp" "stack" ">=" "vm-stack-length" "make-vm-stack" "*" 2 "vm-stack-copy!" "dict-set!" "vm-stack-set!" "+" 1) :bytecode (16 0 1 1 0 52 0 0 2 17 2 16 0 1 2 0 52 0 0 2 17 3 16 2 16 3 52 4 0 1 52 3 0 2 33 45 0 16 2 1 7 0 52 6 0 2 52 5 0 1 17 4 16 3 16 4 16 2 52 8 0 3 5 16 0 1 2 0 16 4 52 9 0 3 5 16 4 17 3 32 1 0 2 5 16 3 16 2 16 1 52 10 0 3 5 16 0 1 1 0 16 2 1 12 0 52 11 0 2 52 9 0 3 50)} "vm-pop" {:upvalue-count 0 :arity 1 :constants ("-" "get" "sp" 1 "dict-set!" "vm-stack-get" "stack") :bytecode (16 0 1 2 0 52 1 0 2 1 3 0 52 0 0 2 17 1 16 0 1 2 0 16 1 52 4 0 3 5 16 0 1 6 0 52 1 0 2 16 1 52 5 0 2 50)} "vm-peek" {:upvalue-count 0 :arity 1 :constants ("vm-stack-get" "get" "stack" "-" "sp" 1) :bytecode (16 0 1 2 0 52 1 0 2 16 0 1 4 0 52 1 0 2 1 5 0 52 3 0 2 52 0 0 2 50)} "frame-read-u8" {:upvalue-count 0 :arity 1 :constants ("get" "ip" "closure" "vm-code" "vc-bytecode" "nth" "dict-set!" "+" 1) :bytecode (16 0 1 1 0 52 0 0 2 17 1 16 0 1 2 0 52 0 0 2 1 3 0 52 0 0 2 1 4 0 52 0 0 2 17 2 16 2 16 1 52 5 0 2 17 3 16 0 1 1 0 16 1 1 8 0 52 7 0 2 52 6 0 3 5 16 3 50)} "frame-read-u16" {:upvalue-count 0 :arity 1 :constants ("frame-read-u8" "+" "*" 256) :bytecode (20 0 0 16 0 48 1 17 1 20 0 0 16 0 48 1 17 2 16 1 16 2 1 3 0 52 2 0 2 52 1 0 2 50)} "frame-read-i16" {:upvalue-count 0 :arity 1 :constants ("frame-read-u16" ">=" 32768 "-" 65536) :bytecode (20 0 0 16 0 48 1 17 1 16 1 1 2 0 52 1 0 2 33 12 0 16 1 1 4 0 52 3 0 2 32 2 0 16 1 50)} "vm-push-frame" {:upvalue-count 0 :arity 3 :constants ("make-vm-frame" "get" "sp" "for-each" {:upvalue-count 1 :arity 1 :constants ("vm-push") :bytecode (20 0 0 18 0 16 0 49 2 50)} "len" "vm-code" "vc-locals" "-" ">" 0 {:upvalue-count 4 :arity 0 :constants ("<" "vm-push" "+" 1) :bytecode (18 0 18 1 52 0 0 2 33 28 0 20 1 0 18 2 2 48 2 5 18 0 1 3 0 52 2 0 2 19 0 5 18 3 49 0 32 1 0 2 50)} "dict-set!" "frames" "cons") :bytecode (20 0 0 16 1 16 0 1 2 0 52 1 0 2 48 2 17 3 51 4 0 1 0 16 2 52 3 0 2 5 16 2 52 5 0 1 17 4 16 1 1 6 0 52 1 0 2 1 7 0 52 1 0 2 17 5 16 5 16 4 52 8 0 2 17 6 16 6 1 10 0 52 9 0 2 33 26 0 1 10 0 17 7 51 11 0 1 7 1 6 1 0 1 8 17 8 5 16 8 48 0 32 1 0 2 5 16 0 1 13 0 16 3 16 0 1 13 0 52 1 0 2 52 14 0 2 52 12 0 3 50)} "code-from-value" {:upvalue-count 0 :arity 1 :constants ("Convert a compiler output dict to a vm-code object." "not" "dict?" "make-vm-code" 0 16 "list" "get" "bytecode" "nil?" "constants" "arity" "+") :bytecode (1 0 0 5 16 0 52 2 0 1 52 1 0 1 33 22 0 20 3 0 1 4 0 1 5 0 52 6 0 0 52 6 0 0 49 4 32 112 0 16 0 1 8 0 52 7 0 2 17 1 16 1 52 9 0 1 33 7 0 52 6 0 0 32 2 0 16 1 17 2 16 0 1 10 0 52 7 0 2 17 3 16 3 52 9 0 1 33 7 0 52 6 0 0 32 2 0 16 3 17 4 16 0 1 11 0 52 7 0 2 17 5 16 5 52 9 0 1 33 6 0 1 4 0 32 2 0 16 5 17 6 20 3 0 16 6 16 6 1 5 0 52 12 0 2 16 2 16 4 49 4 50)} "vm-closure?" {:upvalue-count 0 :arity 1 :constants ("dict?" "has-key?" "vm-code") :bytecode (16 0 52 0 0 1 6 33 10 0 5 16 0 1 2 0 52 1 0 2 50)} "vm-call" {:upvalue-count 0 :arity 3 :constants ("vm-closure?" "vm-push-frame" "callable?" "vm-push" "apply" "=" "type-of" "lambda" "component" "island" "cek-call" "error" "str" "VM: not callable: ") :bytecode (20 0 0 16 1 48 1 33 14 0 20 1 0 16 0 16 1 16 2 49 3 32 116 0 20 2 0 16 1 48 1 33 18 0 20 3 0 16 0 16 1 16 2 52 4 0 2 49 2 32 88 0 16 1 52 6 0 1 1 7 0 52 5 0 2 6 34 32 0 5 16 1 52 6 0 1 1 8 0 52 5 0 2 6 34 14 0 5 16 1 52 6 0 1 1 9 0 52 5 0 2 33 19 0 20 3 0 16 0 20 10 0 16 1 16 2 48 2 49 2 32 17 0 1 13 0 16 1 52 6 0 1 52 12 0 2 52 11 0 1 50)} "frame-local-get" {:upvalue-count 0 :arity 3 :constants ("Read a local variable — check shared cells first, then stack." "get" "local-cells" "str" "has-key?" "uv-get" "vm-stack-get" "stack" "+" "base") :bytecode (1 0 0 5 16 1 1 2 0 52 1 0 2 17 3 16 2 52 3 0 1 17 4 16 3 16 4 52 4 0 2 33 16 0 20 5 0 16 3 16 4 52 1 0 2 49 1 32 28 0 16 0 1 7 0 52 1 0 2 16 1 1 9 0 52 1 0 2 16 2 52 8 0 2 52 6 0 2 50)} "frame-local-set" {:upvalue-count 0 :arity 4 :constants ("Write a local variable — to shared cell if captured, else to stack." "get" "local-cells" "str" "has-key?" "uv-set!" "vm-stack-set!" "stack" "+" "base") :bytecode (1 0 0 5 16 1 1 2 0 52 1 0 2 17 4 16 2 52 3 0 1 17 5 16 4 16 5 52 4 0 2 33 18 0 20 5 0 16 4 16 5 52 1 0 2 16 3 49 2 32 30 0 16 0 1 7 0 52 1 0 2 16 1 1 9 0 52 1 0 2 16 2 52 8 0 2 16 3 52 6 0 3 50)} "frame-upvalue-get" {:upvalue-count 0 :arity 2 :constants ("uv-get" "nth" "get" "closure" "vm-upvalues") :bytecode (20 0 0 16 0 1 3 0 52 2 0 2 1 4 0 52 2 0 2 16 1 52 1 0 2 49 1 50)} "frame-upvalue-set" {:upvalue-count 0 :arity 3 :constants ("uv-set!" "nth" "get" "closure" "vm-upvalues") :bytecode (20 0 0 16 0 1 3 0 52 2 0 2 1 4 0 52 2 0 2 16 1 52 1 0 2 16 2 49 2 50)} "vm-global-get" {:upvalue-count 0 :arity 3 :constants ("Look up a global: globals table → closure env chain → primitives." "get" "globals" "has-key?" "closure" "vm-closure-env" "nil?" "get-primitive" "env-walk") :bytecode (1 0 0 5 16 0 1 2 0 52 1 0 2 17 3 16 3 16 2 52 3 0 2 33 11 0 16 3 16 2 52 1 0 2 32 67 0 16 1 1 4 0 52 1 0 2 1 5 0 52 1 0 2 17 4 16 4 52 6 0 1 33 9 0 16 2 52 7 0 1 32 31 0 20 8 0 16 4 16 2 48 2 17 5 16 5 52 6 0 1 33 9 0 16 2 52 7 0 1 32 2 0 16 5 50)} "vm-global-set" {:upvalue-count 0 :arity 4 :constants ("Set a global: write to closure env if name exists there, else globals." "get" "closure" "vm-closure-env" "not" "nil?" "env-walk-set!" "dict-set!" "globals") :bytecode (1 0 0 5 16 1 1 2 0 52 1 0 2 1 3 0 52 1 0 2 17 4 4 17 5 16 4 52 5 0 1 52 4 0 1 33 16 0 20 6 0 16 4 16 2 16 3 48 3 17 5 32 1 0 2 5 16 5 52 4 0 1 33 20 0 16 0 1 8 0 52 1 0 2 16 2 16 3 52 7 0 3 32 1 0 2 50)} "env-walk" {:upvalue-count 0 :arity 2 :constants ("nil?" "env-has?" "env-get" "env-parent" "env-walk") :bytecode (16 0 52 0 0 1 33 4 0 2 32 55 0 20 1 0 16 0 16 1 48 2 33 12 0 20 2 0 16 0 16 1 49 2 32 31 0 20 3 0 16 0 48 1 17 2 16 2 52 0 0 1 33 4 0 2 32 9 0 20 4 0 16 2 16 1 49 2 50)} "env-walk-set!" {:upvalue-count 0 :arity 3 :constants ("nil?" "env-has?" "env-set!" "env-parent" "env-walk-set!") :bytecode (16 0 52 0 0 1 33 4 0 4 32 61 0 20 1 0 16 0 16 1 48 2 33 16 0 20 2 0 16 0 16 1 16 2 48 3 5 3 32 33 0 20 3 0 16 0 48 1 17 3 16 3 52 0 0 1 33 4 0 4 32 11 0 20 4 0 16 3 16 1 16 2 49 3 50)} "vm-create-closure" {:upvalue-count 0 :arity 3 :constants ("Create a closure from a code constant. Reads upvalue descriptors\n from the bytecode stream and captures values from the enclosing frame." "code-from-value" "dict?" "get" "upvalue-count" "nil?" 0 "list" {:upvalue-count 6 :arity 0 :constants ("<" "frame-read-u8" "=" 1 "get" "local-cells" "str" "has-key?" "make-upvalue-cell" "vm-stack-get" "stack" "+" "base" "dict-set!" "nth" "closure" "vm-upvalues" "append!") :bytecode (18 0 18 1 52 0 0 2 33 175 0 20 1 0 18 2 48 1 17 0 20 1 0 18 2 48 1 17 1 16 0 1 3 0 52 2 0 2 33 92 0 18 2 1 5 0 52 4 0 2 17 3 16 1 52 6 0 1 17 4 16 3 16 4 52 7 0 2 33 11 0 16 3 16 4 52 4 0 2 32 48 0 20 8 0 18 3 1 10 0 52 4 0 2 18 2 1 12 0 52 4 0 2 16 1 52 11 0 2 52 9 0 2 48 1 17 5 16 3 16 4 16 5 52 13 0 3 5 16 5 32 22 0 18 2 1 15 0 52 4 0 2 1 16 0 52 4 0 2 16 1 52 14 0 2 17 2 20 17 0 18 4 16 2 48 2 5 18 0 1 3 0 52 11 0 2 19 0 5 18 5 49 0 32 1 0 2 50)} "make-vm-closure" "globals") :bytecode (1 0 0 5 20 1 0 16 2 48 1 17 3 16 2 52 2 0 1 33 31 0 16 2 1 4 0 52 3 0 2 17 5 16 5 52 5 0 1 33 6 0 1 6 0 32 2 0 16 5 32 3 0 1 6 0 17 4 52 7 0 0 17 6 1 6 0 17 7 51 8 0 1 7 1 4 1 1 1 0 1 6 1 8 17 8 5 16 8 48 0 5 16 6 17 5 20 9 0 16 3 16 5 2 16 0 1 10 0 52 3 0 2 2 49 5 50)} "vm-run" {:upvalue-count 0 :arity 2 :constants ("Execute bytecode until all frames are exhausted.\n VmClosure calls push new frames; the loop picks them up.\n OP_TAIL_CALL + VmClosure = true TCO: drop frame, push new, loop." {:upvalue-count 2 :arity 0 :constants ("not" "empty?" "get" "frames" "first" "rest" "closure" "vm-code" "vc-bytecode" "vc-constants" ">=" "ip" "len" "dict-set!" "list" "vm-step") :bytecode (18 0 1 3 0 52 2 0 2 52 1 0 1 52 0 0 1 33 141 0 18 0 1 3 0 52 2 0 2 52 4 0 1 17 0 18 0 1 3 0 52 2 0 2 52 5 0 1 17 1 16 0 1 6 0 52 2 0 2 1 7 0 52 2 0 2 1 8 0 52 2 0 2 17 2 16 0 1 6 0 52 2 0 2 1 7 0 52 2 0 2 1 9 0 52 2 0 2 17 3 16 0 1 11 0 52 2 0 2 16 2 52 12 0 1 52 10 0 2 33 16 0 18 0 1 3 0 52 14 0 0 52 13 0 3 32 20 0 20 15 0 18 0 16 0 16 1 16 2 16 3 48 5 5 18 1 49 0 32 1 0 2 50)}) :bytecode (1 0 0 5 51 1 0 1 0 1 1 17 1 5 16 1 49 0 50)} "vm-step" {:upvalue-count 0 :arity 5 :constants ("frame-read-u8" "=" 1 "frame-read-u16" "vm-push" "nth" 2 3 4 5 "vm-pop" 6 "vm-peek" 16 "frame-local-get" 17 "frame-local-set" 18 "frame-upvalue-get" 19 "frame-upvalue-set" 20 "vm-global-get" 21 "vm-global-set" 32 "frame-read-i16" "dict-set!" "ip" "+" "get" 33 "not" 34 48 "list" 0 {:upvalue-count 5 :arity 0 :constants ("<" "cons" "vm-pop" "+" 1) :bytecode (18 0 18 1 52 0 0 2 33 35 0 20 2 0 18 3 48 1 18 2 52 1 0 2 19 2 5 18 0 1 4 0 52 3 0 2 19 0 5 18 4 49 0 32 1 0 2 50)} "vm-call" 49 "frames" "sp" "base" 50 51 "vm-create-closure" 52 "call-primitive" 64 65 {:upvalue-count 5 :arity 0 :constants ("<" "vm-pop" "dict-set!" "+" 1) :bytecode (18 0 18 1 52 0 0 2 33 48 0 20 1 0 18 2 48 1 17 0 20 1 0 18 2 48 1 17 1 18 3 16 1 16 0 52 2 0 3 5 18 0 1 4 0 52 3 0 2 19 0 5 18 4 49 0 32 1 0 2 50)} 144 "apply" "str" 128 "globals" 160 161 "-" 162 "*" 163 "/" 164 165 "<" 166 ">" 167 168 "len" 169 "first" 170 "rest" 171 172 "cons" 173 174 "inc" 175 "dec" "error" "VM: unknown opcode ") :bytecode (20 0 0 16 1 48 1 17 5 16 5 1 2 0 52 1 0 2 33 27 0 20 3 0 16 1 48 1 17 6 20 4 0 16 0 16 4 16 6 52 5 0 2 49 2 32 109 7 16 5 1 6 0 52 1 0 2 33 11 0 20 4 0 16 0 2 49 2 32 86 7 16 5 1 7 0 52 1 0 2 33 11 0 20 4 0 16 0 3 49 2 32 63 7 16 5 1 8 0 52 1 0 2 33 11 0 20 4 0 16 0 4 49 2 32 40 7 16 5 1 9 0 52 1 0 2 33 10 0 20 10 0 16 0 49 1 32 18 7 16 5 1 11 0 52 1 0 2 33 17 0 20 4 0 16 0 20 12 0 16 0 48 1 49 2 32 245 6 16 5 1 13 0 52 1 0 2 33 30 0 20 0 0 16 1 48 1 17 6 20 4 0 16 0 20 14 0 16 0 16 1 16 6 48 3 49 2 32 203 6 16 5 1 15 0 52 1 0 2 33 30 0 20 0 0 16 1 48 1 17 6 20 16 0 16 0 16 1 16 6 20 12 0 16 0 48 1 49 4 32 161 6 16 5 1 17 0 52 1 0 2 33 28 0 20 0 0 16 1 48 1 17 6 20 4 0 16 0 20 18 0 16 1 16 6 48 2 49 2 32 121 6 16 5 1 19 0 52 1 0 2 33 28 0 20 0 0 16 1 48 1 17 6 20 20 0 16 1 16 6 20 12 0 16 0 48 1 49 3 32 81 6 16 5 1 21 0 52 1 0 2 33 40 0 20 3 0 16 1 48 1 17 6 16 4 16 6 52 5 0 2 17 7 20 4 0 16 0 20 22 0 16 0 16 1 16 7 48 3 49 2 32 29 6 16 5 1 23 0 52 1 0 2 33 40 0 20 3 0 16 1 48 1 17 6 16 4 16 6 52 5 0 2 17 7 20 24 0 16 0 16 1 16 7 20 12 0 16 0 48 1 49 4 32 233 5 16 5 1 25 0 52 1 0 2 33 36 0 20 26 0 16 1 48 1 17 6 16 1 1 28 0 16 1 1 28 0 52 30 0 2 16 6 52 29 0 2 52 27 0 3 32 185 5 16 5 1 31 0 52 1 0 2 33 58 0 20 26 0 16 1 48 1 17 6 20 10 0 16 0 48 1 17 7 16 7 52 32 0 1 33 27 0 16 1 1 28 0 16 1 1 28 0 52 30 0 2 16 6 52 29 0 2 52 27 0 3 32 1 0 2 32 115 5 16 5 1 33 0 52 1 0 2 33 54 0 20 26 0 16 1 48 1 17 6 20 10 0 16 0 48 1 17 7 16 7 33 27 0 16 1 1 28 0 16 1 1 28 0 52 30 0 2 16 6 52 29 0 2 52 27 0 3 32 1 0 2 32 49 5 16 5 1 34 0 52 1 0 2 33 64 0 20 0 0 16 1 48 1 17 6 52 35 0 0 17 7 1 36 0 17 8 51 37 0 1 8 1 6 1 7 1 0 1 9 17 9 5 16 9 48 0 5 20 10 0 16 0 48 1 17 10 20 38 0 16 0 16 10 16 7 49 3 32 229 4 16 5 1 39 0 52 1 0 2 33 95 0 20 0 0 16 1 48 1 17 6 52 35 0 0 17 7 1 36 0 17 8 51 37 0 1 8 1 6 1 7 1 0 1 9 17 9 5 16 9 48 0 5 20 10 0 16 0 48 1 17 10 16 0 1 40 0 16 2 52 27 0 3 5 16 0 1 41 0 16 1 1 42 0 52 30 0 2 52 27 0 3 5 20 38 0 16 0 16 10 16 7 49 3 32 122 4 16 5 1 43 0 52 1 0 2 33 52 0 20 10 0 16 0 48 1 17 6 16 0 1 40 0 16 2 52 27 0 3 5 16 0 1 41 0 16 1 1 42 0 52 30 0 2 52 27 0 3 5 20 4 0 16 0 16 6 49 2 32 58 4 16 5 1 44 0 52 1 0 2 33 44 0 20 3 0 16 1 48 1 17 6 16 4 16 6 52 5 0 2 17 7 20 45 0 16 0 16 1 16 7 48 3 17 8 20 4 0 16 0 16 8 49 2 32 2 4 16 5 1 46 0 52 1 0 2 33 78 0 20 3 0 16 1 48 1 17 6 20 0 0 16 1 48 1 17 7 16 4 16 6 52 5 0 2 17 8 52 35 0 0 17 9 1 36 0 17 10 51 37 0 1 10 1 7 1 9 1 0 1 11 17 11 5 16 11 48 0 5 20 4 0 16 0 16 8 16 9 52 47 0 2 49 2 32 168 3 16 5 1 48 0 52 1 0 2 33 53 0 20 3 0 16 1 48 1 17 6 52 35 0 0 17 7 1 36 0 17 8 51 37 0 1 8 1 6 1 7 1 0 1 9 17 9 5 16 9 48 0 5 20 4 0 16 0 16 7 49 2 32 103 3 16 5 1 49 0 52 1 0 2 33 52 0 20 3 0 16 1 48 1 17 6 65 0 0 17 7 1 36 0 17 8 51 50 0 1 8 1 6 1 0 1 7 1 9 17 9 5 16 9 48 0 5 20 4 0 16 0 16 7 49 2 32 39 3 16 5 1 51 0 52 1 0 2 33 60 0 20 0 0 16 1 48 1 17 6 52 35 0 0 17 7 1 36 0 17 8 51 37 0 1 8 1 6 1 7 1 0 1 9 17 9 5 16 9 48 0 5 20 4 0 16 0 20 53 0 16 7 52 52 0 2 49 2 32 223 2 16 5 1 54 0 52 1 0 2 33 44 0 20 3 0 16 1 48 1 17 6 16 4 16 6 52 5 0 2 17 7 16 0 1 55 0 52 30 0 2 16 7 20 12 0 16 0 48 1 52 27 0 3 32 167 2 16 5 1 56 0 52 1 0 2 33 36 0 20 10 0 16 0 48 1 17 6 20 10 0 16 0 48 1 17 7 20 4 0 16 0 16 7 16 6 52 29 0 2 49 2 32 119 2 16 5 1 57 0 52 1 0 2 33 36 0 20 10 0 16 0 48 1 17 6 20 10 0 16 0 48 1 17 7 20 4 0 16 0 16 7 16 6 52 58 0 2 49 2 32 71 2 16 5 1 59 0 52 1 0 2 33 36 0 20 10 0 16 0 48 1 17 6 20 10 0 16 0 48 1 17 7 20 4 0 16 0 16 7 16 6 52 60 0 2 49 2 32 23 2 16 5 1 61 0 52 1 0 2 33 36 0 20 10 0 16 0 48 1 17 6 20 10 0 16 0 48 1 17 7 20 4 0 16 0 16 7 16 6 52 62 0 2 49 2 32 231 1 16 5 1 63 0 52 1 0 2 33 36 0 20 10 0 16 0 48 1 17 6 20 10 0 16 0 48 1 17 7 20 4 0 16 0 16 7 16 6 52 1 0 2 49 2 32 183 1 16 5 1 64 0 52 1 0 2 33 36 0 20 10 0 16 0 48 1 17 6 20 10 0 16 0 48 1 17 7 20 4 0 16 0 16 7 16 6 52 65 0 2 49 2 32 135 1 16 5 1 66 0 52 1 0 2 33 36 0 20 10 0 16 0 48 1 17 6 20 10 0 16 0 48 1 17 7 20 4 0 16 0 16 7 16 6 52 67 0 2 49 2 32 87 1 16 5 1 68 0 52 1 0 2 33 21 0 20 4 0 16 0 20 10 0 16 0 48 1 52 32 0 1 49 2 32 54 1 16 5 1 69 0 52 1 0 2 33 21 0 20 4 0 16 0 20 10 0 16 0 48 1 52 70 0 1 49 2 32 21 1 16 5 1 71 0 52 1 0 2 33 21 0 20 4 0 16 0 20 10 0 16 0 48 1 52 72 0 1 49 2 32 244 0 16 5 1 73 0 52 1 0 2 33 21 0 20 4 0 16 0 20 10 0 16 0 48 1 52 74 0 1 49 2 32 211 0 16 5 1 75 0 52 1 0 2 33 36 0 20 10 0 16 0 48 1 17 6 20 10 0 16 0 48 1 17 7 20 4 0 16 0 16 7 16 6 52 5 0 2 49 2 32 163 0 16 5 1 76 0 52 1 0 2 33 36 0 20 10 0 16 0 48 1 17 6 20 10 0 16 0 48 1 17 7 20 4 0 16 0 16 7 16 6 52 77 0 2 49 2 32 115 0 16 5 1 78 0 52 1 0 2 33 24 0 20 4 0 16 0 1 36 0 20 10 0 16 0 48 1 52 58 0 2 49 2 32 79 0 16 5 1 79 0 52 1 0 2 33 21 0 20 4 0 16 0 20 10 0 16 0 48 1 52 80 0 1 49 2 32 46 0 16 5 1 81 0 52 1 0 2 33 21 0 20 4 0 16 0 20 10 0 16 0 48 1 52 82 0 1 49 2 32 13 0 1 84 0 16 5 52 53 0 2 52 83 0 1 50)} "vm-call-closure" {:upvalue-count 0 :arity 3 :constants ("make-vm" "vm-push-frame" "vm-run" "vm-pop") :bytecode (20 0 0 16 2 48 1 17 3 20 1 0 16 3 16 0 16 1 48 3 5 20 2 0 16 3 48 1 5 20 3 0 16 3 49 1 50)} "vm-execute-module" {:upvalue-count 0 :arity 2 :constants ("make-vm-closure" "list" "module" "make-vm" "make-vm-frame" 0 "get" "vc-locals" {:upvalue-count 4 :arity 0 :constants ("<" "vm-push" "+" 1) :bytecode (18 0 18 1 52 0 0 2 33 28 0 20 1 0 18 2 2 48 2 5 18 0 1 3 0 52 2 0 2 19 0 5 18 3 49 0 32 1 0 2 50)} "dict-set!" "frames" "vm-run" "vm-pop") :bytecode (20 0 0 16 0 52 1 0 0 1 2 0 16 1 2 48 5 17 2 20 3 0 16 1 48 1 17 3 20 4 0 16 2 1 5 0 48 2 17 4 1 5 0 17 5 16 0 1 7 0 52 6 0 2 17 6 51 8 0 1 5 1 6 1 3 1 7 17 7 5 16 7 48 0 5 16 3 1 10 0 16 4 52 1 0 1 52 9 0 3 5 20 11 0 16 3 48 1 5 20 12 0 16 3 49 1 50)}) :bytecode (51 1 0 128 0 0 5 51 3 0 128 2 0 5 51 5 0 128 4 0 5 51 7 0 128 6 0 5 51 9 0 128 8 0 5 51 11 0 128 10 0 5 51 13 0 128 12 0 5 51 15 0 128 14 0 5 51 17 0 128 16 0 5 51 19 0 128 18 0 5 51 21 0 128 20 0 5 51 23 0 128 22 0 5 51 25 0 128 24 0 5 51 27 0 128 26 0 5 51 29 0 128 28 0 5 51 31 0 128 30 0 5 51 33 0 128 32 0 5 51 35 0 128 34 0 5 51 37 0 128 36 0 5 51 39 0 128 38 0 5 51 41 0 128 40 0 5 51 43 0 128 42 0 5 51 45 0 128 44 0 5 51 47 0 128 46 0 5 51 49 0 128 48 0 5 51 51 0 128 50 0 5 51 53 0 128 52 0 5 51 55 0 128 54 0 5 51 57 0 128 56 0 5 51 59 0 128 58 0 50))) + :constants ("make-upvalue-cell" {:upvalue-count 0 :arity 1 :constants ("uv-value") :bytecode (1 0 0 16 0 65 1 0 50)} "uv-get" {:upvalue-count 0 :arity 1 :constants ("get" "uv-value") :bytecode (16 0 1 1 0 52 0 0 2 50)} "uv-set!" {:upvalue-count 0 :arity 2 :constants ("dict-set!" "uv-value") :bytecode (16 0 1 1 0 16 1 52 0 0 3 50)} "make-vm-code" {:upvalue-count 0 :arity 4 :constants ("vc-bytecode" "vc-locals" "vc-arity" "vc-constants") :bytecode (1 0 0 16 2 1 1 0 16 1 1 2 0 16 0 1 3 0 16 3 65 4 0 50)} "make-vm-closure" {:upvalue-count 0 :arity 5 :constants ("vm-globals" "vm-upvalues" "vm-name" "vm-code" "vm-closure-env") :bytecode (1 0 0 16 3 1 1 0 16 1 1 2 0 16 2 1 3 0 16 0 1 4 0 16 4 65 5 0 50)} "make-vm-frame" {:upvalue-count 0 :arity 2 :constants ("ip" 0 "closure" "base" "local-cells") :bytecode (1 0 0 1 1 0 1 2 0 16 0 1 3 0 16 1 1 4 0 65 0 0 65 4 0 50)} "make-vm" {:upvalue-count 0 :arity 1 :constants ("sp" 0 "frames" "list" "stack" "make-vm-stack" 4096 "globals") :bytecode (1 0 0 1 1 0 1 2 0 52 3 0 0 1 4 0 1 6 0 52 5 0 1 1 7 0 16 0 65 4 0 50)} "vm-push" {:upvalue-count 0 :arity 2 :constants ("get" "sp" "stack" ">=" "vm-stack-length" "make-vm-stack" "*" 2 "vm-stack-copy!" "dict-set!" "vm-stack-set!" "+" 1) :bytecode (16 0 1 1 0 52 0 0 2 17 2 16 0 1 2 0 52 0 0 2 17 3 16 2 16 3 52 4 0 1 52 3 0 2 33 45 0 16 2 1 7 0 52 6 0 2 52 5 0 1 17 4 16 3 16 4 16 2 52 8 0 3 5 16 0 1 2 0 16 4 52 9 0 3 5 16 4 17 3 32 1 0 2 5 16 3 16 2 16 1 52 10 0 3 5 16 0 1 1 0 16 2 1 12 0 52 11 0 2 52 9 0 3 50)} "vm-pop" {:upvalue-count 0 :arity 1 :constants ("-" "get" "sp" 1 "dict-set!" "vm-stack-get" "stack") :bytecode (16 0 1 2 0 52 1 0 2 1 3 0 52 0 0 2 17 1 16 0 1 2 0 16 1 52 4 0 3 5 16 0 1 6 0 52 1 0 2 16 1 52 5 0 2 50)} "vm-peek" {:upvalue-count 0 :arity 1 :constants ("vm-stack-get" "get" "stack" "-" "sp" 1) :bytecode (16 0 1 2 0 52 1 0 2 16 0 1 4 0 52 1 0 2 1 5 0 52 3 0 2 52 0 0 2 50)} "frame-read-u8" {:upvalue-count 0 :arity 1 :constants ("get" "ip" "closure" "vm-code" "vc-bytecode" "nth" "dict-set!" "+" 1) :bytecode (16 0 1 1 0 52 0 0 2 17 1 16 0 1 2 0 52 0 0 2 1 3 0 52 0 0 2 1 4 0 52 0 0 2 17 2 16 2 16 1 52 5 0 2 17 3 16 0 1 1 0 16 1 1 8 0 52 7 0 2 52 6 0 3 5 16 3 50)} "frame-read-u16" {:upvalue-count 0 :arity 1 :constants ("frame-read-u8" "+" "*" 256) :bytecode (20 0 0 16 0 48 1 17 1 20 0 0 16 0 48 1 17 2 16 1 16 2 1 3 0 52 2 0 2 52 1 0 2 50)} "frame-read-i16" {:upvalue-count 0 :arity 1 :constants ("frame-read-u16" ">=" 32768 "-" 65536) :bytecode (20 0 0 16 0 48 1 17 1 16 1 1 2 0 52 1 0 2 33 12 0 16 1 1 4 0 52 3 0 2 32 2 0 16 1 50)} "vm-push-frame" {:upvalue-count 0 :arity 3 :constants ("make-vm-frame" "get" "sp" "for-each" {:upvalue-count 1 :arity 1 :constants ("vm-push") :bytecode (20 0 0 18 0 16 0 49 2 50)} "len" "vm-code" "vc-locals" "-" ">" 0 {:upvalue-count 4 :arity 0 :constants ("<" "vm-push" "+" 1) :bytecode (18 0 18 1 52 0 0 2 33 28 0 20 1 0 18 2 2 48 2 5 18 0 1 3 0 52 2 0 2 19 0 5 18 3 49 0 32 1 0 2 50)} "dict-set!" "frames" "cons") :bytecode (20 0 0 16 1 16 0 1 2 0 52 1 0 2 48 2 17 3 51 4 0 1 0 16 2 52 3 0 2 5 16 2 52 5 0 1 17 4 16 1 1 6 0 52 1 0 2 1 7 0 52 1 0 2 17 5 16 5 16 4 52 8 0 2 17 6 16 6 1 10 0 52 9 0 2 33 26 0 1 10 0 17 7 51 11 0 1 7 1 6 1 0 1 8 17 8 5 16 8 48 0 32 1 0 2 5 16 0 1 13 0 16 3 16 0 1 13 0 52 1 0 2 52 14 0 2 52 12 0 3 50)} "code-from-value" {:upvalue-count 0 :arity 1 :constants ("Convert a compiler output dict to a vm-code object." "not" "dict?" "make-vm-code" 0 16 "list" "get" "bytecode" "nil?" "constants" "arity" "+") :bytecode (1 0 0 5 16 0 52 2 0 1 52 1 0 1 33 22 0 20 3 0 1 4 0 1 5 0 52 6 0 0 52 6 0 0 49 4 32 112 0 16 0 1 8 0 52 7 0 2 17 1 16 1 52 9 0 1 33 7 0 52 6 0 0 32 2 0 16 1 17 2 16 0 1 10 0 52 7 0 2 17 3 16 3 52 9 0 1 33 7 0 52 6 0 0 32 2 0 16 3 17 4 16 0 1 11 0 52 7 0 2 17 5 16 5 52 9 0 1 33 6 0 1 4 0 32 2 0 16 5 17 6 20 3 0 16 6 16 6 1 5 0 52 12 0 2 16 2 16 4 49 4 50)} "vm-closure?" {:upvalue-count 0 :arity 1 :constants ("dict?" "has-key?" "vm-code") :bytecode (16 0 52 0 0 1 6 33 10 0 5 16 0 1 2 0 52 1 0 2 50)} "vm-call" {:upvalue-count 0 :arity 3 :constants ("vm-closure?" "vm-push-frame" "=" "type-of" "lambda" "component" "island" "vm-push" "cek-call" "callable?" "apply" "error" "str" "VM: not callable: ") :bytecode (20 0 0 16 1 48 1 33 14 0 20 1 0 16 0 16 1 16 2 49 3 32 116 0 16 1 52 3 0 1 1 4 0 52 2 0 2 6 34 32 0 5 16 1 52 3 0 1 1 5 0 52 2 0 2 6 34 14 0 5 16 1 52 3 0 1 1 6 0 52 2 0 2 33 19 0 20 7 0 16 0 20 8 0 16 1 16 2 48 2 49 2 32 45 0 20 9 0 16 1 48 1 33 18 0 20 7 0 16 0 16 1 16 2 52 10 0 2 49 2 32 17 0 1 13 0 16 1 52 3 0 1 52 12 0 2 52 11 0 1 50)} "frame-local-get" {:upvalue-count 0 :arity 3 :constants ("Read a local variable — check shared cells first, then stack." "get" "local-cells" "str" "has-key?" "uv-get" "vm-stack-get" "stack" "+" "base") :bytecode (1 0 0 5 16 1 1 2 0 52 1 0 2 17 3 16 2 52 3 0 1 17 4 16 3 16 4 52 4 0 2 33 16 0 20 5 0 16 3 16 4 52 1 0 2 49 1 32 28 0 16 0 1 7 0 52 1 0 2 16 1 1 9 0 52 1 0 2 16 2 52 8 0 2 52 6 0 2 50)} "frame-local-set" {:upvalue-count 0 :arity 4 :constants ("Write a local variable — to shared cell if captured, else to stack." "get" "local-cells" "str" "has-key?" "uv-set!" "vm-stack-set!" "stack" "+" "base") :bytecode (1 0 0 5 16 1 1 2 0 52 1 0 2 17 4 16 2 52 3 0 1 17 5 16 4 16 5 52 4 0 2 33 18 0 20 5 0 16 4 16 5 52 1 0 2 16 3 49 2 32 30 0 16 0 1 7 0 52 1 0 2 16 1 1 9 0 52 1 0 2 16 2 52 8 0 2 16 3 52 6 0 3 50)} "frame-upvalue-get" {:upvalue-count 0 :arity 2 :constants ("uv-get" "nth" "get" "closure" "vm-upvalues") :bytecode (20 0 0 16 0 1 3 0 52 2 0 2 1 4 0 52 2 0 2 16 1 52 1 0 2 49 1 50)} "frame-upvalue-set" {:upvalue-count 0 :arity 3 :constants ("uv-set!" "nth" "get" "closure" "vm-upvalues") :bytecode (20 0 0 16 0 1 3 0 52 2 0 2 1 4 0 52 2 0 2 16 1 52 1 0 2 16 2 49 2 50)} "vm-global-get" {:upvalue-count 0 :arity 3 :constants ("Look up a global: globals table → closure env → primitives → HO wrappers" "get" "globals" "has-key?" "closure" "closure-env" "nil?" "cek-try" {:upvalue-count 1 :arity 0 :constants ("get-primitive") :bytecode (18 0 52 0 0 1 50)} {:upvalue-count 2 :arity 1 :constants ("vm-resolve-ho-form") :bytecode (20 0 0 18 0 18 1 49 2 50)} "env-walk") :bytecode (1 0 0 5 16 0 1 2 0 52 1 0 2 17 3 16 3 16 2 52 3 0 2 33 11 0 16 3 16 2 52 1 0 2 32 89 0 16 1 1 4 0 52 1 0 2 1 5 0 52 1 0 2 17 4 16 4 52 6 0 1 33 20 0 20 7 0 51 8 0 1 2 51 9 0 1 0 1 2 49 2 32 42 0 20 10 0 16 4 16 2 48 2 17 5 16 5 52 6 0 1 33 20 0 20 7 0 51 8 0 1 2 51 9 0 1 0 1 2 49 2 32 2 0 16 5 50)} "vm-resolve-ho-form" {:upvalue-count 0 :arity 2 :constants ("=" "for-each" {:upvalue-count 1 :arity 2 :constants ("for-each" {:upvalue-count 2 :arity 1 :constants ("vm-call-external" "list") :bytecode (20 0 0 18 0 18 1 16 0 52 1 0 1 49 3 50)}) :bytecode (51 1 0 0 0 1 0 16 1 52 0 0 2 50)} "map" {:upvalue-count 1 :arity 2 :constants ("map" {:upvalue-count 2 :arity 1 :constants ("vm-call-external" "list") :bytecode (20 0 0 18 0 18 1 16 0 52 1 0 1 49 3 50)}) :bytecode (51 1 0 0 0 1 0 16 1 52 0 0 2 50)} "map-indexed" {:upvalue-count 1 :arity 2 :constants ("map-indexed" {:upvalue-count 2 :arity 2 :constants ("vm-call-external" "list") :bytecode (20 0 0 18 0 18 1 16 0 16 1 52 1 0 2 49 3 50)}) :bytecode (51 1 0 0 0 1 0 16 1 52 0 0 2 50)} "filter" {:upvalue-count 1 :arity 2 :constants ("filter" {:upvalue-count 2 :arity 1 :constants ("vm-call-external" "list") :bytecode (20 0 0 18 0 18 1 16 0 52 1 0 1 49 3 50)}) :bytecode (51 1 0 0 0 1 0 16 1 52 0 0 2 50)} "reduce" {:upvalue-count 1 :arity 3 :constants ("reduce" {:upvalue-count 2 :arity 2 :constants ("vm-call-external" "list") :bytecode (20 0 0 18 0 18 1 16 0 16 1 52 1 0 2 49 3 50)}) :bytecode (51 1 0 0 0 1 0 16 1 16 2 52 0 0 3 50)} "some" {:upvalue-count 1 :arity 2 :constants ("some" {:upvalue-count 2 :arity 1 :constants ("vm-call-external" "list") :bytecode (20 0 0 18 0 18 1 16 0 52 1 0 1 49 3 50)}) :bytecode (51 1 0 0 0 1 0 16 1 52 0 0 2 50)} "every?" {:upvalue-count 1 :arity 2 :constants ("every?" {:upvalue-count 2 :arity 1 :constants ("vm-call-external" "list") :bytecode (20 0 0 18 0 18 1 16 0 52 1 0 1 49 3 50)}) :bytecode (51 1 0 0 0 1 0 16 1 52 0 0 2 50)} "error" "str" "VM undefined: ") :bytecode (16 1 1 1 0 52 0 0 2 33 8 0 51 2 0 1 0 32 133 0 16 1 1 3 0 52 0 0 2 33 8 0 51 4 0 1 0 32 113 0 16 1 1 5 0 52 0 0 2 33 8 0 51 6 0 1 0 32 93 0 16 1 1 7 0 52 0 0 2 33 8 0 51 8 0 1 0 32 73 0 16 1 1 9 0 52 0 0 2 33 8 0 51 10 0 1 0 32 53 0 16 1 1 11 0 52 0 0 2 33 8 0 51 12 0 1 0 32 33 0 16 1 1 13 0 52 0 0 2 33 8 0 51 14 0 1 0 32 13 0 1 17 0 16 1 52 16 0 2 52 15 0 1 50)} "vm-call-external" {:upvalue-count 0 :arity 3 :constants ("vm-closure?" "vm-call-closure" "get" "globals" "cek-call") :bytecode (20 0 0 16 1 48 1 33 21 0 20 1 0 16 1 16 2 16 0 1 3 0 52 2 0 2 49 3 32 9 0 20 4 0 16 1 16 2 49 2 50)} "vm-global-set" {:upvalue-count 0 :arity 4 :constants ("Set a global: write to closure env if name exists there, else globals." "get" "closure" "vm-closure-env" "not" "nil?" "env-walk-set!" "dict-set!" "globals") :bytecode (1 0 0 5 16 1 1 2 0 52 1 0 2 1 3 0 52 1 0 2 17 4 4 17 5 16 4 52 5 0 1 52 4 0 1 33 16 0 20 6 0 16 4 16 2 16 3 48 3 17 5 32 1 0 2 5 16 5 52 4 0 1 33 20 0 16 0 1 8 0 52 1 0 2 16 2 16 3 52 7 0 3 32 1 0 2 50)} "env-walk" {:upvalue-count 0 :arity 2 :constants ("nil?" "env-has?" "env-get" "env-parent" "env-walk") :bytecode (16 0 52 0 0 1 33 4 0 2 32 55 0 20 1 0 16 0 16 1 48 2 33 12 0 20 2 0 16 0 16 1 49 2 32 31 0 20 3 0 16 0 48 1 17 2 16 2 52 0 0 1 33 4 0 2 32 9 0 20 4 0 16 2 16 1 49 2 50)} "env-walk-set!" {:upvalue-count 0 :arity 3 :constants ("nil?" "env-has?" "env-set!" "env-parent" "env-walk-set!") :bytecode (16 0 52 0 0 1 33 4 0 4 32 61 0 20 1 0 16 0 16 1 48 2 33 16 0 20 2 0 16 0 16 1 16 2 48 3 5 3 32 33 0 20 3 0 16 0 48 1 17 3 16 3 52 0 0 1 33 4 0 4 32 11 0 20 4 0 16 3 16 1 16 2 49 3 50)} "vm-create-closure" {:upvalue-count 0 :arity 3 :constants ("Create a closure from a code constant. Reads upvalue descriptors\n from the bytecode stream and captures values from the enclosing frame." "code-from-value" "dict?" "get" "upvalue-count" "nil?" 0 "list" {:upvalue-count 6 :arity 0 :constants ("<" "frame-read-u8" "=" 1 "get" "local-cells" "str" "has-key?" "make-upvalue-cell" "vm-stack-get" "stack" "+" "base" "dict-set!" "nth" "closure" "vm-upvalues" "append!") :bytecode (18 0 18 1 52 0 0 2 33 175 0 20 1 0 18 2 48 1 17 0 20 1 0 18 2 48 1 17 1 16 0 1 3 0 52 2 0 2 33 92 0 18 2 1 5 0 52 4 0 2 17 3 16 1 52 6 0 1 17 4 16 3 16 4 52 7 0 2 33 11 0 16 3 16 4 52 4 0 2 32 48 0 20 8 0 18 3 1 10 0 52 4 0 2 18 2 1 12 0 52 4 0 2 16 1 52 11 0 2 52 9 0 2 48 1 17 5 16 3 16 4 16 5 52 13 0 3 5 16 5 32 22 0 18 2 1 15 0 52 4 0 2 1 16 0 52 4 0 2 16 1 52 14 0 2 17 2 20 17 0 18 4 16 2 48 2 5 18 0 1 3 0 52 11 0 2 19 0 5 18 5 49 0 32 1 0 2 50)} "make-vm-closure" "globals") :bytecode (1 0 0 5 20 1 0 16 2 48 1 17 3 16 2 52 2 0 1 33 31 0 16 2 1 4 0 52 3 0 2 17 5 16 5 52 5 0 1 33 6 0 1 6 0 32 2 0 16 5 32 3 0 1 6 0 17 4 52 7 0 0 17 6 1 6 0 17 7 51 8 0 1 7 1 4 1 1 1 0 1 6 1 8 17 8 5 16 8 48 0 5 16 6 17 5 20 9 0 16 3 16 5 2 16 0 1 10 0 52 3 0 2 2 49 5 50)} "vm-run" {:upvalue-count 0 :arity 2 :constants ("Execute bytecode until all frames are exhausted.\n VmClosure calls push new frames; the loop picks them up.\n OP_TAIL_CALL + VmClosure = true TCO: drop frame, push new, loop." {:upvalue-count 2 :arity 0 :constants ("not" "empty?" "get" "frames" "first" "rest" "closure" "vm-code" "vc-bytecode" "vc-constants" ">=" "ip" "len" "dict-set!" "list" "vm-step") :bytecode (18 0 1 3 0 52 2 0 2 52 1 0 1 52 0 0 1 33 141 0 18 0 1 3 0 52 2 0 2 52 4 0 1 17 0 18 0 1 3 0 52 2 0 2 52 5 0 1 17 1 16 0 1 6 0 52 2 0 2 1 7 0 52 2 0 2 1 8 0 52 2 0 2 17 2 16 0 1 6 0 52 2 0 2 1 7 0 52 2 0 2 1 9 0 52 2 0 2 17 3 16 0 1 11 0 52 2 0 2 16 2 52 12 0 1 52 10 0 2 33 16 0 18 0 1 3 0 52 14 0 0 52 13 0 3 32 20 0 20 15 0 18 0 16 0 16 1 16 2 16 3 48 5 5 18 1 49 0 32 1 0 2 50)}) :bytecode (1 0 0 5 51 1 0 1 0 1 1 17 1 5 16 1 49 0 50)} "vm-step" {:upvalue-count 0 :arity 5 :constants ("frame-read-u8" "=" 1 "frame-read-u16" "vm-push" "nth" 2 3 4 5 "vm-pop" 6 "vm-peek" 16 "frame-local-get" 17 "frame-local-set" 18 "frame-upvalue-get" 19 "frame-upvalue-set" 20 "vm-global-get" 21 "vm-global-set" 32 "frame-read-i16" "dict-set!" "ip" "+" "get" 33 "not" 34 48 "list" 0 {:upvalue-count 5 :arity 0 :constants ("<" "cons" "vm-pop" "+" 1) :bytecode (18 0 18 1 52 0 0 2 33 35 0 20 2 0 18 3 48 1 18 2 52 1 0 2 19 2 5 18 0 1 4 0 52 3 0 2 19 0 5 18 4 49 0 32 1 0 2 50)} "vm-call" 49 "frames" "sp" "base" 50 51 "vm-create-closure" 52 "call-primitive" 64 65 {:upvalue-count 5 :arity 0 :constants ("<" "vm-pop" "dict-set!" "+" 1) :bytecode (18 0 18 1 52 0 0 2 33 48 0 20 1 0 18 2 48 1 17 0 20 1 0 18 2 48 1 17 1 18 3 16 1 16 0 52 2 0 3 5 18 0 1 4 0 52 3 0 2 19 0 5 18 4 49 0 32 1 0 2 50)} 144 "apply" "str" 128 "globals" 160 161 "-" 162 "*" 163 "/" 164 165 "<" 166 ">" 167 168 "len" 169 "first" 170 "rest" 171 172 "cons" 173 174 "inc" 175 "dec" "error" "VM: unknown opcode ") :bytecode (20 0 0 16 1 48 1 17 5 16 5 1 2 0 52 1 0 2 33 27 0 20 3 0 16 1 48 1 17 6 20 4 0 16 0 16 4 16 6 52 5 0 2 49 2 32 109 7 16 5 1 6 0 52 1 0 2 33 11 0 20 4 0 16 0 2 49 2 32 86 7 16 5 1 7 0 52 1 0 2 33 11 0 20 4 0 16 0 3 49 2 32 63 7 16 5 1 8 0 52 1 0 2 33 11 0 20 4 0 16 0 4 49 2 32 40 7 16 5 1 9 0 52 1 0 2 33 10 0 20 10 0 16 0 49 1 32 18 7 16 5 1 11 0 52 1 0 2 33 17 0 20 4 0 16 0 20 12 0 16 0 48 1 49 2 32 245 6 16 5 1 13 0 52 1 0 2 33 30 0 20 0 0 16 1 48 1 17 6 20 4 0 16 0 20 14 0 16 0 16 1 16 6 48 3 49 2 32 203 6 16 5 1 15 0 52 1 0 2 33 30 0 20 0 0 16 1 48 1 17 6 20 16 0 16 0 16 1 16 6 20 12 0 16 0 48 1 49 4 32 161 6 16 5 1 17 0 52 1 0 2 33 28 0 20 0 0 16 1 48 1 17 6 20 4 0 16 0 20 18 0 16 1 16 6 48 2 49 2 32 121 6 16 5 1 19 0 52 1 0 2 33 28 0 20 0 0 16 1 48 1 17 6 20 20 0 16 1 16 6 20 12 0 16 0 48 1 49 3 32 81 6 16 5 1 21 0 52 1 0 2 33 40 0 20 3 0 16 1 48 1 17 6 16 4 16 6 52 5 0 2 17 7 20 4 0 16 0 20 22 0 16 0 16 1 16 7 48 3 49 2 32 29 6 16 5 1 23 0 52 1 0 2 33 40 0 20 3 0 16 1 48 1 17 6 16 4 16 6 52 5 0 2 17 7 20 24 0 16 0 16 1 16 7 20 12 0 16 0 48 1 49 4 32 233 5 16 5 1 25 0 52 1 0 2 33 36 0 20 26 0 16 1 48 1 17 6 16 1 1 28 0 16 1 1 28 0 52 30 0 2 16 6 52 29 0 2 52 27 0 3 32 185 5 16 5 1 31 0 52 1 0 2 33 58 0 20 26 0 16 1 48 1 17 6 20 10 0 16 0 48 1 17 7 16 7 52 32 0 1 33 27 0 16 1 1 28 0 16 1 1 28 0 52 30 0 2 16 6 52 29 0 2 52 27 0 3 32 1 0 2 32 115 5 16 5 1 33 0 52 1 0 2 33 54 0 20 26 0 16 1 48 1 17 6 20 10 0 16 0 48 1 17 7 16 7 33 27 0 16 1 1 28 0 16 1 1 28 0 52 30 0 2 16 6 52 29 0 2 52 27 0 3 32 1 0 2 32 49 5 16 5 1 34 0 52 1 0 2 33 64 0 20 0 0 16 1 48 1 17 6 52 35 0 0 17 7 1 36 0 17 8 51 37 0 1 8 1 6 1 7 1 0 1 9 17 9 5 16 9 48 0 5 20 10 0 16 0 48 1 17 10 20 38 0 16 0 16 10 16 7 49 3 32 229 4 16 5 1 39 0 52 1 0 2 33 95 0 20 0 0 16 1 48 1 17 6 52 35 0 0 17 7 1 36 0 17 8 51 37 0 1 8 1 6 1 7 1 0 1 9 17 9 5 16 9 48 0 5 20 10 0 16 0 48 1 17 10 16 0 1 40 0 16 2 52 27 0 3 5 16 0 1 41 0 16 1 1 42 0 52 30 0 2 52 27 0 3 5 20 38 0 16 0 16 10 16 7 49 3 32 122 4 16 5 1 43 0 52 1 0 2 33 52 0 20 10 0 16 0 48 1 17 6 16 0 1 40 0 16 2 52 27 0 3 5 16 0 1 41 0 16 1 1 42 0 52 30 0 2 52 27 0 3 5 20 4 0 16 0 16 6 49 2 32 58 4 16 5 1 44 0 52 1 0 2 33 44 0 20 3 0 16 1 48 1 17 6 16 4 16 6 52 5 0 2 17 7 20 45 0 16 0 16 1 16 7 48 3 17 8 20 4 0 16 0 16 8 49 2 32 2 4 16 5 1 46 0 52 1 0 2 33 78 0 20 3 0 16 1 48 1 17 6 20 0 0 16 1 48 1 17 7 16 4 16 6 52 5 0 2 17 8 52 35 0 0 17 9 1 36 0 17 10 51 37 0 1 10 1 7 1 9 1 0 1 11 17 11 5 16 11 48 0 5 20 4 0 16 0 16 8 16 9 52 47 0 2 49 2 32 168 3 16 5 1 48 0 52 1 0 2 33 53 0 20 3 0 16 1 48 1 17 6 52 35 0 0 17 7 1 36 0 17 8 51 37 0 1 8 1 6 1 7 1 0 1 9 17 9 5 16 9 48 0 5 20 4 0 16 0 16 7 49 2 32 103 3 16 5 1 49 0 52 1 0 2 33 52 0 20 3 0 16 1 48 1 17 6 65 0 0 17 7 1 36 0 17 8 51 50 0 1 8 1 6 1 0 1 7 1 9 17 9 5 16 9 48 0 5 20 4 0 16 0 16 7 49 2 32 39 3 16 5 1 51 0 52 1 0 2 33 60 0 20 0 0 16 1 48 1 17 6 52 35 0 0 17 7 1 36 0 17 8 51 37 0 1 8 1 6 1 7 1 0 1 9 17 9 5 16 9 48 0 5 20 4 0 16 0 20 53 0 16 7 52 52 0 2 49 2 32 223 2 16 5 1 54 0 52 1 0 2 33 44 0 20 3 0 16 1 48 1 17 6 16 4 16 6 52 5 0 2 17 7 16 0 1 55 0 52 30 0 2 16 7 20 12 0 16 0 48 1 52 27 0 3 32 167 2 16 5 1 56 0 52 1 0 2 33 36 0 20 10 0 16 0 48 1 17 6 20 10 0 16 0 48 1 17 7 20 4 0 16 0 16 7 16 6 52 29 0 2 49 2 32 119 2 16 5 1 57 0 52 1 0 2 33 36 0 20 10 0 16 0 48 1 17 6 20 10 0 16 0 48 1 17 7 20 4 0 16 0 16 7 16 6 52 58 0 2 49 2 32 71 2 16 5 1 59 0 52 1 0 2 33 36 0 20 10 0 16 0 48 1 17 6 20 10 0 16 0 48 1 17 7 20 4 0 16 0 16 7 16 6 52 60 0 2 49 2 32 23 2 16 5 1 61 0 52 1 0 2 33 36 0 20 10 0 16 0 48 1 17 6 20 10 0 16 0 48 1 17 7 20 4 0 16 0 16 7 16 6 52 62 0 2 49 2 32 231 1 16 5 1 63 0 52 1 0 2 33 36 0 20 10 0 16 0 48 1 17 6 20 10 0 16 0 48 1 17 7 20 4 0 16 0 16 7 16 6 52 1 0 2 49 2 32 183 1 16 5 1 64 0 52 1 0 2 33 36 0 20 10 0 16 0 48 1 17 6 20 10 0 16 0 48 1 17 7 20 4 0 16 0 16 7 16 6 52 65 0 2 49 2 32 135 1 16 5 1 66 0 52 1 0 2 33 36 0 20 10 0 16 0 48 1 17 6 20 10 0 16 0 48 1 17 7 20 4 0 16 0 16 7 16 6 52 67 0 2 49 2 32 87 1 16 5 1 68 0 52 1 0 2 33 21 0 20 4 0 16 0 20 10 0 16 0 48 1 52 32 0 1 49 2 32 54 1 16 5 1 69 0 52 1 0 2 33 21 0 20 4 0 16 0 20 10 0 16 0 48 1 52 70 0 1 49 2 32 21 1 16 5 1 71 0 52 1 0 2 33 21 0 20 4 0 16 0 20 10 0 16 0 48 1 52 72 0 1 49 2 32 244 0 16 5 1 73 0 52 1 0 2 33 21 0 20 4 0 16 0 20 10 0 16 0 48 1 52 74 0 1 49 2 32 211 0 16 5 1 75 0 52 1 0 2 33 36 0 20 10 0 16 0 48 1 17 6 20 10 0 16 0 48 1 17 7 20 4 0 16 0 16 7 16 6 52 5 0 2 49 2 32 163 0 16 5 1 76 0 52 1 0 2 33 36 0 20 10 0 16 0 48 1 17 6 20 10 0 16 0 48 1 17 7 20 4 0 16 0 16 7 16 6 52 77 0 2 49 2 32 115 0 16 5 1 78 0 52 1 0 2 33 24 0 20 4 0 16 0 1 36 0 20 10 0 16 0 48 1 52 58 0 2 49 2 32 79 0 16 5 1 79 0 52 1 0 2 33 21 0 20 4 0 16 0 20 10 0 16 0 48 1 52 80 0 1 49 2 32 46 0 16 5 1 81 0 52 1 0 2 33 21 0 20 4 0 16 0 20 10 0 16 0 48 1 52 82 0 1 49 2 32 13 0 1 84 0 16 5 52 53 0 2 52 83 0 1 50)} "vm-call-closure" {:upvalue-count 0 :arity 3 :constants ("make-vm" "vm-push-frame" "vm-run" "vm-pop") :bytecode (20 0 0 16 2 48 1 17 3 20 1 0 16 3 16 0 16 1 48 3 5 20 2 0 16 3 48 1 5 20 3 0 16 3 49 1 50)} "vm-execute-module" {:upvalue-count 0 :arity 2 :constants ("make-vm-closure" "list" "module" "make-vm" "make-vm-frame" 0 "get" "vc-locals" {:upvalue-count 4 :arity 0 :constants ("<" "vm-push" "+" 1) :bytecode (18 0 18 1 52 0 0 2 33 28 0 20 1 0 18 2 2 48 2 5 18 0 1 3 0 52 2 0 2 19 0 5 18 3 49 0 32 1 0 2 50)} "dict-set!" "frames" "vm-run" "vm-pop") :bytecode (20 0 0 16 0 52 1 0 0 1 2 0 16 1 2 48 5 17 2 20 3 0 16 1 48 1 17 3 20 4 0 16 2 1 5 0 48 2 17 4 1 5 0 17 5 16 0 1 7 0 52 6 0 2 17 6 51 8 0 1 5 1 6 1 3 1 7 17 7 5 16 7 48 0 5 16 3 1 10 0 16 4 52 1 0 1 52 9 0 3 5 20 11 0 16 3 48 1 5 20 12 0 16 3 49 1 50)}) :bytecode (51 1 0 128 0 0 5 51 3 0 128 2 0 5 51 5 0 128 4 0 5 51 7 0 128 6 0 5 51 9 0 128 8 0 5 51 11 0 128 10 0 5 51 13 0 128 12 0 5 51 15 0 128 14 0 5 51 17 0 128 16 0 5 51 19 0 128 18 0 5 51 21 0 128 20 0 5 51 23 0 128 22 0 5 51 25 0 128 24 0 5 51 27 0 128 26 0 5 51 29 0 128 28 0 5 51 31 0 128 30 0 5 51 33 0 128 32 0 5 51 35 0 128 34 0 5 51 37 0 128 36 0 5 51 39 0 128 38 0 5 51 41 0 128 40 0 5 51 43 0 128 42 0 5 51 45 0 128 44 0 5 51 47 0 128 46 0 5 51 49 0 128 48 0 5 51 51 0 128 50 0 5 51 53 0 128 52 0 5 51 55 0 128 54 0 5 51 57 0 128 56 0 5 51 59 0 128 58 0 5 51 61 0 128 60 0 5 51 63 0 128 62 0 50))) diff --git a/shared/static/wasm/sx_browser.bc.wasm.assets/sx-86ee6606.wasm b/shared/static/wasm/sx_browser.bc.wasm.assets/sx-80621fb4.wasm similarity index 99% rename from shared/static/wasm/sx_browser.bc.wasm.assets/sx-86ee6606.wasm rename to shared/static/wasm/sx_browser.bc.wasm.assets/sx-80621fb4.wasm index 90da05f06f9daea5f960461270f239aa2551763a..02e159a58626336f144f15f83d651fcddb1d1727 100644 GIT binary patch delta 178 zcmex)R4h~+vluz1^VBk_v9tYV3RF;Fn{HXlq{$=jmPG+9AhdwBJ++nzh?%#i a*0Qv`6fiI|GE7S{(JN0Z&eh9JEC2v?%Q!Ir delta 169 zcmZoVC;IcOXu}r9x7m!H?eDS~x4+9~s^^vb&d$u7lFO9Bz?gE8L4oPF*ky*_Ou>4h~+vl!W@^VBk_v2*-p3RF 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 -> \"\"\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_file : string option; (** Source file path *)\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 mutable i_file : string option; (** Source file path *)\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\n(* Optional hook: called after every env_bind with (env, name, value).\n Used by browser kernel to sync VM globals table. *)\nlet _env_bind_hook : (env -> string -> value -> unit) option ref = ref None\n\n(* Optional hook: called after VM GLOBAL_SET writes to vm.globals.\n Used by browser kernel to sync mutations back to global_env. *)\nlet _vm_global_set_hook : (string -> value -> unit) option ref = ref None\n\nlet env_bind env name v =\n Hashtbl.replace env.bindings (intern name) v;\n (match !_env_bind_hook with Some f -> f env name v | None -> ());\n 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 begin\n Hashtbl.replace env.bindings id v;\n (match !_env_bind_hook with Some f -> f env (unintern id) v | None -> ());\n Nil\n end 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 -> \"\" | _ -> \"\"\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_file = None; 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 i_file = None;\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_file = function\n | Component c -> (match c.c_file with Some f -> String f | None -> Nil)\n | Island i -> (match i.i_file with Some f -> String f | None -> Nil)\n | _ -> Nil\n\nlet component_set_file v f =\n (match v, f with\n | Component c, String s -> c.c_file <- Some s\n | Island i, String s -> i.i_file <- Some s\n | _ -> ()); Nil\n\nlet component_set_file_b = component_set_file\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 \"\" c.c_name (String.concat \", \" c.c_params)\n | Island i ->\n Printf.sprintf \"\" 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 _ -> \"\"\n | Continuation (_, _) -> \"\"\n | NativeFn (name, _) -> Printf.sprintf \"\" name\n | Signal _ -> \"\"\n | RawHTML s -> Printf.sprintf \"\" (String.length s)\n | Spread _ -> \"\"\n | SxExpr s -> Printf.sprintf \"\" (String.length s)\n | Env _ -> \"\"\n | CekState _ -> \"\"\n | CekFrame f -> Printf.sprintf \"\" f.cf_type\n | VmClosure cl -> Printf.sprintf \"\" (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":101877},"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":106641},"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)\nlet _is_client : bool ref = ref false\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 \"length\" (Hashtbl.find primitives \"len\");\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 (* client? — false by default (server); sx_browser.ml sets _is_client := true *)\n register \"client?\" (fun _args -> Bool !_is_client);\n (* Named stores — global mutable registry, bypasses env scoping issues *)\n let store_registry : (string, value) Hashtbl.t = Hashtbl.create 16 in\n register \"def-store\" (fun args ->\n match args with\n | [String name; init_fn] ->\n if not (Hashtbl.mem store_registry name) then begin\n let store = !_sx_trampoline_fn (!_sx_call_fn init_fn []) in\n Hashtbl.replace store_registry name store\n end;\n (match Hashtbl.find_opt store_registry name with Some v -> v | None -> Nil)\n | _ -> raise (Eval_error \"def-store: expected (name init-fn)\"));\n register \"use-store\" (fun args ->\n match args with\n | [String name] ->\n (match Hashtbl.find_opt store_registry name with\n | Some v -> v\n | None -> raise (Eval_error (\"Store not found: \" ^ name)))\n | _ -> raise (Eval_error \"use-store: expected (name)\"));\n register \"clear-stores\" (fun _args -> Hashtbl.clear store_registry; Nil);\n (* SSR stubs — resource returns loading state on server.\n NOTE: effect and register-in-scope must NOT be registered as primitives\n here — the bytecode compiler uses primitive? to decide CALL_PRIM vs\n GLOBAL_GET+CALL. If effect is a primitive, bytecoded modules emit\n CALL_PRIM which returns Nil instead of calling the real effect function\n from core-signals.sx. The server overrides effect in sx_server.ml via\n env_bind AFTER compilation. *)\n (* register \"effect\" — REMOVED: see note above *)\n (* register \"register-in-scope\" — REMOVED: see note above *)\n (* resource — SSR stub: return signal with {loading: true}, client hydrates real fetch *)\n register \"resource\" (fun _args ->\n let state = Hashtbl.create 8 in\n Hashtbl.replace state \"loading\" (Bool true);\n Hashtbl.replace state \"data\" Nil;\n Hashtbl.replace state \"error\" Nil;\n let sig_d = Hashtbl.create 8 in\n Hashtbl.replace sig_d \"__signal\" (Bool true);\n Hashtbl.replace sig_d \"value\" (Dict state);\n Hashtbl.replace sig_d \"subscribers\" (List []);\n Hashtbl.replace sig_d \"deps\" (List []);\n Dict sig_d);\n register \"apply\" (fun args ->\n let call f a =\n match f with\n | NativeFn (_, fn) -> fn a\n | _ -> !_sx_trampoline_fn (!_sx_call_fn f a)\n in\n match args with\n | [f; (List a | ListRef { contents = a })] -> call f a\n | [f; Nil] -> call 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 let rec find = function\n | [] -> Bool false\n | x :: rest ->\n let result = call_any f [x] in\n if sx_truthy result then result else find rest\n in find items\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 \"component-file\" (fun args ->\n match args with [v] -> component_file v | _ -> Nil);\n register \"component-set-file!\" (fun args ->\n match args with [v; f] -> component_set_file v f | _ -> 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":144162},"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 | _ ->\n let nargs = List.length args in\n let args_preview = if nargs = 0 then \"\" else\n let s = String.concat \", \" (List.map (fun a -> let s = inspect a in if String.length s > 40 then String.sub s 0 40 ^ \"..\" else s) args) in\n \" with args=[\" ^ s ^ \"]\" in\n raise (Eval_error (\"Not callable: \" ^ inspect f ^ args_preview))\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 | \"file\" -> f.cf_env\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(* mutable_list — mutable list for bytecode compiler pool entries *)\nlet mutable_list () = ListRef (ref [])\n\n","(* generated code *)"],"names":[],"mappings":"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","ignoreList":[1]}},{"offset":{"line":0,"column":156489},"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(* Component trace — captures kont from last CEK error for diagnostics *)\nlet _last_error_kont : value ref = ref Nil\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(* make-comp-trace-frame *)\nand make_comp_trace_frame name file =\n (CekFrame { cf_type = \"comp-trace\"; cf_env = file; 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(* kont-collect-comp-trace *)\nand kont_collect_comp_trace kont =\n (if sx_truthy ((empty_p (kont))) then (List []) else (let frame = (first (kont)) in (if sx_truthy ((prim_call \"=\" [(frame_type (frame)); (String \"comp-trace\")])) then (cons ((let _d = Hashtbl.create 2 in Hashtbl.replace _d \"file\" (get (frame) ((String \"file\"))); Hashtbl.replace _d \"name\" (get (frame) ((String \"name\"))); Dict _d)) ((kont_collect_comp_trace ((rest (kont)))))) else (kont_collect_comp_trace ((rest (kont)))))))\n\n(* make-handler-frame *)\nand make_handler_frame handlers remaining env =\n (CekFrame { cf_type = \"handler\"; cf_env = env; cf_name = Nil; cf_body = Nil; cf_remaining = remaining; cf_f = handlers; cf_args = Nil; cf_results = Nil; cf_extra = Nil; cf_extra2 = Nil })\n\n(* make-restart-frame *)\nand make_restart_frame restarts remaining env =\n (CekFrame { cf_type = \"restart\"; cf_env = env; cf_name = Nil; cf_body = Nil; cf_remaining = remaining; cf_f = restarts; cf_args = Nil; cf_results = Nil; cf_extra = Nil; cf_extra2 = Nil })\n\n(* make-signal-return-frame *)\nand make_signal_return_frame env saved_kont =\n (CekFrame { cf_type = \"signal-return\"; cf_env = env; cf_name = Nil; cf_body = Nil; cf_remaining = Nil; cf_f = saved_kont; cf_args = Nil; cf_results = Nil; cf_extra = Nil; cf_extra2 = Nil })\n\n(* find-matching-handler *)\nand find_matching_handler handlers condition =\n (if sx_truthy ((empty_p (handlers))) then Nil else (let pair = (first (handlers)) in (let pred = (first (pair)) in let handler_fn = (nth (pair) ((Number 1.0))) in (if sx_truthy ((cek_call (pred) ((List [condition])))) then handler_fn else (find_matching_handler ((rest (handlers))) (condition))))))\n\n(* kont-find-handler *)\nand kont_find_handler kont condition =\n (if sx_truthy ((empty_p (kont))) then Nil else (let frame = (first (kont)) in (if sx_truthy ((prim_call \"=\" [(frame_type (frame)); (String \"handler\")])) then (let match' = (find_matching_handler ((get (frame) ((String \"f\")))) (condition)) in (if sx_truthy ((is_nil (match'))) then (kont_find_handler ((rest (kont))) (condition)) else match')) else (kont_find_handler ((rest (kont))) (condition)))))\n\n(* find-named-restart *)\nand find_named_restart restarts name =\n (if sx_truthy ((empty_p (restarts))) then Nil else (let entry = (first (restarts)) in (if sx_truthy ((prim_call \"=\" [(first (entry)); name])) then entry else (find_named_restart ((rest (restarts))) (name)))))\n\n(* kont-find-restart *)\nand kont_find_restart kont name =\n (if sx_truthy ((empty_p (kont))) then Nil else (let frame = (first (kont)) in (if sx_truthy ((prim_call \"=\" [(frame_type (frame)); (String \"restart\")])) then (let match' = (find_named_restart ((get (frame) ((String \"f\")))) (name)) in (if sx_truthy ((is_nil (match'))) then (kont_find_restart ((rest (kont))) (name)) else (List [match'; frame; (rest (kont))]))) else (kont_find_restart ((rest (kont))) (name)))))\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(* call-lambda *)\nand call_lambda f args caller_env =\n (let params = (lambda_params (f)) in let local = (env_merge ((lambda_closure (f))) (caller_env)) in (if sx_truthy ((prim_call \">\" [(len (args)); (len (params))])) then (raise (Eval_error (value_to_str (String (sx_str [(let _or = (lambda_name (f)) in if sx_truthy _or then _or else (String \"lambda\")); (String \" expects \"); (len (params)); (String \" args, got \"); (len (args))]))))) else (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\" [params; args])); Nil)) in (let () = ignore ((List.iter (fun p -> ignore ((env_bind local (sx_to_string p) Nil))) (sx_to_list (prim_call \"slice\" [params; (len (args))])); Nil)) in (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 (trampoline (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 ((if sx_truthy ((env_has (env) ((String \"*current-file*\")))) then (component_set_file_b (comp) ((env_get (env) ((String \"*current-file*\"))))) 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 *)\nand sf_defisland args env =\n (let name_sym = (first (args)) in let params_raw = (nth (args) ((Number 1.0))) in let body_exprs = (prim_call \"slice\" [args; (Number 2.0)]) 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 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 ((if sx_truthy ((env_has (env) ((String \"*current-file*\")))) then (component_set_file_b (island) ((env_get (env) ((String \"*current-file*\"))))) else Nil)) 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/WASM stack overflow *)\nand cek_run state =\n let s = ref state in\n (try\n while not (sx_truthy (cek_terminal_p !s)) do\n s := cek_step !s\n done;\n cek_value !s\n with Eval_error msg ->\n (if !_last_error_kont = Nil then _last_error_kont := cek_kont !s);\n raise (Eval_error msg))\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 \"handler-bind\")])) then (step_sf_handler_bind (args) (env) (kont)) else (if sx_truthy ((prim_call \"=\" [name; (String \"restart-case\")])) then (step_sf_restart_case (args) (env) (kont)) else (if sx_truthy ((prim_call \"=\" [name; (String \"signal-condition\")])) then (step_sf_signal (args) (env) (kont)) else (if sx_truthy ((prim_call \"=\" [name; (String \"invoke-restart\")])) then (step_sf_invoke_restart (args) (env) (kont)) else (if sx_truthy ((prim_call \"=\" [name; (String \"match\")])) then (step_sf_match (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(* match-find-clause *)\nand match_find_clause val' clauses env =\n (if sx_truthy ((empty_p (clauses))) then Nil else (let clause = (first (clauses)) in let pattern = (first (clause)) in let body = (nth (clause) ((Number 1.0))) in let local = (env_extend (env)) in (if sx_truthy ((match_pattern (pattern) (val') (local))) then (List [local; body]) else (match_find_clause (val') ((rest (clauses))) (env)))))\n\n(* match-pattern *)\nand match_pattern pattern value env =\n (if sx_truthy ((prim_call \"=\" [pattern; (Symbol \"_\")])) then (Bool true) else (if sx_truthy ((let _and = (list_p (pattern)) in if not (sx_truthy _and) then _and else (let _and = (prim_call \"=\" [(len (pattern)); (Number 2.0)]) in if not (sx_truthy _and) then _and else (prim_call \"=\" [(first (pattern)); (Symbol \"?\")])))) then (let pred = (trampoline ((eval_expr ((nth (pattern) ((Number 1.0)))) (env)))) in (cek_call (pred) ((List [value])))) else (if sx_truthy ((let _and = (list_p (pattern)) in if not (sx_truthy _and) then _and else (let _and = (Bool (not (sx_truthy ((empty_p (pattern)))))) in if not (sx_truthy _and) then _and else (prim_call \"=\" [(first (pattern)); (Symbol \"quote\")])))) then (prim_call \"=\" [value; (nth (pattern) ((Number 1.0)))]) else (if sx_truthy ((symbol_p (pattern))) then (let () = ignore ((env_bind env (sx_to_string (symbol_name (pattern))) value)) in (Bool true)) else (if sx_truthy ((let _and = (list_p (pattern)) in if not (sx_truthy _and) then _and else (list_p (value)))) then (if sx_truthy ((Bool (not (sx_truthy ((prim_call \"=\" [(len (pattern)); (len (value))])))))) then (Bool false) else (let pairs = (prim_call \"zip\" [pattern; value]) in (Bool (List.for_all (fun pair -> sx_truthy ((match_pattern ((first (pair))) ((nth (pair) ((Number 1.0)))) (env)))) (sx_to_list pairs))))) else (prim_call \"=\" [pattern; value]))))))\n\n(* step-sf-match *)\nand step_sf_match args env kont =\n (let val' = (trampoline ((eval_expr ((first (args))) (env)))) in let clauses = (rest (args)) in (let result' = (match_find_clause (val') (clauses) (env)) in (if sx_truthy ((is_nil (result'))) then (raise (Eval_error (value_to_str (String (sx_str [(String \"match: no clause matched \"); (inspect (val'))]))))) else (make_cek_state ((nth (result') ((Number 1.0)))) ((first (result'))) (kont)))))\n\n(* step-sf-handler-bind *)\nand step_sf_handler_bind args env kont =\n (let handler_specs = (first (args)) in let body = (rest (args)) in let handlers = (List (List.map (fun spec -> (List [(trampoline ((eval_expr ((first (spec))) (env)))); (trampoline ((eval_expr ((nth (spec) ((Number 1.0)))) (env))))])) (sx_to_list handler_specs))) in (if sx_truthy ((empty_p (body))) then (make_cek_value (Nil) (env) (kont)) else (make_cek_state ((first (body))) (env) ((kont_push ((make_handler_frame (handlers) ((rest (body))) (env))) (kont))))))\n\n(* step-sf-restart-case *)\nand step_sf_restart_case args env kont =\n (let body = (first (args)) in let restart_specs = (rest (args)) in let restarts = (List (List.map (fun spec -> (List [(if sx_truthy ((symbol_p ((first (spec))))) then (symbol_name ((first (spec)))) else (first (spec))); (nth (spec) ((Number 1.0))); (nth (spec) ((Number 2.0)))])) (sx_to_list restart_specs))) in (make_cek_state (body) (env) ((kont_push ((make_restart_frame (restarts) ((List [])) (env))) (kont)))))\n\n(* step-sf-signal *)\nand step_sf_signal args env kont =\n (let condition = (trampoline ((eval_expr ((first (args))) (env)))) in let handler_fn = (kont_find_handler (kont) (condition)) in (if sx_truthy ((is_nil (handler_fn))) then (raise (Eval_error (value_to_str (String (sx_str [(String \"Unhandled condition: \"); (inspect (condition))]))))) else (continue_with_call (handler_fn) ((List [condition])) (env) ((List [condition])) ((kont_push ((make_signal_return_frame (env) (kont))) (kont))))))\n\n(* step-sf-invoke-restart *)\nand step_sf_invoke_restart args env kont =\n (let restart_name = (let rn = (if sx_truthy ((symbol_p ((first (args))))) then (symbol_name ((first (args)))) else (trampoline ((eval_expr ((first (args))) (env))))) in (if sx_truthy ((symbol_p (rn))) then (symbol_name (rn)) else rn)) in let restart_arg = (if sx_truthy ((prim_call \">=\" [(len (args)); (Number 2.0)])) then (trampoline ((eval_expr ((nth (args) ((Number 1.0)))) (env)))) else Nil) in let found = (kont_find_restart (kont) (restart_name)) in (if sx_truthy ((is_nil (found))) then (raise (Eval_error (value_to_str (String (sx_str [(String \"No restart named: \"); (inspect (restart_name))]))))) else (let entry = (first (found)) in let restart_frame = (nth (found) ((Number 1.0))) in let rest_kont = (nth (found) ((Number 2.0))) in (let params = (nth (entry) ((Number 1.0))) in let body = (nth (entry) ((Number 2.0))) in let restart_env = (env_extend ((get (restart_frame) ((String \"env\"))))) in (let () = ignore ((if sx_truthy ((Bool (not (sx_truthy ((empty_p (params))))))) then (env_bind restart_env (sx_to_string (first (params))) restart_arg) else Nil)) in (make_cek_state (body) (restart_env) (rest_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 ((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 — check kont provide frames first, then fall back to scope_stacks *)\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 (if sx_truthy ((Bool (not (sx_truthy ((is_nil (frame))))))) then (make_cek_value ((get (frame) ((String \"value\")))) (env) (kont)) else (let scope_val = (sx_context (name) (Nil)) in (make_cek_value ((if sx_truthy ((is_nil (scope_val))) then default_val else scope_val)) (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 (if sx_truthy ((prim_call \"=\" [ft; (String \"handler\")])) 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_handler_frame ((get (frame) ((String \"f\")))) ((rest (remaining))) (fenv))) (rest_k)))))) else (if sx_truthy ((prim_call \"=\" [ft; (String \"restart\")])) then (make_cek_value (value) (env) (rest_k)) else (if sx_truthy ((prim_call \"=\" [ft; (String \"signal-return\")])) then (let saved_kont = (get (frame) ((String \"f\"))) in (make_cek_value (value) ((get (frame) ((String \"env\")))) (saved_kont))) else (if sx_truthy ((prim_call \"=\" [ft; (String \"comp-trace\")])) then (make_cek_value (value) (env) (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 params = (lambda_params (f)) in let local = (env_merge ((lambda_closure (f))) (env)) in (if sx_truthy ((prim_call \">\" [(len (args)); (len (params))])) then (raise (Eval_error (value_to_str (String (sx_str [(let _or = (lambda_name (f)) in if sx_truthy _or then _or else (String \"lambda\")); (String \" expects \"); (len (params)); (String \" args, got \"); (len (args))]))))) else (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\" [params; args])); Nil)) in (let () = ignore ((List.iter (fun p -> ignore ((env_bind local (sx_to_string p) Nil))) (sx_to_list (prim_call \"slice\" [params; (len (args))])); Nil)) 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_push ((make_comp_trace_frame ((component_name (f))) ((component_file (f))))) (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(* Collect component trace from a kont value *)\nlet collect_comp_trace kont =\n let trace = ref [] in\n let k = ref kont in\n while (match !k with List (_::_) -> true | _ -> false) do\n (match !k with\n | List (frame :: rest) ->\n (match frame with\n | CekFrame f when f.cf_type = \"comp-trace\" ->\n let name = match f.cf_name with String s -> s | _ -> \"?\" in\n let file = match f.cf_env with String s -> s | Nil -> \"\" | _ -> \"\" in\n trace := (name, file) :: !trace\n | Dict d when (match Hashtbl.find_opt d \"type\" with Some (String \"comp-trace\") -> true | _ -> false) ->\n let name = match Hashtbl.find_opt d \"name\" with Some (String s) -> s | _ -> \"?\" in\n let file = match Hashtbl.find_opt d \"file\" with Some (String s) -> s | _ -> \"\" in\n trace := (name, file) :: !trace\n | _ -> ());\n k := List rest\n | _ -> k := List [])\n done;\n List.rev !trace\n\n(* Format a comp-trace into a human-readable string *)\nlet format_comp_trace trace =\n match trace with\n | [] -> \"\"\n | entries ->\n let lines = List.mapi (fun i (name, file) ->\n let prefix = if i = 0 then \" in \" else \" called from \" in\n if file = \"\" then prefix ^ \"~\" ^ name\n else prefix ^ \"~\" ^ name ^ \" (\" ^ file ^ \")\"\n ) entries in\n \"\n\" ^ String.concat \"\n\" lines\n\n(* Enhance an error message with component trace *)\nlet enhance_error_with_trace msg =\n let trace = collect_comp_trace !_last_error_kont in\n _last_error_kont := Nil;\n msg ^ (format_comp_trace trace)\n\n\n\n","(* generated code *)"],"names":[],"mappings":"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","ignoreList":[1]}},{"offset":{"line":0,"column":230630},"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\n(** Current active VM — allows HO primitives (map, filter, for-each, some)\n to call VmClosure callbacks on the same VM instead of creating a new one.\n This is critical: creating a new VM per callback loses the calling VM's\n stack/frame context, causing upvalue-captured host objects to become\n inaccessible. *)\nlet _active_vm : vm option ref = ref None\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 prev_vm = !_active_vm in\n let vm = create globals in\n _active_vm := Some vm;\n push_closure_frame vm cl args;\n (try run vm with e -> _active_vm := prev_vm; raise e);\n _active_vm := prev_vm;\n pop vm\n\n(** Call a VmClosure on the active VM if one exists, otherwise create a new one.\n This is the path used by HO primitives (map, filter, for-each, some) so\n callbacks can access upvalues that reference the calling VM's state. *)\nand call_closure_reuse cl args =\n call_closure cl args cl.vm_env_ref\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 _e ->\n (* Fallback to CEK — data-dependent error, not a JIT bug.\n Dedup logging happens in register_jit_hook. *)\n 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 _e -> 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 begin\n (* Bytecode exhausted without explicit RETURN — pop frame like RETURN *)\n let fn_name = match frame.closure.vm_name with Some n -> n | None -> \"?\" in\n Printf.eprintf \"[vm] WARN: bytecode exhausted without RETURN in %s (base=%d sp=%d frames=%d)\\n%!\"\n fn_name frame.base vm.sp (List.length rest_frames);\n let result = if vm.sp > frame.base then pop vm else Nil in\n vm.frames <- rest_frames;\n vm.sp <- frame.base;\n if rest_frames <> [] then push vm result\n (* If no more frames, result stays on stack for call_closure to pop *)\n end\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 begin\n let v = peek vm in\n Hashtbl.replace vm.globals name v;\n (match !Sx_types._vm_global_set_hook with Some f -> f name v | None -> ())\n end\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 = frame.closure.vm_closure_env } 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 | VmClosure _ | Lambda _ | Component _ | Island _ ->\n Sx_ref.cek_call fn_val (List 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 (match !Sx_types._vm_global_set_hook with\n | Some f -> f name v | None -> ())\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 -> \"\" 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 (* Use Symbol \"compile\" so the CEK resolves it from the env, not\n an embedded VmClosure value — the CEK dispatches VmClosure calls\n differently when the value is resolved from env vs embedded in AST. *)\n ignore compile_fn;\n let compile_env = Sx_types.env_extend (Sx_types.make_env ()) in\n Hashtbl.iter (fun k v -> Hashtbl.replace compile_env.bindings (Sx_types.intern k) v) globals;\n let result = Sx_ref.eval_expr (List [Symbol \"compile\"; quoted]) (Env compile_env) in\n (* Closure vars are accessible via vm_closure_env (set on the VmClosure\n at line ~617). OP_GLOBAL_GET falls back to vm_closure_env when vars\n aren't in globals. No injection into the shared globals table —\n that would break closure isolation for factory functions like\n make-page-fn where multiple closures capture different values\n for the same variable names. *)\n let effective_globals = globals 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\n\n(** {1 Debugging / introspection} *)\n\n(** Map opcode integer to human-readable name. *)\nlet opcode_name = function\n | 1 -> \"CONST\" | 2 -> \"NIL\" | 3 -> \"TRUE\" | 4 -> \"FALSE\"\n | 5 -> \"POP\" | 6 -> \"DUP\"\n | 16 -> \"LOCAL_GET\" | 17 -> \"LOCAL_SET\"\n | 18 -> \"UPVALUE_GET\" | 19 -> \"UPVALUE_SET\"\n | 20 -> \"GLOBAL_GET\" | 21 -> \"GLOBAL_SET\"\n | 32 -> \"JUMP\" | 33 -> \"JUMP_IF_FALSE\" | 34 -> \"JUMP_IF_TRUE\"\n | 48 -> \"CALL\" | 49 -> \"TAIL_CALL\" | 50 -> \"RETURN\"\n | 51 -> \"CLOSURE\" | 52 -> \"CALL_PRIM\"\n | 64 -> \"LIST\" | 65 -> \"DICT\"\n | 128 -> \"DEFINE\"\n | 144 -> \"STR_CONCAT\"\n | 160 -> \"ADD\" | 161 -> \"SUB\" | 162 -> \"MUL\" | 163 -> \"DIV\"\n | 164 -> \"EQ\" | 165 -> \"LT\" | 166 -> \"GT\" | 167 -> \"NOT\"\n | 168 -> \"LEN\" | 169 -> \"FIRST\" | 170 -> \"REST\" | 171 -> \"NTH\"\n | 172 -> \"CONS\" | 173 -> \"NEG\" | 174 -> \"INC\" | 175 -> \"DEC\"\n | n -> Printf.sprintf \"UNKNOWN_%d\" n\n\n(** Number of extra operand bytes consumed by each opcode.\n Returns (format, total_bytes) where format describes the operand types. *)\nlet opcode_operand_size = function\n | 1 (* CONST *) | 20 (* GLOBAL_GET *) | 21 (* GLOBAL_SET *)\n | 64 (* LIST *) | 65 (* DICT *) | 128 (* DEFINE *) -> 2 (* u16 *)\n | 16 (* LOCAL_GET *) | 17 (* LOCAL_SET *)\n | 18 (* UPVALUE_GET *) | 19 (* UPVALUE_SET *)\n | 48 (* CALL *) | 49 (* TAIL_CALL *)\n | 144 (* STR_CONCAT *) -> 1 (* u8 *)\n | 32 (* JUMP *) | 33 (* JUMP_IF_FALSE *) | 34 (* JUMP_IF_TRUE *) -> 2 (* i16 *)\n | 51 (* CLOSURE *) -> 2 (* u16 for constant index; upvalue descriptors follow dynamically *)\n | 52 (* CALL_PRIM *) -> 3 (* u16 + u8 *)\n | _ -> 0 (* no operand *)\n\n(** Trace a single execution — compile + run, collecting trace entries.\n Each entry is a dict with :opcode, :stack, :depth. *)\nlet trace_run src globals =\n (* Compile *)\n let compile_fn = try Hashtbl.find globals \"compile\"\n with Not_found -> raise (Eval_error \"trace: compiler not loaded\") in\n let exprs = Sx_parser.parse_all src in\n let expr = match exprs with [e] -> e | _ -> List (Symbol \"do\" :: exprs) in\n let quoted = List [Symbol \"quote\"; expr] in\n let code_val = Sx_ref.eval_expr (List [compile_fn; quoted]) (Env (make_env ())) in\n let code = code_from_value code_val in\n let cl = { vm_code = code; vm_upvalues = [||]; vm_name = Some \"trace\";\n vm_env_ref = globals; vm_closure_env = None } in\n let vm = create globals in\n let frame0 = { 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 <- [frame0];\n (* Run with tracing *)\n let trace = ref [] in\n let max_steps = 10000 in\n let steps = ref 0 in\n (try\n while vm.frames <> [] && !steps < max_steps do\n match vm.frames with\n | [] -> ()\n | frame :: _ ->\n let bc = frame.closure.vm_code.vc_bytecode in\n if frame.ip >= Array.length bc then\n vm.frames <- []\n else begin\n let op = bc.(frame.ip) in\n (* Snapshot stack top 5 *)\n let stack_snap = List.init (min 5 vm.sp) (fun i ->\n let v = vm.stack.(vm.sp - 1 - i) in\n String (Sx_types.inspect v)) in\n let entry = Hashtbl.create 4 in\n Hashtbl.replace entry \"opcode\" (String (opcode_name op));\n Hashtbl.replace entry \"stack\" (List stack_snap);\n Hashtbl.replace entry \"depth\" (Number (float_of_int (List.length vm.frames)));\n trace := Dict entry :: !trace;\n incr steps;\n (* Execute one step — use the main run loop for 1 step.\n We do this by saving the state and running the original dispatch. *)\n let saved_ip = frame.ip in\n frame.ip <- frame.ip + 1;\n let rest_frames = List.tl vm.frames in\n (try match op with\n | 1 -> let idx = read_u16 frame in push vm frame.closure.vm_code.vc_constants.(idx)\n | 2 -> push vm Nil\n | 3 -> push vm (Bool true)\n | 4 -> push vm (Bool false)\n | 5 -> ignore (pop vm)\n | 6 -> push vm (peek vm)\n | 16 -> 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 -> vm.stack.(frame.base + slot) in\n push vm v\n | 17 -> let slot = read_u8 frame in let v = peek vm in\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 -> let idx = read_u8 frame in\n push vm frame.closure.vm_upvalues.(idx).uv_value\n | 19 -> let idx = read_u8 frame in\n frame.closure.vm_upvalues.(idx).uv_value <- peek vm\n | 20 -> let idx = read_u16 frame in\n let name = match frame.closure.vm_code.vc_constants.(idx) with String s -> s | _ -> \"\" in\n let v = try Hashtbl.find vm.globals name with Not_found ->\n try Sx_primitives.get_primitive name with _ ->\n raise (Eval_error (\"VM undefined: \" ^ name)) in\n push vm v\n | 21 -> let idx = read_u16 frame in\n let name = match frame.closure.vm_code.vc_constants.(idx) with String s -> s | _ -> \"\" in\n Hashtbl.replace vm.globals name (peek vm)\n | 32 -> let offset = read_i16 frame in frame.ip <- frame.ip + offset\n | 33 -> let offset = read_i16 frame in let v = pop vm in\n if not (sx_truthy v) then frame.ip <- frame.ip + offset\n | 34 -> let offset = read_i16 frame in let v = pop vm in\n if sx_truthy v then frame.ip <- frame.ip + offset\n | 48 -> let argc = read_u8 frame in\n let args = Array.init argc (fun _ -> pop vm) in\n let f = pop vm in\n vm_call vm f (List.rev (Array.to_list args))\n | 49 -> let argc = read_u8 frame in\n let args = Array.init argc (fun _ -> pop vm) in\n let f = pop vm in\n vm.frames <- rest_frames; vm.sp <- frame.base;\n vm_call vm f (List.rev (Array.to_list args))\n | 50 -> let result = pop vm in\n vm.frames <- rest_frames; vm.sp <- frame.base; push vm result\n | 51 -> (* CLOSURE — skip for trace, just advance past upvalue descriptors *)\n let idx = read_u16 frame in\n let code_val2 = frame.closure.vm_code.vc_constants.(idx) in\n let uv_count = match code_val2 with\n | Dict d -> (match Hashtbl.find_opt d \"upvalue-count\" with\n | Some (Number n) -> int_of_float n | _ -> 0)\n | _ -> 0 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 let cell = match Hashtbl.find_opt frame.local_cells index with\n | Some existing -> existing\n | None ->\n let c = { uv_value = vm.stack.(frame.base + index) } in\n Hashtbl.replace frame.local_cells index c; c in\n cell\n end else frame.closure.vm_upvalues.(index)\n ) in\n let inner_code = code_from_value code_val2 in\n let c = { vm_code = inner_code; vm_upvalues = upvalues; vm_name = None;\n vm_env_ref = vm.globals; vm_closure_env = frame.closure.vm_closure_env } in\n push vm (VmClosure c)\n | 52 -> let idx = read_u16 frame in let argc = read_u8 frame in\n let name = match frame.closure.vm_code.vc_constants.(idx) with String s -> s | _ -> \"\" in\n let args = List.init argc (fun _ -> pop vm) |> List.rev in\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)) in\n (match fn_val with NativeFn (_, fn) -> push vm (fn args) | _ -> push vm Nil)\n | 64 -> 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 -> let count = read_u16 frame in\n let d = Hashtbl.create count in\n for _ = 1 to count do let v = pop vm in 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 done;\n push vm (Dict d)\n | 128 -> let idx = read_u16 frame in\n let name = match frame.closure.vm_code.vc_constants.(idx) with String s -> s | _ -> \"\" in\n Hashtbl.replace vm.globals name (peek vm)\n | 144 -> let count = read_u8 frame in\n let parts = List.init count (fun _ -> pop vm) |> List.rev in\n push vm (String (String.concat \"\" (List.map Sx_runtime.value_to_str parts)))\n | 160 -> let b = pop vm and a = pop vm in\n push vm (match a, b with Number x, Number y -> Number (x +. y) | _ -> Nil)\n | 161 -> let b = pop vm and a = pop vm in\n push vm (match a, b with Number x, Number y -> Number (x -. y) | _ -> Nil)\n | 162 -> let b = pop vm and a = pop vm in\n push vm (match a, b with Number x, Number y -> Number (x *. y) | _ -> Nil)\n | 163 -> let b = pop vm and a = pop vm in\n push vm (match a, b with Number x, Number y -> Number (x /. y) | _ -> Nil)\n | 164 -> let b = pop vm and a = pop vm in push vm (Bool (a = b))\n | 165 -> let b = pop vm and a = pop vm in\n push vm (match a, b with Number x, Number y -> Bool (x < y) | _ -> Bool false)\n | 166 -> let b = pop vm and a = pop vm in\n push vm (match a, b with Number x, Number y -> Bool (x > y) | _ -> Bool false)\n | 167 -> let v = pop vm in push vm (Bool (not (sx_truthy v)))\n | 168 -> 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 | _ -> Number 0.0)\n | 169 -> let v = pop vm in\n push vm (match v with List (x :: _) | ListRef { contents = x :: _ } -> x | _ -> Nil)\n | 170 -> let v = pop vm in\n push vm (match v with\n | List (_ :: xs) | ListRef { contents = _ :: xs } -> List xs | _ -> List [])\n | 171 -> 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) | _ -> Nil)\n | 172 -> let coll = pop vm and x = pop vm in\n push vm (match coll with List l -> List (x :: l) | _ -> List [x])\n | 173 -> let v = pop vm in\n push vm (match v with Number x -> Number (-.x) | _ -> Nil)\n | 174 -> let v = pop vm in\n push vm (match v with Number x -> Number (x +. 1.0) | _ -> Nil)\n | 175 -> let v = pop vm in\n push vm (match v with Number x -> Number (x -. 1.0) | _ -> Nil)\n | _ -> ()\n with e ->\n let _ = e in\n ignore saved_ip;\n (* On error during trace, just stop *)\n vm.frames <- [])\n end\n done\n with _ -> ());\n List (List.rev !trace)\n\n(** Disassemble a vm_code into a list of instruction dicts. *)\nlet disassemble (code : vm_code) =\n let bc = code.vc_bytecode in\n let len = Array.length bc in\n let consts = code.vc_constants in\n let instrs = ref [] in\n let ip = ref 0 in\n while !ip < len do\n let offset = !ip in\n let op = bc.(!ip) in\n ip := !ip + 1;\n let name = opcode_name op in\n let operands = ref [] in\n (match op with\n | 1 (* CONST *) | 20 (* GLOBAL_GET *) | 21 (* GLOBAL_SET *)\n | 128 (* DEFINE *) ->\n if !ip + 1 < len then begin\n let lo = bc.(!ip) in let hi = bc.(!ip + 1) in\n let idx = lo lor (hi lsl 8) in\n ip := !ip + 2;\n let const_str = if idx < Array.length consts\n then Sx_types.inspect consts.(idx) else \"?\" in\n operands := [Number (float_of_int idx); String const_str]\n end\n | 64 (* LIST *) | 65 (* DICT *) | 51 (* CLOSURE *) ->\n if !ip + 1 < len then begin\n let lo = bc.(!ip) in let hi = bc.(!ip + 1) in\n let idx = lo lor (hi lsl 8) in\n ip := !ip + 2;\n operands := [Number (float_of_int idx)];\n (* For CLOSURE, skip upvalue descriptors *)\n if op = 51 && idx < Array.length consts then begin\n let uv_count = match consts.(idx) with\n | Dict d -> (match Hashtbl.find_opt d \"upvalue-count\" with\n | Some (Number n) -> int_of_float n | _ -> 0)\n | _ -> 0 in\n ip := !ip + uv_count * 2\n end\n end\n | 16 (* LOCAL_GET *) | 17 (* LOCAL_SET *)\n | 18 (* UPVALUE_GET *) | 19 (* UPVALUE_SET *)\n | 48 (* CALL *) | 49 (* TAIL_CALL *)\n | 144 (* STR_CONCAT *) ->\n if !ip < len then begin\n let v = bc.(!ip) in ip := !ip + 1;\n operands := [Number (float_of_int v)]\n end\n | 32 (* JUMP *) | 33 (* JUMP_IF_FALSE *) | 34 (* JUMP_IF_TRUE *) ->\n if !ip + 1 < len then begin\n let lo = bc.(!ip) in let hi = bc.(!ip + 1) in\n let raw = lo lor (hi lsl 8) in\n let signed = if raw >= 32768 then raw - 65536 else raw in\n ip := !ip + 2;\n operands := [Number (float_of_int signed)]\n end\n | 52 (* CALL_PRIM *) ->\n if !ip + 2 < len then begin\n let lo = bc.(!ip) in let hi = bc.(!ip + 1) in\n let idx = lo lor (hi lsl 8) in\n let argc = bc.(!ip + 2) in\n ip := !ip + 3;\n let prim_name = if idx < Array.length consts\n then (match consts.(idx) with String s -> s | _ -> \"?\") else \"?\" in\n operands := [Number (float_of_int idx); String prim_name; Number (float_of_int argc)]\n end\n | _ -> ());\n let entry = Hashtbl.create 4 in\n Hashtbl.replace entry \"offset\" (Number (float_of_int offset));\n Hashtbl.replace entry \"opcode\" (String name);\n Hashtbl.replace entry \"operands\" (List !operands);\n instrs := Dict entry :: !instrs\n done;\n let result = Hashtbl.create 4 in\n Hashtbl.replace result \"arity\" (Number (float_of_int code.vc_arity));\n Hashtbl.replace result \"num_locals\" (Number (float_of_int code.vc_locals));\n Hashtbl.replace result \"constants\" (List (Array.to_list (Array.map (fun v -> String (Sx_types.inspect v)) consts)));\n Hashtbl.replace result \"bytecode\" (List (List.rev !instrs));\n Dict result\n","(* generated code *)"],"names":[],"mappings":"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","ignoreList":[1]}},{"offset":{"line":0,"column":256223},"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(** Debug trace for scope operations — enabled from JS *)\nlet _scope_trace = ref false\nlet _scope_log : string list ref = ref []\nlet scope_trace_enable () = _scope_trace := true; _scope_log := []\nlet scope_trace_disable () = _scope_trace := false\nlet scope_trace_drain () =\n let log = List.rev !_scope_log in\n _scope_log := [];\n log\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 if !_scope_trace then\n _scope_log := Printf.sprintf \"PUSH %s depth=%d->%d\" name (List.length stack) (List.length stack + 1) :: !_scope_log;\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 if !_scope_trace then\n _scope_log := Printf.sprintf \"POP %s depth=%d->%d\" name (List.length stack) (max 0 (List.length stack - 1)) :: !_scope_log;\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 if !_scope_trace then\n _scope_log := Printf.sprintf \"PEEK %s depth=%d found=%b\" name (List.length stack) (stack <> []) :: !_scope_log;\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) :: rest ->\n let stack = try Hashtbl.find scope_stacks name with Not_found -> [] in\n if !_scope_trace then\n _scope_log := Printf.sprintf \"CTX %s depth=%d found=%b\" name (List.length stack) (stack <> []) :: !_scope_log;\n (match stack with\n | v :: _ -> v\n | [] -> (match rest with default_val :: _ -> default_val | [] -> Nil))\n | _ -> Nil);\n\n register \"context-debug\" (fun args ->\n match args with\n | [String name] ->\n let stack = try Hashtbl.find scope_stacks name with Not_found -> [] in\n let all_keys = Hashtbl.fold (fun k _ acc -> k :: acc) scope_stacks [] in\n String (Printf.sprintf \"name=%s stack_len=%d all_keys=[%s]\"\n name (List.length stack) (String.concat \",\" all_keys))\n | _ -> String \"bad args\");\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":"KAkLU,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,GC3JpD,kDD2JuE,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,GCvIpD,kDDuIuE,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,GC3HpD,kDD2HuE,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,GCpHpD,kDDoHuE,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,GCtGpD,kDDsGuE,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,EAnBoC,YAAQ,C,WAHtD,O,CAAA,0B,CAAA,mCAEE,UAAgB,MAFlB,S,CAEE,OAAgB,aAA8B,I,AAAA,I,AAAA,G,EAAA,GC3FpD,kDD2FuE,WAAjE,EAG2B,GAFZ,aAAf,OAAe,aACf,OAC2B,eAA6B,IADjD,E,CACA,EAAgD,OAAhD,aADA,KACmB,OADnB,gBACiD,SACnD,GAAiB,C,iBAjBxB,O,CAAA,2B,CAAA,8BAEE,UAAgB,MAFlB,S,CAEE,OAAgB,aAA8B,I,AAAA,I,AAAA,G,EAAA,GChFpD,kDDgFuE,WAAjE,EACA,gB,CAAA,EACE,uBAA8F,YAAhF,E,CAA+C,EAA7D,OAA6D,aAA/C,OAAkE,OAAlE,gBAAgF,UAChG,SAES,SAAyD,gBAApB,E,EAAA,UADjC,E,IAER,IAAG,C,iBAnBV,O,CAAA,2B,CAAA,mCAEE,UAAgB,MAFlB,S,CAEE,OAAgB,aAA8B,I,AAAA,I,AAAA,G,EAAA,GCrEpD,kDDqEuE,WAAjE,EACA,gB,CAAA,EACE,uBAA+F,YAAjF,E,CAAgD,EAA9D,OAA8D,aAAhD,OAAmE,OAAnE,gBAAiF,UACjG,SAAsC,gBAAV,E,KACvB,IAAG,C,eAfV,O,CAAA,2B,CAAA,mCAEE,UAAgB,MAFlB,S,CAEE,OAAgB,aAA8B,I,AAAA,I,AAAA,G,EAAA,GC5DpD,kDD4DuE,WAAjE,EACA,gB,CAAA,EACE,aAA4E,IAAQ,EAApF,OAAoF,aAAiB,QAAzB,EAAyB,OAAzB,eAA+B,YAA7F,E,CAA0C,EAAmD,OAAnD,aAA1C,KAA6D,OAA7D,gBAA6F,UAC7G,O,CAAA,EAA+B,Q,CAA/B,UAA+B,sBAAoD,SAC9E,IAAG,C,iBAfV,O,CAAA,2B,CAAA,mC,CAAA,8BAEE,UAAgB,MAFlB,S,CAEE,OAAgB,aAA8B,I,AAAA,I,AAAA,G,EAAA,GCnDpD,kDDmDuE,WAAjE,EACA,gB,CAAA,EACE,aAA8E,EAA9E,OAA8E,aAAiB,UAAK,YAAtF,E,CAA2C,EAAsC,OAAtC,aAA3C,OAA8D,OAA9D,gBAAsF,UACtG,Q,CAAA,iCAAkD,UAC7C,IAAG,C,EAXwB,IAAG,C,SAPrC,O,CAAA,0B,CAAA,mCAES,MAFT,OAEE,OAAO,eAAqC,OAEjC,MADE,IACF,UADE,M,KAER,IAAG,C,EAbK,6BAA0B,C,KAT3C,uBAAU,eACV,eACA,EAAG,C,EAJwB,sBAAqB,C,KADtB,oBAAsB,mBAAgB,C,qBALd,QCZpD,ODYoD,eAAgB,O,EAAA,S,EAAA,8BAcjB,QAdiB,OAcjB,eAAgB,UAUjE,WAViE,QAUjE,cAQA,sBAIA,GAJwC,YAIxC,WASA,GAFa,YAEb,WASA,GAFa,YAEb,WAWA,GAJa,YAIb,WAWA,GAFa,QAEb,WAWA,GAJ2B,QAI3B,WAcA,GAFa,QAEb,WAOA,GAFiB,QAEjB,WAYA,GAJa,QAIb,WAeA,iBAKA,GAF2C,QAE3C,WAOA,iBAIA,iBAIA,iBAMA,iBAIA,iBAE2C,gC,QCnL7C,6E,EAAA,c,EAAA,c,WAAA","ignoreList":[1]}},{"offset":{"line":0,"column":261687},"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 \"&\"\n | '<' -> Buffer.add_string buf \"<\"\n | '>' -> Buffer.add_string buf \">\"\n | '\"' -> Buffer.add_string buf \""\"\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\n(** Render via the SX adapter (render-to-html from adapter-html.sx).\n Falls back to the native ref if the SX adapter isn't loaded. *)\nlet sx_render_to_html render_env expr eval_env =\n if env_has render_env \"render-to-html\" then\n let fn = env_get render_env \"render-to-html\" in\n let result = Sx_ref.cek_call fn (List [expr; Env eval_env]) in\n match result with String s -> s | RawHTML s -> s | _ -> Sx_runtime.value_to_str result\n else\n render_to_html expr eval_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 ^ \"\"\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 let call_sx = \"(\" ^ String.concat \" \" (List.map (fun v ->\n match v with\n | Symbol s -> s | Keyword k -> \":\" ^ k | String s -> \"\\\"\" ^ s ^ \"\\\"\"\n | _ -> Sx_runtime.value_to_str v\n ) (Symbol name :: args)) ^ \")\" in\n Printf.sprintf \"%s\" _i.i_name call_sx\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 | _ ->\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(* Buffer-based streaming renderer — zero intermediate string allocation *)\n(* ====================================================================== *)\n\n(** Escape HTML directly into a buffer. *)\nlet escape_html_buf buf s =\n for i = 0 to String.length s - 1 do\n match String.unsafe_get s i with\n | '&' -> Buffer.add_string buf \"&\"\n | '<' -> Buffer.add_string buf \"<\"\n | '>' -> Buffer.add_string buf \">\"\n | '\"' -> Buffer.add_string buf \""\"\n | c -> Buffer.add_char buf c\n done\n\n(** Render attributes directly into a buffer. *)\nlet render_attrs_buf buf attrs =\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 escape_html_buf buf (value_to_string v);\n Buffer.add_char buf '\"'\n end) attrs\n\n(** Buffer-based render_to_html — writes directly, no intermediate strings. *)\nlet rec render_to_buf buf (expr : value) (env : env) : unit =\n match expr with\n | Nil -> ()\n | Bool true -> Buffer.add_string buf \"true\"\n | Bool false -> Buffer.add_string buf \"false\"\n | Number n ->\n if Float.is_integer n then Buffer.add_string buf (string_of_int (int_of_float n))\n else Buffer.add_string buf (Printf.sprintf \"%g\" n)\n | String s -> escape_html_buf buf s\n | Keyword k -> escape_html_buf buf k\n | RawHTML s -> Buffer.add_string buf s\n | Symbol s ->\n let v = Sx_ref.eval_expr (Symbol s) (Env env) in\n render_to_buf buf v env\n | List [] | ListRef { contents = [] } -> ()\n | List (head :: args) | ListRef { contents = head :: args } ->\n render_list_buf buf head args env\n | _ ->\n let v = Sx_ref.eval_expr expr (Env env) in\n render_to_buf buf v env\n\nand render_list_buf buf head args env =\n match head with\n | Symbol \"<>\" ->\n List.iter (fun c -> render_to_buf buf c env) args\n | Symbol \"raw!\" ->\n let v = Sx_ref.eval_expr (List.hd args) (Env env) in\n (match v with\n | String s | RawHTML s -> Buffer.add_string buf s\n | _ -> Buffer.add_string buf (value_to_string v))\n | Symbol tag when is_html_tag tag ->\n render_element_buf buf 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 render_to_buf buf (List.nth args 1) env)\n else\n (if List.length args > 2 then render_to_buf buf (List.nth args 2) env)\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 List.iter (fun e -> render_to_buf buf e env) (List.tl args)\n | Symbol \"cond\" ->\n render_cond_buf buf args env\n | Symbol \"case\" ->\n let v = Sx_ref.eval_expr (List (head :: args)) (Env env) in\n render_to_buf buf v env\n | Symbol (\"let\" | \"let*\") ->\n render_let_buf buf args env\n | Symbol (\"begin\" | \"do\") ->\n let rec go = function\n | [] -> ()\n | [last] -> render_to_buf buf last env\n | e :: rest -> ignore (Sx_ref.eval_expr e (Env env)); go rest\n in go args\n | Symbol (\"define\" | \"defcomp\" | \"defmacro\" | \"defisland\") ->\n ignore (Sx_ref.eval_expr (List (head :: args)) (Env env))\n | Symbol \"map\" -> render_map_buf buf args env false\n | Symbol \"map-indexed\" -> render_map_buf buf args env true\n | Symbol \"filter\" ->\n let v = Sx_ref.eval_expr (List (head :: args)) (Env env) in\n render_to_buf buf v env\n | Symbol \"for-each\" -> render_for_each_buf buf 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\" -> ()\n | Component _ -> render_component_buf buf v args env\n | Island _i ->\n (* Islands are client-rendered — emit placeholder with SX call\n expression so the client can hydrate from source. *)\n let call_sx = \"(\" ^ String.concat \" \" (List.map (fun v ->\n match v with\n | Symbol s -> s | Keyword k -> \":\" ^ k | String s -> \"\\\"\" ^ s ^ \"\\\"\"\n | _ -> Sx_runtime.value_to_str v\n ) (Symbol name :: args)) ^ \")\" in\n Buffer.add_string buf (Printf.sprintf \"%s\"\n _i.i_name call_sx)\n | Macro m ->\n let expanded = expand_macro m args env in\n render_to_buf buf expanded env\n | _ ->\n let result = Sx_ref.eval_expr (List (head :: args)) (Env env) in\n render_to_buf buf result env)\n with Eval_error msg ->\n (* Unknown symbol/component — skip silently during SSR.\n The client will render from page-sx. *)\n Printf.eprintf \"[ssr-skip] %s\\n%!\" msg)\n | _ ->\n (try\n let result = Sx_ref.eval_expr (List (head :: args)) (Env env) in\n render_to_buf buf result env\n with Eval_error msg ->\n Printf.eprintf \"[ssr-skip] %s\\n%!\" msg)\n\nand render_element_buf buf tag args env =\n let (attrs, children) = parse_element_args args env in\n Buffer.add_char buf '<';\n Buffer.add_string buf tag;\n render_attrs_buf buf attrs;\n if is_void tag then\n Buffer.add_string buf \" />\"\n else begin\n Buffer.add_char buf '>';\n List.iter (fun c -> render_to_buf buf c env) children;\n Buffer.add_string buf \"'\n end\n\nand render_component_buf buf 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 | _ -> 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 child_buf = Buffer.create 256 in\n List.iter (fun c -> render_to_buf child_buf c env) children;\n ignore (env_bind local \"children\" (RawHTML (Buffer.contents child_buf)))\n end;\n render_to_buf buf c.c_body local\n | _ -> ()\n\nand render_cond_buf buf 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 | _ -> false) args 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\" | Symbol \"else\" | Symbol \":else\" -> true | _ -> false in\n if is_else then render_to_buf buf body env\n else let v = Sx_ref.eval_expr test (Env env) in\n if sx_truthy v then render_to_buf buf body env else go rest\n | _ -> ())\n in go args\n end else begin\n let rec go = function\n | [] -> () | [_] -> ()\n | test :: body :: rest ->\n let is_else = match test with\n | Keyword \"else\" | Symbol \"else\" | Symbol \":else\" -> true | _ -> false in\n if is_else then render_to_buf buf body env\n else let v = Sx_ref.eval_expr test (Env env) in\n if sx_truthy v then render_to_buf buf body env else go rest\n in go args\n end\n\nand render_let_buf buf 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 (List _ :: _) | (ListRef _ :: _) -> true | _ -> false 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); go rest\n | _ -> ()\n in go bindings\n end;\n let rec render_body = function\n | [] -> ()\n | [last] -> render_to_buf buf last local\n | e :: rest -> ignore (Sx_ref.eval_expr e (Env local)); render_body rest\n in render_body body\n\nand render_map_buf buf 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 List.iteri (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)) l.l_params call_args;\n render_to_buf buf l.l_body local\n | _ ->\n let result = Sx_runtime.sx_call fn_val call_args in\n render_to_buf buf result env\n ) items\n\nand render_for_each_buf buf 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 List.iter (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)) l.l_params [item];\n render_to_buf buf l.l_body local\n | _ ->\n let result = Sx_runtime.sx_call fn_val [item] in\n render_to_buf buf result env\n ) items\n\n(** Public API: render to a pre-allocated buffer. *)\nlet render_to_buffer buf expr env = render_to_buf buf expr env\n\n(** Convenience: render to string using the buffer renderer. *)\nlet render_to_html_streaming expr env =\n let buf = Buffer.create 65536 in\n render_to_buf buf expr env;\n Buffer.contents buf\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]}},{"offset":{"line":0,"column":279010},"map":{"version":3,"sources":["/workspace_root/lib/sx_compiler.ml","/builtin/blackbox.ml"],"sourcesContent":["(* sx_compiler.ml — Auto-generated from lib/compiler.sx *)\n(* Do not edit — regenerate with: python3 hosts/ocaml/bootstrap_compiler.py *)\n\n[@@@warning \"-26-27\"]\n\nopen Sx_types\nopen Sx_runtime\n\n(* The compiler uses cek_call from the evaluator for runtime dispatch *)\nlet cek_call = Sx_ref.cek_call\nlet eval_expr = Sx_ref.eval_expr\nlet trampoline v = match v with\n | Thunk (expr, env) -> Sx_ref.eval_expr expr (Env env)\n | other -> other\n\n(* Bindings for external functions the compiler calls.\n Some shadow OCaml stdlib names — the SX versions operate on values. *)\nlet serialize v = String (Sx_types.inspect v)\nlet sx_parse v = match v with\n | String s -> (match Sx_parser.parse_all s with [e] -> e | es -> List es)\n | v -> v\nlet floor v = prim_call \"floor\" [v]\nlet abs v = prim_call \"abs\" [v]\nlet min a b = prim_call \"min\" [a; b]\nlet max a b = prim_call \"max\" [a; b]\nlet set_nth_b lst idx v = prim_call \"set-nth!\" [lst; idx; v]\nlet init lst = prim_call \"init\" [lst]\nlet last lst = prim_call \"last\" [lst]\n\n(* skip_annotations: strips :keyword value pairs from a list (type annotations) *)\nlet rec skip_annotations items =\n match items with\n | List [] | Nil -> Nil\n | List (Keyword _ :: _ :: rest) -> skip_annotations (List rest)\n | ListRef { contents = [] } -> Nil\n | ListRef { contents = Keyword _ :: _ :: rest } -> skip_annotations (List rest)\n | List (first :: _) -> first\n | ListRef { contents = first :: _ } -> first\n | _ -> Nil\n\n(* compile_match: uses local recursion (letrec) that the transpiler can't handle.\n Falls back to CEK evaluation at runtime. *)\nlet compile_match em args scope tail_p =\n let fn = Sx_ref.eval_expr (Symbol \"compile-match\") (Env (Sx_types.make_env ())) in\n Sx_ref.cek_call fn (List [em; args; scope; tail_p])\n\n\n(* === Transpiled from bytecode compiler === *)\n(* make-pool *)\nlet rec make_pool () =\n (let _d = Hashtbl.create 2 in Hashtbl.replace _d \"entries\" (if sx_truthy ((is_primitive ((String \"mutable-list\")))) then (mutable_list ()) else (List [])); Hashtbl.replace _d \"index\" (let _d = Hashtbl.create 1 in Hashtbl.replace _d \"_count\" (Number 0.0); Dict _d); Dict _d)\n\n(* pool-add *)\nand pool_add pool value =\n (let () = ignore ((String \"Add a value to the constant pool, return its index. Deduplicates.\")) in (let key = (serialize (value)) in let idx_map = (get (pool) ((String \"index\"))) in (if sx_truthy ((prim_call \"has-key?\" [idx_map; key])) then (get (idx_map) (key)) else (let idx = (get (idx_map) ((String \"_count\"))) in (let () = ignore ((sx_dict_set_b idx_map key idx)) in (let () = ignore ((sx_dict_set_b idx_map (String \"_count\") (prim_call \"+\" [idx; (Number 1.0)]))) in (let () = ignore ((sx_append_b (get (pool) ((String \"entries\"))) value)) in idx)))))))\n\n(* make-scope *)\nand make_scope parent =\n (let _d = Hashtbl.create 5 in Hashtbl.replace _d \"next-slot\" (Number 0.0); Hashtbl.replace _d \"upvalues\" (List []); Hashtbl.replace _d \"locals\" (List []); Hashtbl.replace _d \"parent\" parent; Hashtbl.replace _d \"is-function\" (Bool false); Dict _d)\n\n(* scope-define-local *)\nand scope_define_local scope name =\n (let () = ignore ((String \"Add a local variable, return its slot index.\\n Idempotent: if name already has a slot, return it.\")) in (let existing = (first ((List (List.filter (fun l -> sx_truthy ((prim_call \"=\" [(get (l) ((String \"name\"))); name]))) (sx_to_list (get (scope) ((String \"locals\")))))))) in (if sx_truthy (existing) then (get (existing) ((String \"slot\"))) else (let slot = (get (scope) ((String \"next-slot\"))) in (let () = ignore ((sx_append_b (get (scope) ((String \"locals\"))) (let _d = Hashtbl.create 3 in Hashtbl.replace _d \"mutable\" (Bool false); Hashtbl.replace _d \"slot\" slot; Hashtbl.replace _d \"name\" name; Dict _d))) in (let () = ignore ((sx_dict_set_b scope (String \"next-slot\") (prim_call \"+\" [slot; (Number 1.0)]))) in slot))))))\n\n(* scope-resolve *)\nand scope_resolve scope name =\n (let () = ignore ((String \"Resolve a variable name. Returns {:type \\\"local\\\"|\\\"upvalue\\\"|\\\"global\\\", :index N}.\\n Upvalue captures only happen at function boundaries (is-function=true).\\n Let scopes share the enclosing function's frame — their locals are\\n accessed directly without upvalue indirection.\")) in (if sx_truthy ((is_nil (scope))) then (CekFrame { cf_type = \"global\"; cf_env = Nil; cf_name = Nil; cf_body = Nil; cf_remaining = Nil; cf_f = Nil; cf_args = Nil; cf_results = Nil; cf_extra = Nil; cf_extra2 = Nil }) else (let locals = (get (scope) ((String \"locals\"))) in let found = (Bool (List.exists (fun l -> sx_truthy ((prim_call \"=\" [(get (l) ((String \"name\"))); name]))) (sx_to_list locals))) in (if sx_truthy (found) then (let local = (first ((List (List.filter (fun l -> sx_truthy ((prim_call \"=\" [(get (l) ((String \"name\"))); name]))) (sx_to_list locals))))) in (CekFrame { cf_type = \"local\"; cf_env = Nil; cf_name = Nil; cf_body = Nil; cf_remaining = Nil; cf_f = Nil; cf_args = Nil; cf_results = Nil; cf_extra = Nil; cf_extra2 = Nil })) else (let upvals = (get (scope) ((String \"upvalues\"))) in let uv_found = (Bool (List.exists (fun u -> sx_truthy ((prim_call \"=\" [(get (u) ((String \"name\"))); name]))) (sx_to_list upvals))) in (if sx_truthy (uv_found) then (let uv = (first ((List (List.filter (fun u -> sx_truthy ((prim_call \"=\" [(get (u) ((String \"name\"))); name]))) (sx_to_list upvals))))) in (CekFrame { cf_type = \"upvalue\"; cf_env = Nil; cf_name = Nil; cf_body = Nil; cf_remaining = Nil; cf_f = Nil; cf_args = Nil; cf_results = Nil; cf_extra = Nil; cf_extra2 = Nil })) else (let parent = (get (scope) ((String \"parent\"))) in (if sx_truthy ((is_nil (parent))) then (CekFrame { cf_type = \"global\"; cf_env = Nil; cf_name = Nil; cf_body = Nil; cf_remaining = Nil; cf_f = Nil; cf_args = Nil; cf_results = Nil; cf_extra = Nil; cf_extra2 = Nil }) else (let parent_result = (scope_resolve (parent) (name)) in (if sx_truthy ((prim_call \"=\" [(get (parent_result) ((String \"type\"))); (String \"global\")])) then parent_result else (if sx_truthy ((get (scope) ((String \"is-function\")))) then (let uv_idx = (len ((get (scope) ((String \"upvalues\"))))) in (let () = ignore ((sx_append_b (get (scope) ((String \"upvalues\"))) (let _d = Hashtbl.create 4 in Hashtbl.replace _d \"index\" (get (parent_result) ((String \"index\"))); Hashtbl.replace _d \"is-local\" (prim_call \"=\" [(get (parent_result) ((String \"type\"))); (String \"local\")]); Hashtbl.replace _d \"uv-index\" uv_idx; Hashtbl.replace _d \"name\" name; Dict _d))) in (CekFrame { cf_type = \"upvalue\"; cf_env = Nil; cf_name = Nil; cf_body = Nil; cf_remaining = Nil; cf_f = Nil; cf_args = Nil; cf_results = Nil; cf_extra = Nil; cf_extra2 = Nil }))) else parent_result)))))))))))\n\n(* make-emitter *)\nand make_emitter () =\n (let _d = Hashtbl.create 2 in Hashtbl.replace _d \"pool\" (make_pool ()); Hashtbl.replace _d \"bytecode\" (if sx_truthy ((is_primitive ((String \"mutable-list\")))) then (mutable_list ()) else (List [])); Dict _d)\n\n(* emit-byte *)\nand emit_byte em byte =\n (sx_append_b (get (em) ((String \"bytecode\"))) byte)\n\n(* emit-u16 *)\nand emit_u16 em value =\n (let () = ignore ((emit_byte (em) ((prim_call \"mod\" [value; (Number 256.0)])))) in (emit_byte (em) ((prim_call \"mod\" [(floor ((prim_call \"/\" [value; (Number 256.0)]))); (Number 256.0)]))))\n\n(* emit-i16 *)\nand emit_i16 em value =\n (let v = (if sx_truthy ((prim_call \"<\" [value; (Number 0.0)])) then (prim_call \"+\" [value; (Number 65536.0)]) else value) in (emit_u16 (em) (v)))\n\n(* emit-op *)\nand emit_op em opcode =\n (emit_byte (em) (opcode))\n\n(* emit-const *)\nand emit_const em value =\n (let idx = (pool_add ((get (em) ((String \"pool\")))) (value)) in (let () = ignore ((emit_op (em) ((Number 1.0)))) in (emit_u16 (em) (idx))))\n\n(* current-offset *)\nand current_offset em =\n (len ((get (em) ((String \"bytecode\")))))\n\n(* patch-i16 *)\nand patch_i16 em offset value =\n (let () = ignore ((String \"Patch a previously emitted i16 at the given bytecode offset.\")) in (let v = (if sx_truthy ((prim_call \"<\" [value; (Number 0.0)])) then (prim_call \"+\" [value; (Number 65536.0)]) else value) in let bc = (get (em) ((String \"bytecode\"))) in (let () = ignore ((set_nth_b (bc) (offset) ((prim_call \"mod\" [v; (Number 256.0)])))) in (set_nth_b (bc) ((prim_call \"+\" [offset; (Number 1.0)])) ((prim_call \"mod\" [(floor ((prim_call \"/\" [v; (Number 256.0)]))); (Number 256.0)]))))))\n\n(* compile-expr *)\nand compile_expr em expr scope tail_p =\n (let () = ignore ((String \"Compile an expression. tail? indicates tail position for TCO.\")) in (if sx_truthy ((is_nil (expr))) then (emit_op (em) ((Number 2.0))) else (if sx_truthy ((prim_call \"=\" [(type_of (expr)); (String \"number\")])) then (emit_const (em) (expr)) else (if sx_truthy ((prim_call \"=\" [(type_of (expr)); (String \"string\")])) then (emit_const (em) (expr)) else (if sx_truthy ((prim_call \"=\" [(type_of (expr)); (String \"boolean\")])) then (emit_op (em) ((if sx_truthy (expr) then (Number 3.0) else (Number 4.0)))) else (if sx_truthy ((prim_call \"=\" [(type_of (expr)); (String \"keyword\")])) then (emit_const (em) ((keyword_name (expr)))) else (if sx_truthy ((prim_call \"=\" [(type_of (expr)); (String \"symbol\")])) then (compile_symbol (em) ((symbol_name (expr))) (scope)) else (if sx_truthy ((prim_call \"=\" [(type_of (expr)); (String \"list\")])) then (if sx_truthy ((empty_p (expr))) then (let () = ignore ((emit_op (em) ((Number 64.0)))) in (emit_u16 (em) ((Number 0.0)))) else (compile_list (em) (expr) (scope) (tail_p))) else (if sx_truthy ((prim_call \"=\" [(type_of (expr)); (String \"dict\")])) then (compile_dict (em) (expr) (scope)) else (emit_const (em) (expr)))))))))))\n\n(* compile-symbol *)\nand compile_symbol em name scope =\n (let resolved = (scope_resolve (scope) (name)) in (if sx_truthy ((prim_call \"=\" [(get (resolved) ((String \"type\"))); (String \"local\")])) then (let () = ignore ((emit_op (em) ((Number 16.0)))) in (emit_byte (em) ((get (resolved) ((String \"index\")))))) else (if sx_truthy ((prim_call \"=\" [(get (resolved) ((String \"type\"))); (String \"upvalue\")])) then (let () = ignore ((emit_op (em) ((Number 18.0)))) in (emit_byte (em) ((get (resolved) ((String \"index\")))))) else (let idx = (pool_add ((get (em) ((String \"pool\")))) (name)) in (let () = ignore ((emit_op (em) ((Number 20.0)))) in (emit_u16 (em) (idx)))))))\n\n(* compile-dict *)\nand compile_dict em expr scope =\n (let ks = (prim_call \"keys\" [expr]) in let count = (len (ks)) in (let () = ignore ((List.iter (fun k -> ignore ((let () = ignore ((emit_const (em) (k))) in (compile_expr (em) ((get (expr) (k))) (scope) ((Bool false)))))) (sx_to_list ks); Nil)) in (let () = ignore ((emit_op (em) ((Number 65.0)))) in (emit_u16 (em) (count)))))\n\n(* compile-list *)\nand compile_list em expr scope tail_p =\n (let head = (first (expr)) in let args = (rest (expr)) in (if sx_truthy ((Bool (not (sx_truthy ((prim_call \"=\" [(type_of (head)); (String \"symbol\")])))))) then (compile_call (em) (head) (args) (scope) (tail_p)) else (let name = (symbol_name (head)) in (if sx_truthy ((prim_call \"=\" [name; (String \"if\")])) then (compile_if (em) (args) (scope) (tail_p)) else (if sx_truthy ((prim_call \"=\" [name; (String \"when\")])) then (compile_when (em) (args) (scope) (tail_p)) else (if sx_truthy ((prim_call \"=\" [name; (String \"and\")])) then (compile_and (em) (args) (scope) (tail_p)) else (if sx_truthy ((prim_call \"=\" [name; (String \"or\")])) then (compile_or (em) (args) (scope) (tail_p)) else (if sx_truthy ((prim_call \"=\" [name; (String \"let\")])) then (compile_let (em) (args) (scope) (tail_p)) else (if sx_truthy ((prim_call \"=\" [name; (String \"let*\")])) then (compile_let (em) (args) (scope) (tail_p)) else (if sx_truthy ((prim_call \"=\" [name; (String \"begin\")])) then (compile_begin (em) (args) (scope) (tail_p)) else (if sx_truthy ((prim_call \"=\" [name; (String \"do\")])) then (compile_begin (em) (args) (scope) (tail_p)) else (if sx_truthy ((prim_call \"=\" [name; (String \"lambda\")])) then (compile_lambda (em) (args) (scope)) else (if sx_truthy ((prim_call \"=\" [name; (String \"fn\")])) then (compile_lambda (em) (args) (scope)) else (if sx_truthy ((prim_call \"=\" [name; (String \"define\")])) then (compile_define (em) (args) (scope)) else (if sx_truthy ((prim_call \"=\" [name; (String \"set!\")])) then (compile_set (em) (args) (scope)) else (if sx_truthy ((prim_call \"=\" [name; (String \"quote\")])) then (compile_quote (em) (args)) else (if sx_truthy ((prim_call \"=\" [name; (String \"cond\")])) then (compile_cond (em) (args) (scope) (tail_p)) else (if sx_truthy ((prim_call \"=\" [name; (String \"case\")])) then (compile_case (em) (args) (scope) (tail_p)) else (if sx_truthy ((prim_call \"=\" [name; (String \"->\")])) then (compile_thread (em) (args) (scope) (tail_p)) else (if sx_truthy ((prim_call \"=\" [name; (String \"defcomp\")])) then (compile_defcomp (em) (args) (scope)) else (if sx_truthy ((prim_call \"=\" [name; (String \"defisland\")])) then (compile_defcomp (em) (args) (scope)) else (if sx_truthy ((prim_call \"=\" [name; (String \"defmacro\")])) then (compile_defmacro (em) (args) (scope)) else (if sx_truthy ((prim_call \"=\" [name; (String \"defstyle\")])) then (emit_op (em) ((Number 2.0))) else (if sx_truthy ((prim_call \"=\" [name; (String \"defhandler\")])) then (emit_op (em) ((Number 2.0))) else (if sx_truthy ((prim_call \"=\" [name; (String \"defpage\")])) then (emit_op (em) ((Number 2.0))) else (if sx_truthy ((prim_call \"=\" [name; (String \"defquery\")])) then (emit_op (em) ((Number 2.0))) else (if sx_truthy ((prim_call \"=\" [name; (String \"defaction\")])) then (emit_op (em) ((Number 2.0))) else (if sx_truthy ((prim_call \"=\" [name; (String \"defrelation\")])) then (emit_op (em) ((Number 2.0))) else (if sx_truthy ((prim_call \"=\" [name; (String \"deftype\")])) then (emit_op (em) ((Number 2.0))) else (if sx_truthy ((prim_call \"=\" [name; (String \"defeffect\")])) then (emit_op (em) ((Number 2.0))) else (if sx_truthy ((prim_call \"=\" [name; (String \"defisland\")])) then (compile_defcomp (em) (args) (scope)) else (if sx_truthy ((prim_call \"=\" [name; (String \"quasiquote\")])) then (compile_quasiquote (em) ((first (args))) (scope)) else (if sx_truthy ((prim_call \"=\" [name; (String \"letrec\")])) then (compile_letrec (em) (args) (scope) (tail_p)) else (if sx_truthy ((prim_call \"=\" [name; (String \"match\")])) then (compile_match (em) (args) (scope) (tail_p)) else (compile_call (em) (head) (args) (scope) (tail_p))))))))))))))))))))))))))))))))))))\n\n(* compile-if *)\nand compile_if em args scope tail_p =\n (let test = (first (args)) in let then_expr = (nth (args) ((Number 1.0))) in let else_expr = (if sx_truthy ((prim_call \">\" [(len (args)); (Number 2.0)])) then (nth (args) ((Number 2.0))) else Nil) in (let () = ignore ((compile_expr (em) (test) (scope) ((Bool false)))) in (let () = ignore ((emit_op (em) ((Number 33.0)))) in (let else_jump = (current_offset (em)) in (let () = ignore ((emit_i16 (em) ((Number 0.0)))) in (let () = ignore ((compile_expr (em) (then_expr) (scope) (tail_p))) in (let () = ignore ((emit_op (em) ((Number 32.0)))) in (let end_jump = (current_offset (em)) in (let () = ignore ((emit_i16 (em) ((Number 0.0)))) in (let () = ignore ((patch_i16 (em) (else_jump) ((prim_call \"-\" [(current_offset (em)); (prim_call \"+\" [else_jump; (Number 2.0)])])))) in (let () = ignore ((if sx_truthy ((is_nil (else_expr))) then (emit_op (em) ((Number 2.0))) else (compile_expr (em) (else_expr) (scope) (tail_p)))) in (patch_i16 (em) (end_jump) ((prim_call \"-\" [(current_offset (em)); (prim_call \"+\" [end_jump; (Number 2.0)])]))))))))))))))\n\n(* compile-when *)\nand compile_when em args scope tail_p =\n (let test = (first (args)) in let body = (rest (args)) in (let () = ignore ((compile_expr (em) (test) (scope) ((Bool false)))) in (let () = ignore ((emit_op (em) ((Number 33.0)))) in (let skip_jump = (current_offset (em)) in (let () = ignore ((emit_i16 (em) ((Number 0.0)))) in (let () = ignore ((compile_begin (em) (body) (scope) (tail_p))) in (let () = ignore ((emit_op (em) ((Number 32.0)))) in (let end_jump = (current_offset (em)) in (let () = ignore ((emit_i16 (em) ((Number 0.0)))) in (let () = ignore ((patch_i16 (em) (skip_jump) ((prim_call \"-\" [(current_offset (em)); (prim_call \"+\" [skip_jump; (Number 2.0)])])))) in (let () = ignore ((emit_op (em) ((Number 2.0)))) in (patch_i16 (em) (end_jump) ((prim_call \"-\" [(current_offset (em)); (prim_call \"+\" [end_jump; (Number 2.0)])]))))))))))))))\n\n(* compile-and *)\nand compile_and em args scope tail_p =\n (if sx_truthy ((empty_p (args))) then (emit_op (em) ((Number 3.0))) else (if sx_truthy ((prim_call \"=\" [(len (args)); (Number 1.0)])) then (compile_expr (em) ((first (args))) (scope) (tail_p)) else (let () = ignore ((compile_expr (em) ((first (args))) (scope) ((Bool false)))) in (let () = ignore ((emit_op (em) ((Number 6.0)))) in (let () = ignore ((emit_op (em) ((Number 33.0)))) in (let skip = (current_offset (em)) in (let () = ignore ((emit_i16 (em) ((Number 0.0)))) in (let () = ignore ((emit_op (em) ((Number 5.0)))) in (let () = ignore ((compile_and (em) ((rest (args))) (scope) (tail_p))) in (patch_i16 (em) (skip) ((prim_call \"-\" [(current_offset (em)); (prim_call \"+\" [skip; (Number 2.0)])]))))))))))))\n\n(* compile-or *)\nand compile_or em args scope tail_p =\n (if sx_truthy ((empty_p (args))) then (emit_op (em) ((Number 4.0))) else (if sx_truthy ((prim_call \"=\" [(len (args)); (Number 1.0)])) then (compile_expr (em) ((first (args))) (scope) (tail_p)) else (let () = ignore ((compile_expr (em) ((first (args))) (scope) ((Bool false)))) in (let () = ignore ((emit_op (em) ((Number 6.0)))) in (let () = ignore ((emit_op (em) ((Number 34.0)))) in (let skip = (current_offset (em)) in (let () = ignore ((emit_i16 (em) ((Number 0.0)))) in (let () = ignore ((emit_op (em) ((Number 5.0)))) in (let () = ignore ((compile_or (em) ((rest (args))) (scope) (tail_p))) in (patch_i16 (em) (skip) ((prim_call \"-\" [(current_offset (em)); (prim_call \"+\" [skip; (Number 2.0)])]))))))))))))\n\n(* compile-begin *)\nand compile_begin em exprs scope tail_p =\n (let () = ignore ((if sx_truthy ((let _and = (Bool (not (sx_truthy ((empty_p (exprs)))))) in if not (sx_truthy _and) then _and else (Bool (not (sx_truthy ((is_nil ((get (scope) ((String \"parent\"))))))))))) then (List.iter (fun expr -> ignore ((if sx_truthy ((let _and = (prim_call \"=\" [(type_of (expr)); (String \"list\")]) in if not (sx_truthy _and) then _and else (let _and = (prim_call \">=\" [(len (expr)); (Number 2.0)]) in if not (sx_truthy _and) then _and else (let _and = (prim_call \"=\" [(type_of ((first (expr)))); (String \"symbol\")]) in if not (sx_truthy _and) then _and else (prim_call \"=\" [(symbol_name ((first (expr)))); (String \"define\")]))))) then (let name_expr = (nth (expr) ((Number 1.0))) in let name = (if sx_truthy ((prim_call \"=\" [(type_of (name_expr)); (String \"symbol\")])) then (symbol_name (name_expr)) else name_expr) in (scope_define_local (scope) (name))) else Nil))) (sx_to_list exprs); Nil) else Nil)) in (if sx_truthy ((empty_p (exprs))) then (emit_op (em) ((Number 2.0))) else (if sx_truthy ((prim_call \"=\" [(len (exprs)); (Number 1.0)])) then (compile_expr (em) ((first (exprs))) (scope) (tail_p)) else (let () = ignore ((compile_expr (em) ((first (exprs))) (scope) ((Bool false)))) in (let () = ignore ((emit_op (em) ((Number 5.0)))) in (compile_begin (em) ((rest (exprs))) (scope) (tail_p)))))))\n\n(* compile-let *)\nand compile_let em args scope tail_p =\n (if sx_truthy ((prim_call \"=\" [(type_of ((first (args)))); (String \"symbol\")])) then (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 ((List.iter (fun binding -> ignore ((let () = ignore ((params := sx_append_b !params (if sx_truthy ((prim_call \"=\" [(type_of ((first (binding)))); (String \"symbol\")])) then (first (binding)) else (make_symbol ((first (binding))))); Nil)) in (inits := sx_append_b !inits (nth (binding) ((Number 1.0))); Nil)))) (sx_to_list bindings); Nil)) in (let lambda_expr = (prim_call \"concat\" [(List [(make_symbol ((String \"fn\"))); !params]); body]) in let letrec_bindings = (List [(List [(make_symbol (loop_name)); lambda_expr])]) in let call_expr = (cons ((make_symbol (loop_name))) (!inits)) in (compile_letrec (em) ((List [letrec_bindings; call_expr])) (scope) (tail_p))))) else (let bindings = (first (args)) in let body = (rest (args)) in let let_scope = (make_scope (scope)) in (let () = ignore ((sx_dict_set_b let_scope (String \"next-slot\") (get (scope) ((String \"next-slot\"))))) in (let () = ignore ((List.iter (fun binding -> ignore ((let name = (if sx_truthy ((prim_call \"=\" [(type_of ((first (binding)))); (String \"symbol\")])) then (symbol_name ((first (binding)))) else (first (binding))) in let value = (nth (binding) ((Number 1.0))) in let slot = (scope_define_local (let_scope) (name)) in (let () = ignore ((compile_expr (em) (value) (let_scope) ((Bool false)))) in (let () = ignore ((emit_op (em) ((Number 17.0)))) in (emit_byte (em) (slot))))))) (sx_to_list bindings); Nil)) in (compile_begin (em) (body) (let_scope) (tail_p))))))\n\n(* compile-letrec *)\nand compile_letrec em args scope tail_p =\n (let () = ignore ((String \"Compile letrec: all names visible during value compilation.\\n 1. Define all local slots (initialized to nil).\\n 2. Compile each value and assign — names are already in scope\\n so mutually recursive functions can reference each other.\")) in (let bindings = (first (args)) in let body = (rest (args)) in let let_scope = (make_scope (scope)) in (let () = ignore ((sx_dict_set_b let_scope (String \"next-slot\") (get (scope) ((String \"next-slot\"))))) in (let () = ignore ((let slots = (List (List.map (fun binding -> (let name = (if sx_truthy ((prim_call \"=\" [(type_of ((first (binding)))); (String \"symbol\")])) then (symbol_name ((first (binding)))) else (first (binding))) in (let slot = (scope_define_local (let_scope) (name)) in (let () = ignore ((emit_op (em) ((Number 2.0)))) in (let () = ignore ((emit_op (em) ((Number 17.0)))) in (let () = ignore ((emit_byte (em) (slot))) in slot)))))) (sx_to_list bindings))) in (List.iter (fun pair -> ignore ((let binding = (first (pair)) in let slot = (nth (pair) ((Number 1.0))) in (let () = ignore ((compile_expr (em) ((nth (binding) ((Number 1.0)))) (let_scope) ((Bool false)))) in (let () = ignore ((emit_op (em) ((Number 17.0)))) in (emit_byte (em) (slot))))))) (sx_to_list (List (List.map (fun i -> (List [(nth (bindings) (i)); (nth (slots) (i))])) (sx_to_list (prim_call \"range\" [(Number 0.0); (len (bindings))]))))); Nil))) in (compile_begin (em) (body) (let_scope) (tail_p))))))\n\n(* compile-lambda *)\nand compile_lambda em args scope =\n (let params = (first (args)) in let body = (rest (args)) in let fn_scope = (make_scope (scope)) in let fn_em = (make_emitter ()) in (let () = ignore ((sx_dict_set_b fn_scope (String \"is-function\") (Bool true))) in (let () = ignore ((List.iter (fun p -> ignore ((let name = (if sx_truthy ((prim_call \"=\" [(type_of (p)); (String \"symbol\")])) then (symbol_name (p)) else (if sx_truthy ((let _and = (list_p (p)) in if not (sx_truthy _and) then _and else (let _and = (Bool (not (sx_truthy ((empty_p (p)))))) in if not (sx_truthy _and) then _and else (prim_call \"=\" [(type_of ((first (p)))); (String \"symbol\")])))) then (symbol_name ((first (p)))) else p)) in (if sx_truthy ((let _and = (Bool (not (sx_truthy ((prim_call \"=\" [name; (String \"&key\")]))))) in if not (sx_truthy _and) then _and else (Bool (not (sx_truthy ((prim_call \"=\" [name; (String \"&rest\")]))))))) then (scope_define_local (fn_scope) (name)) else Nil)))) (sx_to_list params); Nil)) in (let () = ignore ((compile_begin (fn_em) (body) (fn_scope) ((Bool true)))) in (let () = ignore ((emit_op (fn_em) ((Number 50.0)))) in (let upvals = (get (fn_scope) ((String \"upvalues\"))) in let code = (let _d = Hashtbl.create 4 in Hashtbl.replace _d \"upvalue-count\" (len (upvals)); Hashtbl.replace _d \"arity\" (len ((get (fn_scope) ((String \"locals\"))))); Hashtbl.replace _d \"constants\" (get ((get (fn_em) ((String \"pool\")))) ((String \"entries\"))); Hashtbl.replace _d \"bytecode\" (get (fn_em) ((String \"bytecode\"))); Dict _d) in let code_idx = (pool_add ((get (em) ((String \"pool\")))) (code)) in (let () = ignore ((emit_op (em) ((Number 51.0)))) in (let () = ignore ((emit_u16 (em) (code_idx))) in (List.iter (fun uv -> ignore ((let () = ignore ((emit_byte (em) ((if sx_truthy ((get (uv) ((String \"is-local\")))) then (Number 1.0) else (Number 0.0))))) in (emit_byte (em) ((get (uv) ((String \"index\")))))))) (sx_to_list upvals); Nil)))))))))\n\n(* compile-define *)\nand compile_define em args scope =\n (let name_expr = (first (args)) in let name = (if sx_truthy ((prim_call \"=\" [(type_of (name_expr)); (String \"symbol\")])) then (symbol_name (name_expr)) else name_expr) in let value = (let rest_args = (rest (args)) in (if sx_truthy ((let _and = (Bool (not (sx_truthy ((empty_p (rest_args)))))) in if not (sx_truthy _and) then _and else (prim_call \"=\" [(type_of ((first (rest_args)))); (String \"keyword\")]))) then (skip_annotations (rest_args)) else (first (rest_args)))) in (if sx_truthy ((Bool (not (sx_truthy ((is_nil ((get (scope) ((String \"parent\")))))))))) then (let slot = (scope_define_local (scope) (name)) in (let () = ignore ((compile_expr (em) (value) (scope) ((Bool false)))) in (let () = ignore ((emit_op (em) ((Number 17.0)))) in (emit_byte (em) (slot))))) else (let name_idx = (pool_add ((get (em) ((String \"pool\")))) (name)) in (let () = ignore ((compile_expr (em) (value) (scope) ((Bool false)))) in (let () = ignore ((emit_op (em) ((Number 128.0)))) in (emit_u16 (em) (name_idx)))))))\n\n(* compile-set *)\nand compile_set em args scope =\n (let name = (if sx_truthy ((prim_call \"=\" [(type_of ((first (args)))); (String \"symbol\")])) then (symbol_name ((first (args)))) else (first (args))) in let value = (nth (args) ((Number 1.0))) in let resolved = (scope_resolve (scope) (name)) in (let () = ignore ((compile_expr (em) (value) (scope) ((Bool false)))) in (if sx_truthy ((prim_call \"=\" [(get (resolved) ((String \"type\"))); (String \"local\")])) then (let () = ignore ((emit_op (em) ((Number 17.0)))) in (emit_byte (em) ((get (resolved) ((String \"index\")))))) else (if sx_truthy ((prim_call \"=\" [(get (resolved) ((String \"type\"))); (String \"upvalue\")])) then (let () = ignore ((emit_op (em) ((Number 19.0)))) in (emit_byte (em) ((get (resolved) ((String \"index\")))))) else (let idx = (pool_add ((get (em) ((String \"pool\")))) (name)) in (let () = ignore ((emit_op (em) ((Number 21.0)))) in (emit_u16 (em) (idx))))))))\n\n(* compile-quote *)\nand compile_quote em args =\n (if sx_truthy ((empty_p (args))) then (emit_op (em) ((Number 2.0))) else (emit_const (em) ((first (args)))))\n\n(* compile-cond *)\nand compile_cond em args scope tail_p =\n (let () = ignore ((String \"Compile (cond test1 body1 test2 body2 ... :else fallback).\")) in (if sx_truthy ((prim_call \"<\" [(len (args)); (Number 2.0)])) then (emit_op (em) ((Number 2.0))) else (let test = (first (args)) in let body = (nth (args) ((Number 1.0))) in let rest_clauses = (if sx_truthy ((prim_call \">\" [(len (args)); (Number 2.0)])) then (prim_call \"slice\" [args; (Number 2.0)]) else (List [])) in (if sx_truthy ((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 (prim_call \"=\" [test; (Bool true)]))) then (compile_expr (em) (body) (scope) (tail_p)) else (let () = ignore ((compile_expr (em) (test) (scope) ((Bool false)))) in (let () = ignore ((emit_op (em) ((Number 33.0)))) in (let skip = (current_offset (em)) in (let () = ignore ((emit_i16 (em) ((Number 0.0)))) in (let () = ignore ((compile_expr (em) (body) (scope) (tail_p))) in (let () = ignore ((emit_op (em) ((Number 32.0)))) in (let end_jump = (current_offset (em)) in (let () = ignore ((emit_i16 (em) ((Number 0.0)))) in (let () = ignore ((patch_i16 (em) (skip) ((prim_call \"-\" [(current_offset (em)); (prim_call \"+\" [skip; (Number 2.0)])])))) in (let () = ignore ((compile_cond (em) (rest_clauses) (scope) (tail_p))) in (patch_i16 (em) (end_jump) ((prim_call \"-\" [(current_offset (em)); (prim_call \"+\" [end_jump; (Number 2.0)])])))))))))))))))))\n\n(* compile-case *)\nand compile_case em args scope tail_p =\n (let () = ignore ((String \"Compile (case expr val1 body1 val2 body2 ... :else fallback).\")) in (let () = ignore ((compile_expr (em) ((first (args))) (scope) ((Bool false)))) in (let clauses = (rest (args)) in (compile_case_clauses (em) (clauses) (scope) (tail_p)))))\n\n(* compile-case-clauses *)\nand compile_case_clauses em clauses scope tail_p =\n (if sx_truthy ((prim_call \"<\" [(len (clauses)); (Number 2.0)])) then (let () = ignore ((emit_op (em) ((Number 5.0)))) in (emit_op (em) ((Number 2.0)))) else (let test = (first (clauses)) in let body = (nth (clauses) ((Number 1.0))) in let rest_clauses = (if sx_truthy ((prim_call \">\" [(len (clauses)); (Number 2.0)])) then (prim_call \"slice\" [clauses; (Number 2.0)]) else (List [])) in (if sx_truthy ((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 (prim_call \"=\" [test; (Bool true)]))) then (let () = ignore ((emit_op (em) ((Number 5.0)))) in (compile_expr (em) (body) (scope) (tail_p))) else (let () = ignore ((emit_op (em) ((Number 6.0)))) in (let () = ignore ((compile_expr (em) (test) (scope) ((Bool false)))) in (let () = ignore ((let name_idx = (pool_add ((get (em) ((String \"pool\")))) ((String \"=\"))) in (let () = ignore ((emit_op (em) ((Number 52.0)))) in (let () = ignore ((emit_u16 (em) (name_idx))) in (emit_byte (em) ((Number 2.0))))))) in (let () = ignore ((emit_op (em) ((Number 33.0)))) in (let skip = (current_offset (em)) in (let () = ignore ((emit_i16 (em) ((Number 0.0)))) in (let () = ignore ((emit_op (em) ((Number 5.0)))) in (let () = ignore ((compile_expr (em) (body) (scope) (tail_p))) in (let () = ignore ((emit_op (em) ((Number 32.0)))) in (let end_jump = (current_offset (em)) in (let () = ignore ((emit_i16 (em) ((Number 0.0)))) in (let () = ignore ((patch_i16 (em) (skip) ((prim_call \"-\" [(current_offset (em)); (prim_call \"+\" [skip; (Number 2.0)])])))) in (let () = ignore ((compile_case_clauses (em) (rest_clauses) (scope) (tail_p))) in (patch_i16 (em) (end_jump) ((prim_call \"-\" [(current_offset (em)); (prim_call \"+\" [end_jump; (Number 2.0)])])))))))))))))))))))\n\n(* compile-thread *)\nand compile_thread em args scope tail_p =\n (let () = ignore ((String \"Compile (-> val (f1 a) (f2 b)) by desugaring to nested calls.\")) in (if sx_truthy ((empty_p (args))) then (emit_op (em) ((Number 2.0))) else (if sx_truthy ((prim_call \"=\" [(len (args)); (Number 1.0)])) then (compile_expr (em) ((first (args))) (scope) (tail_p)) else (let val_expr = (first (args)) in let forms = (rest (args)) in (compile_thread_step (em) (val_expr) (forms) (scope) (tail_p))))))\n\n(* compile-thread-step *)\nand compile_thread_step em val_expr forms scope tail_p =\n (if sx_truthy ((empty_p (forms))) then (compile_expr (em) (val_expr) (scope) (tail_p)) else (let form = (first (forms)) in let rest_forms = (rest (forms)) in let is_tail = (let _and = tail_p in if not (sx_truthy _and) then _and else (empty_p (rest_forms))) in (let call_expr = (if sx_truthy ((list_p (form))) then (prim_call \"concat\" [(List [(first (form)); val_expr]); (rest (form))]) else (List [form; val_expr])) in (if sx_truthy ((empty_p (rest_forms))) then (compile_expr (em) (call_expr) (scope) (is_tail)) else (let () = ignore ((compile_expr (em) (call_expr) (scope) ((Bool false)))) in (compile_thread_step (em) (call_expr) (rest_forms) (scope) (tail_p)))))))\n\n(* compile-defcomp *)\nand compile_defcomp em args scope =\n (let () = ignore ((String \"Compile defcomp/defisland — delegates to runtime via GLOBAL_GET + CALL.\")) in (let () = ignore ((let name_idx = (pool_add ((get (em) ((String \"pool\")))) ((String \"eval-defcomp\"))) in (let () = ignore ((emit_op (em) ((Number 20.0)))) in (emit_u16 (em) (name_idx))))) in (let () = ignore ((emit_const (em) ((prim_call \"concat\" [(List [(make_symbol ((String \"defcomp\")))]); args])))) in (let () = ignore ((emit_op (em) ((Number 48.0)))) in (emit_byte (em) ((Number 1.0)))))))\n\n(* compile-defmacro *)\nand compile_defmacro em args scope =\n (let () = ignore ((String \"Compile defmacro — delegates to runtime via GLOBAL_GET + CALL.\")) in (let () = ignore ((let name_idx = (pool_add ((get (em) ((String \"pool\")))) ((String \"eval-defmacro\"))) in (let () = ignore ((emit_op (em) ((Number 20.0)))) in (emit_u16 (em) (name_idx))))) in (let () = ignore ((emit_const (em) ((prim_call \"concat\" [(List [(make_symbol ((String \"defmacro\")))]); args])))) in (let () = ignore ((emit_op (em) ((Number 48.0)))) in (emit_byte (em) ((Number 1.0)))))))\n\n(* compile-quasiquote *)\nand compile_quasiquote em expr scope =\n (let () = ignore ((String \"Compile quasiquote inline — walks the template at compile time,\\n emitting code that builds the structure at runtime. Unquoted\\n expressions are compiled normally (resolving locals/upvalues),\\n avoiding the qq-expand-runtime env-lookup limitation.\")) in (compile_qq_expr (em) (expr) (scope)))\n\n(* compile-qq-expr *)\nand compile_qq_expr em expr scope =\n (let () = ignore ((String \"Compile a quasiquote sub-expression.\")) in (if sx_truthy ((Bool (not (sx_truthy ((prim_call \"=\" [(type_of (expr)); (String \"list\")])))))) then (emit_const (em) (expr)) else (if sx_truthy ((empty_p (expr))) then (let () = ignore ((emit_op (em) ((Number 64.0)))) in (emit_u16 (em) ((Number 0.0)))) else (let head = (first (expr)) 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 (compile_expr (em) ((nth (expr) ((Number 1.0)))) (scope) ((Bool false))) else (compile_qq_list (em) (expr) (scope)))))))\n\n(* compile-qq-list *)\nand compile_qq_list em items scope =\n (let () = ignore ((String \"Compile a quasiquote list. Handles splice-unquote by building\\n segments and concatenating them.\")) in (let has_splice = (Bool (List.exists (fun item -> 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\")])))))) (sx_to_list items))) in (if sx_truthy ((Bool (not (sx_truthy (has_splice))))) then (let () = ignore ((List.iter (fun item -> ignore ((compile_qq_expr (em) (item) (scope)))) (sx_to_list items); Nil)) in (let () = ignore ((emit_op (em) ((Number 64.0)))) in (emit_u16 (em) ((len (items)))))) else (let segment_count = ref ((Number 0.0)) in let pending = ref ((Number 0.0)) in (let () = ignore ((List.iter (fun item -> ignore ((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 () = ignore ((if sx_truthy ((prim_call \">\" [!pending; (Number 0.0)])) then (let () = ignore ((emit_op (em) ((Number 64.0)))) in (let () = ignore ((emit_u16 (em) (!pending))) in (let () = ignore ((segment_count := (prim_call \"+\" [!segment_count; (Number 1.0)]); Nil)) in (pending := (Number 0.0); Nil)))) else Nil)) in (let () = ignore ((compile_expr (em) ((nth (item) ((Number 1.0)))) (scope) ((Bool false)))) in (segment_count := (prim_call \"+\" [!segment_count; (Number 1.0)]); Nil))) else (let () = ignore ((compile_qq_expr (em) (item) (scope))) in (pending := (prim_call \"+\" [!pending; (Number 1.0)]); Nil))))) (sx_to_list items); Nil)) in (let () = ignore ((if sx_truthy ((prim_call \">\" [!pending; (Number 0.0)])) then (let () = ignore ((emit_op (em) ((Number 64.0)))) in (let () = ignore ((emit_u16 (em) (!pending))) in (segment_count := (prim_call \"+\" [!segment_count; (Number 1.0)]); Nil))) else Nil)) in (if sx_truthy ((prim_call \">\" [!segment_count; (Number 1.0)])) then (let concat_idx = (pool_add ((get (em) ((String \"pool\")))) ((String \"concat\"))) in (let () = ignore ((emit_op (em) ((Number 52.0)))) in (let () = ignore ((emit_u16 (em) (concat_idx))) in (emit_byte (em) (!segment_count))))) else Nil)))))))\n\n(* compile-call *)\nand compile_call em head args scope tail_p =\n (let is_prim = (let _and = (prim_call \"=\" [(type_of (head)); (String \"symbol\")]) in if not (sx_truthy _and) then _and else (let name = (symbol_name (head)) in (let _and = (Bool (not (sx_truthy ((prim_call \"=\" [(get ((scope_resolve (scope) (name))) ((String \"type\"))); (String \"local\")]))))) in if not (sx_truthy _and) then _and else (let _and = (Bool (not (sx_truthy ((prim_call \"=\" [(get ((scope_resolve (scope) (name))) ((String \"type\"))); (String \"upvalue\")]))))) in if not (sx_truthy _and) then _and else (is_primitive (name)))))) in (if sx_truthy (is_prim) then (let name = (symbol_name (head)) in let argc = (len (args)) in let name_idx = (pool_add ((get (em) ((String \"pool\")))) (name)) in (let () = ignore ((List.iter (fun a -> ignore ((compile_expr (em) (a) (scope) ((Bool false))))) (sx_to_list args); Nil)) in (let () = ignore ((emit_op (em) ((Number 52.0)))) in (let () = ignore ((emit_u16 (em) (name_idx))) in (emit_byte (em) (argc)))))) else (let () = ignore ((compile_expr (em) (head) (scope) ((Bool false)))) in (let () = ignore ((List.iter (fun a -> ignore ((compile_expr (em) (a) (scope) ((Bool false))))) (sx_to_list args); Nil)) in (if sx_truthy (tail_p) then (let () = ignore ((emit_op (em) ((Number 49.0)))) in (emit_byte (em) ((len (args))))) else (let () = ignore ((emit_op (em) ((Number 48.0)))) in (emit_byte (em) ((len (args))))))))))\n\n(* compile *)\nand compile expr =\n (let () = ignore ((String \"Compile a single SX expression to a bytecode module.\")) in (let em = (make_emitter ()) in let scope = (make_scope (Nil)) in (let () = ignore ((compile_expr (em) (expr) (scope) ((Bool false)))) in (let () = ignore ((emit_op (em) ((Number 50.0)))) in (let _d = Hashtbl.create 3 in let () = ignore (Hashtbl.replace _d \"arity\" (get (scope) (String \"next-slot\"))) in Hashtbl.replace _d \"constants\" (get ((get (em) ((String \"pool\")))) ((String \"entries\"))); Hashtbl.replace _d \"bytecode\" (get (em) ((String \"bytecode\"))); Dict _d)))))\n\n(* compile-module *)\nand compile_module exprs =\n (let () = ignore ((String \"Compile a list of top-level expressions to a bytecode module.\")) in (let em = (make_emitter ()) in let scope = (make_scope (Nil)) in (let () = ignore ((List.iter (fun expr -> ignore ((let () = ignore ((compile_expr (em) (expr) (scope) ((Bool false)))) in (emit_op (em) ((Number 5.0)))))) (sx_to_list (init (exprs))); Nil)) in (let () = ignore ((compile_expr (em) ((last (exprs))) (scope) ((Bool false)))) in (let () = ignore ((emit_op (em) ((Number 50.0)))) in (let _d = Hashtbl.create 3 in let () = ignore (Hashtbl.replace _d \"arity\" (get (scope) (String \"next-slot\"))) in Hashtbl.replace _d \"constants\" (get ((get (em) ((String \"pool\")))) ((String \"entries\"))); Hashtbl.replace _d \"bytecode\" (get (em) ((String \"bytecode\"))); Dict _d))))))\n\n","(* generated code *)"],"names":[],"mappings":"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","ignoreList":[1]}}]} diff --git a/shared/static/wasm/sx_browser.bc.wasm.assets/sx-86ee6606.wasm.map b/shared/static/wasm/sx_browser.bc.wasm.assets/sx-86ee6606.wasm.map deleted file mode 100644 index 3831866a..00000000 --- a/shared/static/wasm/sx_browser.bc.wasm.assets/sx-86ee6606.wasm.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"sections":[{"offset":{"line":0,"column":93170},"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 -> \"\"\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_file : string option; (** Source file path *)\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 mutable i_file : string option; (** Source file path *)\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\n(* Optional hook: called after every env_bind with (env, name, value).\n Used by browser kernel to sync VM globals table. *)\nlet _env_bind_hook : (env -> string -> value -> unit) option ref = ref None\n\n(* Optional hook: called after VM GLOBAL_SET writes to vm.globals.\n Used by browser kernel to sync mutations back to global_env. *)\nlet _vm_global_set_hook : (string -> value -> unit) option ref = ref None\n\nlet env_bind env name v =\n Hashtbl.replace env.bindings (intern name) v;\n (match !_env_bind_hook with Some f -> f env name v | None -> ());\n 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 begin\n Hashtbl.replace env.bindings id v;\n (match !_env_bind_hook with Some f -> f env (unintern id) v | None -> ());\n Nil\n end 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 -> \"\" | _ -> \"\"\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_file = None; 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 i_file = None;\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_file = function\n | Component c -> (match c.c_file with Some f -> String f | None -> Nil)\n | Island i -> (match i.i_file with Some f -> String f | None -> Nil)\n | _ -> Nil\n\nlet component_set_file v f =\n (match v, f with\n | Component c, String s -> c.c_file <- Some s\n | Island i, String s -> i.i_file <- Some s\n | _ -> ()); Nil\n\nlet component_set_file_b = component_set_file\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 \"\" c.c_name (String.concat \", \" c.c_params)\n | Island i ->\n Printf.sprintf \"\" 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 _ -> \"\"\n | Continuation (_, _) -> \"\"\n | NativeFn (name, _) -> Printf.sprintf \"\" name\n | Signal _ -> \"\"\n | RawHTML s -> Printf.sprintf \"\" (String.length s)\n | Spread _ -> \"\"\n | SxExpr s -> Printf.sprintf \"\" (String.length s)\n | Env _ -> \"\"\n | CekState _ -> \"\"\n | CekFrame f -> Printf.sprintf \"\" f.cf_type\n | VmClosure cl -> Printf.sprintf \"\" (match cl.vm_name with Some n -> n | None -> \"anon\")\n","(* generated code *)"],"names":[],"mappings":"SAsfgB,gBACA,qDACA,0C,EAAA,2BAEA,6BADA,6BAEA,+BACA,6B,CAAsB,C,EASO,IAAvC,EAA2B,QAA3B,EAAsC,OAAtC,eAAuC,MAAO,C,SAzBlC,QACP,aAqB+C,EAAhD,EAAkB,EArBjB,0FA8CS,gCAA0D,8CAD5D,4CADA,yBADL,cADG,2CADA,cADC,2CADD,cADU,oCADC,IADZ,gBAFX,gCAC8B,EAA9B,iBAA8B,aAA+B,yBAHlB,EAGkB,UAH7D,iBAA2C,eAA+B,kCAF5B,EAE4B,UAF1E,iBAA8C,eAA+B,8CAH7E,gCAC8B,EAA9B,iBAA8B,aAA+B,yBAH1B,EAA7B,EAFM,GAKiD,UALjD,IAAZ,OAAY,aAEZ,OAAM,eAAuB,OAAvB,aAA6B,gCAJnC,OAAwB,aAAwB,OAA1C,eAA0C,OAA1C,aAAgD,qBAFzC,EAEyC,UAFzC,+BADD,YAXZ,UAAU,EAAV,OAAU,eACV,yBAAuB,OACvB,EADuB,OACvB,cAOA,MADoC,OACpC,cAAuB,mCAZvB,OAAG,aAAkB,OAChB,sCADsB,iD,EAFb,EADD,EAGc,oBA0CkE,C,EApDlE,YAAQ,C,EAArC,6BAA2C,C,EAHd,oBAAe,C,EAA5C,6BAAkD,C,EAHnB,wBAAoB,C,EAFrB,0BAAuB,C,EAFzB,wBAAiB,C,EAFvC,IAAN,OAAM,eAAsB,QAA4B,gBAAG,C,EAHnC,4BAAgB,C,KAP1B,K,CAAA,qBACI,IADJ,OACI,OAC2C,IAF/C,KAE+C,IAApC,EAA0B,QAAS,OAAnC,aAAoC,MAAC,C,KAN/C,K,CAAA,4BACG,GAC2C,IAF9C,KAE8C,IAApC,EAA0B,QAAS,OAAnC,aAAoC,MAAC,C,KAN5C,K,CAAA,qBACL,IADK,OACL,eACgD,IAF3C,KAE2C,IAApC,EAA0B,QAAS,OAAnC,aAAoC,MAAC,C,KAN/C,K,CAAA,4BACF,WACgD,IAF9C,KAE8C,IAApC,EAA0B,QAAS,OAAnC,aAAoC,MAAC,C,MANzC,K,CAAA,4BACR,iBAAwD,MAAnB,IAAmB,UAAnB,M,GACW,IAFxC,KAEwC,IAApC,EAA0B,QAAS,OAAnC,aAAoC,MAAC,C,EALxB,UAAQ,C,MAD7B,K,CAAA,qBAC0C,IAAzC,GADD,OACJ,eAAK,aAAyC,OACE,IAF5C,KAE4C,IAApC,EAA0B,QAAS,OAAnC,aAAoC,MAAC,C,EAPvC,K,CAAA,E,EAAA,mB,GAAA,MAET,IADG,IACH,UADG,eAEV,EAAa,C,KARO,K,CAAA,wDAGsC,IAHtC,KAGsC,IAAxC,EAA8B,QAAS,OAAvC,aAAwC,MAAC,C,KAR5C,K,CAAA,wDAG2C,IAH3C,KAG2C,IAAxC,EAA8B,QAAS,OAAvC,aAAwC,MAAC,C,KAR/C,K,CAAA,gDAG8C,IAH9C,KAG8C,IAAxC,EAA8B,QAAS,OAAvC,aAAwC,MAAC,C,GAR7C,K,CAAA,E,EAAA,mB,GAAA,MAEuC,IAAzC,GAFE,UAEP,eAAK,aAAyC,MADG,IAAzC,GACsC,UAD3C,eAAK,aAAyC,OAEE,IAH5C,KAG4C,IAAxC,EAA8B,QAAS,OAAvC,aAAwC,MAAC,C,MAVlE,K,CAAA,E,EAAA,mB,GAAA,8B,CAEwB,EAFxB,UAEwB,SAFxB,OAEwB,e,CAAA,+BADG,SACH,OADG,WAEf,IAAG,C,GATI,K,CAAA,E,EAAA,mB,GAAA,gBAEL,iBAAkD,MAAnB,IAAmB,UAAnB,M,EAAA,UAD5B,iBAAkD,MAAnB,IAAmB,UAAnB,M,GAEzC,IAAG,C,KARS,K,CAAA,wDAG8C,IAH9C,KAG8C,IAAxC,EAA8B,QAAS,OAAvC,aAAwC,MAAC,C,KAP1C,K,CAAA,4BACV,kBAAoB,OAC3B,IAFiB,KAEjB,YAAmD,C,MAN1C,K,CAAA,4BACF,iBAAkD,MAAnB,IAAmB,UAAnB,M,GACiB,IAF9C,KAE8C,IAArC,EAA2B,QAAS,OAApC,aAAqC,MAAC,C,KAN5C,K,CAAA,qBACL,IADK,OACL,eACgD,IAF3C,KAE2C,IAArC,EAA2B,QAAS,OAApC,aAAqC,MAAC,C,KAN/C,K,CAAA,4BACF,WACgD,IAF9C,KAE8C,IAArC,EAA2B,QAAS,OAApC,aAAqC,MAAC,C,MAN7C,K,CAAA,qBAC0C,IAAzC,GADD,OACJ,eAAK,aAAyC,OACE,IAF5C,KAE4C,IAArC,EAA2B,QAAS,OAApC,aAAqC,MAAC,C,KAN9C,K,CAAA,qBACF,IADE,OACF,OACgD,IAF9C,KAE8C,IAAtC,EAA4B,QAAS,OAArC,aAAsC,MAAC,C,KANhD,K,CAAA,qBACF,IADE,OACF,OACgD,IAF9C,KAE8C,IAArC,EAA2B,QAAS,OAApC,aAAqC,MAAC,C,KATjD,K,CAAA,E,EAAA,kCAEP,OADe,IACX,C,EAVK,K,CAAA,E,EAAA,2CAC+C,OACxD,IAAK,C,EAPE,K,CAAA,E,EAAA,mB,GAAA,aACA,gBACF,wBACL,IAAK,C,EAJC,K,CAAA,mBAAoB,OAAY,IAAK,C,EADrC,K,CAAA,mBAAoB,OAAY,IAAK,C,EADpC,K,CAAA,mBAAqB,OAAY,IAAK,C,EADnC,K,CAAA,mBAAwB,OAAY,IAAK,C,EAD5C,K,CAAA,mBAAqB,OAAY,IAAK,C,EADzC,KAA4B,EAAK,C,GAzBhC,QACQ,wFAMI,IAgBJ,IADA,IADA,IADA,IADA,IADA,IADA,IADA,IADA,IADK,IADL,IADA,IADA,IADA,IADA,IADA,IAFA,IADA,IADA,IADA,IADA,GAqBU,C,EA5BsB,IAAtB,QAAsB,K,EADF,IAAtB,QAAsB,K,EAFK,MAAlB,aAAkB,IAAC,C,KAR/C,iBACA,UACD,UAG2C,cAAtB,UAAsB,UAClD,C,KAhBO,OAK2C,QAL3C,QACC,QACA,QAG0C,EAAtB,UAAsB,YAElD,C,SAlBO,iBACC,UACA,UACT,uCAA0C,I,EAGS,gBAAtB,UAAsB,kBAElD,C,QAfD,OAIyE,QAJzE,Q,CAAA,qBACkB,EADlB,OACkB,oBAA8B,IACvC,SAEgE,EAAtB,UAAsB,gBAAoC,C,KAT1F,K,CAAA,4BACR,GACJ,IAFY,KAEZ,YAA0D,C,KARzC,QAC2B,kDAAY,MAAI,C,KAJjD,QACK,iCAAa,MAAI,C,EALf,K,CAAA,E,EACsB,EADtB,sB,GAAA,mDACsB,sBACxC,IAAE,C,GARW,QAIX,2DAFK,OAAG,aAAkB,OAA0C,sCAApC,kC,EACH,EAAvB,EAD0B,mBAC1B,EACI,GAAS,C,OAbf,mBAAoB,WAAM,yCAA+B,C,QAbtE,uCACE,YAA8B,IAAjB,QAAb,OAAa,aAAiB,OAO3B,YAJD,WACK,sCACA,iB,CAAA,YAA8B,aAAsC,KADlD,KADH,GAII,GACxB,YAA8B,IAAjB,QAAb,OAAa,aAAiB,OAC3B,YAEH,MADsC,IAAjB,QADlB,OACkB,aAAiB,QACtC,kCAEkB,IAGnB,C,KApBgD,EAAb,eAAa,UAAE,C,SATrD,sBAAG,EAAH,OAAG,aAA2B,QAK5B,iBAEU,gCAAiC,eAD/B,MANsB,UAClC,IADkC,OAClC,cAAiC,kB,CAAA,cACK,EAAM,UAAN,QACtC,MAIgD,C,KAVD,EAAb,eAAa,UAAK,C,SARtD,sBAAM,EAAN,OAAM,eAAgC,QAGpC,gBAGiD,UAA7B,IAAlB,OAAkB,aAA6B,iBAFrC,K,EAAA,YAEsC,C,EATH,EAAb,aAAa,O,KAHjD,uCAA2B,wBAC+B,eAA1B,K,GAAA,GAA+B,C,QAPlC,iBAAa,YAA1C,IAA0C,OAA1C,cAA4C,kB,CAAA,EACN,MADM,UACN,IACtC,IAAG,C,KAbH,YAA8B,IAAjB,QAAb,OAAa,aAAiB,MAAwB,C,EAHxB,IAAjB,QAAb,OAAa,aAAiB,QAAiB,C,EAZ/B,mBAAiD,C,EAjJjE,KAAM,MAAN,OAAM,eAA6B,QAEO,EAAtB,EAAV,OAAU,eAAgB,OAAhB,aAAsB,iC,SAZ1C,OAAM,MAAN,OAAM,eAA4B,QAGhC,aACA,gCACA,+BACA,UAD8B,OAC9B,cAA8B,cAC5B,C,wBAXsD,EADlB,SCZ1C,ODY0C,eACA,SADkB,OAClB,eAAkB,I,EAAA,+E,EAAA,wC,EAAA,mU,QCb5D,4D,UAAA,G,EAAA,E,CAAA,8B,CAAA,e,EAAA,W,EAAA,Y,EAAA,a,QAAA,8B,EAAA,a,EAAA,a,WAAA,0C,EAAA,a,EAAA,a,EAAA,a,EAAA,a,iBAAA,kE,EAAA,a,EAAA,a,EAAA,a,EAAA,a,EAAA,a,oBAAA","ignoreList":[1]}},{"offset":{"line":0,"column":101877},"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":106641},"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)\nlet _is_client : bool ref = ref false\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 \"length\" (Hashtbl.find primitives \"len\");\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 (* client? — false by default (server); sx_browser.ml sets _is_client := true *)\n register \"client?\" (fun _args -> Bool !_is_client);\n (* Named stores — global mutable registry, bypasses env scoping issues *)\n let store_registry : (string, value) Hashtbl.t = Hashtbl.create 16 in\n register \"def-store\" (fun args ->\n match args with\n | [String name; init_fn] ->\n if not (Hashtbl.mem store_registry name) then begin\n let store = !_sx_trampoline_fn (!_sx_call_fn init_fn []) in\n Hashtbl.replace store_registry name store\n end;\n (match Hashtbl.find_opt store_registry name with Some v -> v | None -> Nil)\n | _ -> raise (Eval_error \"def-store: expected (name init-fn)\"));\n register \"use-store\" (fun args ->\n match args with\n | [String name] ->\n (match Hashtbl.find_opt store_registry name with\n | Some v -> v\n | None -> raise (Eval_error (\"Store not found: \" ^ name)))\n | _ -> raise (Eval_error \"use-store: expected (name)\"));\n register \"clear-stores\" (fun _args -> Hashtbl.clear store_registry; Nil);\n (* SSR stubs — resource returns loading state on server.\n NOTE: effect and register-in-scope must NOT be registered as primitives\n here — the bytecode compiler uses primitive? to decide CALL_PRIM vs\n GLOBAL_GET+CALL. If effect is a primitive, bytecoded modules emit\n CALL_PRIM which returns Nil instead of calling the real effect function\n from core-signals.sx. The server overrides effect in sx_server.ml via\n env_bind AFTER compilation. *)\n (* register \"effect\" — REMOVED: see note above *)\n (* register \"register-in-scope\" — REMOVED: see note above *)\n (* resource — SSR stub: return signal with {loading: true}, client hydrates real fetch *)\n register \"resource\" (fun _args ->\n let state = Hashtbl.create 8 in\n Hashtbl.replace state \"loading\" (Bool true);\n Hashtbl.replace state \"data\" Nil;\n Hashtbl.replace state \"error\" Nil;\n let sig_d = Hashtbl.create 8 in\n Hashtbl.replace sig_d \"__signal\" (Bool true);\n Hashtbl.replace sig_d \"value\" (Dict state);\n Hashtbl.replace sig_d \"subscribers\" (List []);\n Hashtbl.replace sig_d \"deps\" (List []);\n Dict sig_d);\n register \"apply\" (fun args ->\n let call f a =\n match f with\n | NativeFn (_, fn) -> fn a\n | _ -> !_sx_trampoline_fn (!_sx_call_fn f a)\n in\n match args with\n | [f; (List a | ListRef { contents = a })] -> call f a\n | [f; Nil] -> call 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 let rec find = function\n | [] -> Bool false\n | x :: rest ->\n let result = call_any f [x] in\n if sx_truthy result then result else find rest\n in find items\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 \"component-file\" (fun args ->\n match args with [v] -> component_file v | _ -> Nil);\n register \"component-set-file!\" (fun args ->\n match args with [v; f] -> component_set_file v f | _ -> 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":144162},"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 | _ ->\n let nargs = List.length args in\n let args_preview = if nargs = 0 then \"\" else\n let s = String.concat \", \" (List.map (fun a -> let s = inspect a in if String.length s > 40 then String.sub s 0 40 ^ \"..\" else s) args) in\n \" with args=[\" ^ s ^ \"]\" in\n raise (Eval_error (\"Not callable: \" ^ inspect f ^ args_preview))\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 | \"file\" -> f.cf_env\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(* mutable_list — mutable list for bytecode compiler pool entries *)\nlet mutable_list () = ListRef (ref [])\n\n","(* generated code *)"],"names":[],"mappings":"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","ignoreList":[1]}},{"offset":{"line":0,"column":156489},"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(* Component trace — captures kont from last CEK error for diagnostics *)\nlet _last_error_kont : value ref = ref Nil\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(* make-comp-trace-frame *)\nand make_comp_trace_frame name file =\n (CekFrame { cf_type = \"comp-trace\"; cf_env = file; 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(* kont-collect-comp-trace *)\nand kont_collect_comp_trace kont =\n (if sx_truthy ((empty_p (kont))) then (List []) else (let frame = (first (kont)) in (if sx_truthy ((prim_call \"=\" [(frame_type (frame)); (String \"comp-trace\")])) then (cons ((let _d = Hashtbl.create 2 in Hashtbl.replace _d \"file\" (get (frame) ((String \"file\"))); Hashtbl.replace _d \"name\" (get (frame) ((String \"name\"))); Dict _d)) ((kont_collect_comp_trace ((rest (kont)))))) else (kont_collect_comp_trace ((rest (kont)))))))\n\n(* make-handler-frame *)\nand make_handler_frame handlers remaining env =\n (CekFrame { cf_type = \"handler\"; cf_env = env; cf_name = Nil; cf_body = Nil; cf_remaining = remaining; cf_f = handlers; cf_args = Nil; cf_results = Nil; cf_extra = Nil; cf_extra2 = Nil })\n\n(* make-restart-frame *)\nand make_restart_frame restarts remaining env =\n (CekFrame { cf_type = \"restart\"; cf_env = env; cf_name = Nil; cf_body = Nil; cf_remaining = remaining; cf_f = restarts; cf_args = Nil; cf_results = Nil; cf_extra = Nil; cf_extra2 = Nil })\n\n(* make-signal-return-frame *)\nand make_signal_return_frame env saved_kont =\n (CekFrame { cf_type = \"signal-return\"; cf_env = env; cf_name = Nil; cf_body = Nil; cf_remaining = Nil; cf_f = saved_kont; cf_args = Nil; cf_results = Nil; cf_extra = Nil; cf_extra2 = Nil })\n\n(* find-matching-handler *)\nand find_matching_handler handlers condition =\n (if sx_truthy ((empty_p (handlers))) then Nil else (let pair = (first (handlers)) in (let pred = (first (pair)) in let handler_fn = (nth (pair) ((Number 1.0))) in (if sx_truthy ((cek_call (pred) ((List [condition])))) then handler_fn else (find_matching_handler ((rest (handlers))) (condition))))))\n\n(* kont-find-handler *)\nand kont_find_handler kont condition =\n (if sx_truthy ((empty_p (kont))) then Nil else (let frame = (first (kont)) in (if sx_truthy ((prim_call \"=\" [(frame_type (frame)); (String \"handler\")])) then (let match' = (find_matching_handler ((get (frame) ((String \"f\")))) (condition)) in (if sx_truthy ((is_nil (match'))) then (kont_find_handler ((rest (kont))) (condition)) else match')) else (kont_find_handler ((rest (kont))) (condition)))))\n\n(* find-named-restart *)\nand find_named_restart restarts name =\n (if sx_truthy ((empty_p (restarts))) then Nil else (let entry = (first (restarts)) in (if sx_truthy ((prim_call \"=\" [(first (entry)); name])) then entry else (find_named_restart ((rest (restarts))) (name)))))\n\n(* kont-find-restart *)\nand kont_find_restart kont name =\n (if sx_truthy ((empty_p (kont))) then Nil else (let frame = (first (kont)) in (if sx_truthy ((prim_call \"=\" [(frame_type (frame)); (String \"restart\")])) then (let match' = (find_named_restart ((get (frame) ((String \"f\")))) (name)) in (if sx_truthy ((is_nil (match'))) then (kont_find_restart ((rest (kont))) (name)) else (List [match'; frame; (rest (kont))]))) else (kont_find_restart ((rest (kont))) (name)))))\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(* call-lambda *)\nand call_lambda f args caller_env =\n (let params = (lambda_params (f)) in let local = (env_merge ((lambda_closure (f))) (caller_env)) in (if sx_truthy ((prim_call \">\" [(len (args)); (len (params))])) then (raise (Eval_error (value_to_str (String (sx_str [(let _or = (lambda_name (f)) in if sx_truthy _or then _or else (String \"lambda\")); (String \" expects \"); (len (params)); (String \" args, got \"); (len (args))]))))) else (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\" [params; args])); Nil)) in (let () = ignore ((List.iter (fun p -> ignore ((env_bind local (sx_to_string p) Nil))) (sx_to_list (prim_call \"slice\" [params; (len (args))])); Nil)) in (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 ((if sx_truthy ((env_has (env) ((String \"*current-file*\")))) then (component_set_file_b (comp) ((env_get (env) ((String \"*current-file*\"))))) 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 *)\nand sf_defisland args env =\n (let name_sym = (first (args)) in let params_raw = (nth (args) ((Number 1.0))) in let body_exprs = (prim_call \"slice\" [args; (Number 2.0)]) 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 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 ((if sx_truthy ((env_has (env) ((String \"*current-file*\")))) then (component_set_file_b (island) ((env_get (env) ((String \"*current-file*\"))))) else Nil)) 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/WASM stack overflow *)\nand cek_run state =\n let s = ref state in\n (try\n while not (sx_truthy (cek_terminal_p !s)) do\n s := cek_step !s\n done;\n cek_value !s\n with Eval_error msg ->\n (if !_last_error_kont = Nil then _last_error_kont := cek_kont !s);\n raise (Eval_error msg))\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 \"handler-bind\")])) then (step_sf_handler_bind (args) (env) (kont)) else (if sx_truthy ((prim_call \"=\" [name; (String \"restart-case\")])) then (step_sf_restart_case (args) (env) (kont)) else (if sx_truthy ((prim_call \"=\" [name; (String \"signal-condition\")])) then (step_sf_signal (args) (env) (kont)) else (if sx_truthy ((prim_call \"=\" [name; (String \"invoke-restart\")])) then (step_sf_invoke_restart (args) (env) (kont)) else (if sx_truthy ((prim_call \"=\" [name; (String \"match\")])) then (step_sf_match (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(* match-find-clause *)\nand match_find_clause val' clauses env =\n (if sx_truthy ((empty_p (clauses))) then Nil else (let clause = (first (clauses)) in let pattern = (first (clause)) in let body = (nth (clause) ((Number 1.0))) in let local = (env_extend (env)) in (if sx_truthy ((match_pattern (pattern) (val') (local))) then (List [local; body]) else (match_find_clause (val') ((rest (clauses))) (env)))))\n\n(* match-pattern *)\nand match_pattern pattern value env =\n (if sx_truthy ((prim_call \"=\" [pattern; (Symbol \"_\")])) then (Bool true) else (if sx_truthy ((let _and = (list_p (pattern)) in if not (sx_truthy _and) then _and else (let _and = (prim_call \"=\" [(len (pattern)); (Number 2.0)]) in if not (sx_truthy _and) then _and else (prim_call \"=\" [(first (pattern)); (Symbol \"?\")])))) then (let pred = (trampoline ((eval_expr ((nth (pattern) ((Number 1.0)))) (env)))) in (cek_call (pred) ((List [value])))) else (if sx_truthy ((let _and = (list_p (pattern)) in if not (sx_truthy _and) then _and else (let _and = (Bool (not (sx_truthy ((empty_p (pattern)))))) in if not (sx_truthy _and) then _and else (prim_call \"=\" [(first (pattern)); (Symbol \"quote\")])))) then (prim_call \"=\" [value; (nth (pattern) ((Number 1.0)))]) else (if sx_truthy ((symbol_p (pattern))) then (let () = ignore ((env_bind env (sx_to_string (symbol_name (pattern))) value)) in (Bool true)) else (if sx_truthy ((let _and = (list_p (pattern)) in if not (sx_truthy _and) then _and else (list_p (value)))) then (if sx_truthy ((Bool (not (sx_truthy ((prim_call \"=\" [(len (pattern)); (len (value))])))))) then (Bool false) else (let pairs = (prim_call \"zip\" [pattern; value]) in (Bool (List.for_all (fun pair -> sx_truthy ((match_pattern ((first (pair))) ((nth (pair) ((Number 1.0)))) (env)))) (sx_to_list pairs))))) else (prim_call \"=\" [pattern; value]))))))\n\n(* step-sf-match *)\nand step_sf_match args env kont =\n (let val' = (trampoline ((eval_expr ((first (args))) (env)))) in let clauses = (rest (args)) in (let result' = (match_find_clause (val') (clauses) (env)) in (if sx_truthy ((is_nil (result'))) then (raise (Eval_error (value_to_str (String (sx_str [(String \"match: no clause matched \"); (inspect (val'))]))))) else (make_cek_state ((nth (result') ((Number 1.0)))) ((first (result'))) (kont)))))\n\n(* step-sf-handler-bind *)\nand step_sf_handler_bind args env kont =\n (let handler_specs = (first (args)) in let body = (rest (args)) in let handlers = (List (List.map (fun spec -> (List [(trampoline ((eval_expr ((first (spec))) (env)))); (trampoline ((eval_expr ((nth (spec) ((Number 1.0)))) (env))))])) (sx_to_list handler_specs))) in (if sx_truthy ((empty_p (body))) then (make_cek_value (Nil) (env) (kont)) else (make_cek_state ((first (body))) (env) ((kont_push ((make_handler_frame (handlers) ((rest (body))) (env))) (kont))))))\n\n(* step-sf-restart-case *)\nand step_sf_restart_case args env kont =\n (let body = (first (args)) in let restart_specs = (rest (args)) in let restarts = (List (List.map (fun spec -> (List [(if sx_truthy ((symbol_p ((first (spec))))) then (symbol_name ((first (spec)))) else (first (spec))); (nth (spec) ((Number 1.0))); (nth (spec) ((Number 2.0)))])) (sx_to_list restart_specs))) in (make_cek_state (body) (env) ((kont_push ((make_restart_frame (restarts) ((List [])) (env))) (kont)))))\n\n(* step-sf-signal *)\nand step_sf_signal args env kont =\n (let condition = (trampoline ((eval_expr ((first (args))) (env)))) in let handler_fn = (kont_find_handler (kont) (condition)) in (if sx_truthy ((is_nil (handler_fn))) then (raise (Eval_error (value_to_str (String (sx_str [(String \"Unhandled condition: \"); (inspect (condition))]))))) else (continue_with_call (handler_fn) ((List [condition])) (env) ((List [condition])) ((kont_push ((make_signal_return_frame (env) (kont))) (kont))))))\n\n(* step-sf-invoke-restart *)\nand step_sf_invoke_restart args env kont =\n (let restart_name = (let rn = (if sx_truthy ((symbol_p ((first (args))))) then (symbol_name ((first (args)))) else (trampoline ((eval_expr ((first (args))) (env))))) in (if sx_truthy ((symbol_p (rn))) then (symbol_name (rn)) else rn)) in let restart_arg = (if sx_truthy ((prim_call \">=\" [(len (args)); (Number 2.0)])) then (trampoline ((eval_expr ((nth (args) ((Number 1.0)))) (env)))) else Nil) in let found = (kont_find_restart (kont) (restart_name)) in (if sx_truthy ((is_nil (found))) then (raise (Eval_error (value_to_str (String (sx_str [(String \"No restart named: \"); (inspect (restart_name))]))))) else (let entry = (first (found)) in let restart_frame = (nth (found) ((Number 1.0))) in let rest_kont = (nth (found) ((Number 2.0))) in (let params = (nth (entry) ((Number 1.0))) in let body = (nth (entry) ((Number 2.0))) in let restart_env = (env_extend ((get (restart_frame) ((String \"env\"))))) in (let () = ignore ((if sx_truthy ((Bool (not (sx_truthy ((empty_p (params))))))) then (env_bind restart_env (sx_to_string (first (params))) restart_arg) else Nil)) in (make_cek_state (body) (restart_env) (rest_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 ((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 — check kont provide frames first, then fall back to scope_stacks *)\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 (if sx_truthy ((Bool (not (sx_truthy ((is_nil (frame))))))) then (make_cek_value ((get (frame) ((String \"value\")))) (env) (kont)) else (let scope_val = (sx_context (name) (Nil)) in (make_cek_value ((if sx_truthy ((is_nil (scope_val))) then default_val else scope_val)) (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 (if sx_truthy ((prim_call \"=\" [ft; (String \"handler\")])) 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_handler_frame ((get (frame) ((String \"f\")))) ((rest (remaining))) (fenv))) (rest_k)))))) else (if sx_truthy ((prim_call \"=\" [ft; (String \"restart\")])) then (make_cek_value (value) (env) (rest_k)) else (if sx_truthy ((prim_call \"=\" [ft; (String \"signal-return\")])) then (let saved_kont = (get (frame) ((String \"f\"))) in (make_cek_value (value) ((get (frame) ((String \"env\")))) (saved_kont))) else (if sx_truthy ((prim_call \"=\" [ft; (String \"comp-trace\")])) then (make_cek_value (value) (env) (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 params = (lambda_params (f)) in let local = (env_merge ((lambda_closure (f))) (env)) in (if sx_truthy ((prim_call \">\" [(len (args)); (len (params))])) then (raise (Eval_error (value_to_str (String (sx_str [(let _or = (lambda_name (f)) in if sx_truthy _or then _or else (String \"lambda\")); (String \" expects \"); (len (params)); (String \" args, got \"); (len (args))]))))) else (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\" [params; args])); Nil)) in (let () = ignore ((List.iter (fun p -> ignore ((env_bind local (sx_to_string p) Nil))) (sx_to_list (prim_call \"slice\" [params; (len (args))])); Nil)) 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_push ((make_comp_trace_frame ((component_name (f))) ((component_file (f))))) (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(* Collect component trace from a kont value *)\nlet collect_comp_trace kont =\n let trace = ref [] in\n let k = ref kont in\n while (match !k with List (_::_) -> true | _ -> false) do\n (match !k with\n | List (frame :: rest) ->\n (match frame with\n | CekFrame f when f.cf_type = \"comp-trace\" ->\n let name = match f.cf_name with String s -> s | _ -> \"?\" in\n let file = match f.cf_env with String s -> s | Nil -> \"\" | _ -> \"\" in\n trace := (name, file) :: !trace\n | Dict d when (match Hashtbl.find_opt d \"type\" with Some (String \"comp-trace\") -> true | _ -> false) ->\n let name = match Hashtbl.find_opt d \"name\" with Some (String s) -> s | _ -> \"?\" in\n let file = match Hashtbl.find_opt d \"file\" with Some (String s) -> s | _ -> \"\" in\n trace := (name, file) :: !trace\n | _ -> ());\n k := List rest\n | _ -> k := List [])\n done;\n List.rev !trace\n\n(* Format a comp-trace into a human-readable string *)\nlet format_comp_trace trace =\n match trace with\n | [] -> \"\"\n | entries ->\n let lines = List.mapi (fun i (name, file) ->\n let prefix = if i = 0 then \" in \" else \" called from \" in\n if file = \"\" then prefix ^ \"~\" ^ name\n else prefix ^ \"~\" ^ name ^ \" (\" ^ file ^ \")\"\n ) entries in\n \"\n\" ^ String.concat \"\n\" lines\n\n(* Enhance an error message with component trace *)\nlet enhance_error_with_trace msg =\n let trace = collect_comp_trace !_last_error_kont in\n _last_error_kont := Nil;\n msg ^ (format_comp_trace trace)\n\n\n\n","(* generated code *)"],"names":[],"mappings":"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","ignoreList":[1]}},{"offset":{"line":0,"column":230621},"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\n(** Current active VM — allows HO primitives (map, filter, for-each, some)\n to call VmClosure callbacks on the same VM instead of creating a new one.\n This is critical: creating a new VM per callback loses the calling VM's\n stack/frame context, causing upvalue-captured host objects to become\n inaccessible. *)\nlet _active_vm : vm option ref = ref None\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 prev_vm = !_active_vm in\n let vm = create globals in\n _active_vm := Some vm;\n push_closure_frame vm cl args;\n (try run vm with e -> _active_vm := prev_vm; raise e);\n _active_vm := prev_vm;\n pop vm\n\n(** Call a VmClosure on the active VM if one exists, otherwise create a new one.\n This is the path used by HO primitives (map, filter, for-each, some) so\n callbacks can access upvalues that reference the calling VM's state. *)\nand call_closure_reuse cl args =\n call_closure cl args cl.vm_env_ref\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 _e ->\n (* Fallback to CEK — data-dependent error, not a JIT bug.\n Dedup logging happens in register_jit_hook. *)\n 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 _e -> 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 begin\n (* Bytecode exhausted without explicit RETURN — pop frame like RETURN *)\n let fn_name = match frame.closure.vm_name with Some n -> n | None -> \"?\" in\n Printf.eprintf \"[vm] WARN: bytecode exhausted without RETURN in %s (base=%d sp=%d frames=%d)\\n%!\"\n fn_name frame.base vm.sp (List.length rest_frames);\n let result = if vm.sp > frame.base then pop vm else Nil in\n vm.frames <- rest_frames;\n vm.sp <- frame.base;\n if rest_frames <> [] then push vm result\n (* If no more frames, result stays on stack for call_closure to pop *)\n end\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 begin\n let v = peek vm in\n Hashtbl.replace vm.globals name v;\n (match !Sx_types._vm_global_set_hook with Some f -> f name v | None -> ())\n end\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 = frame.closure.vm_closure_env } 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 | VmClosure _ | Lambda _ | Component _ | Island _ ->\n Sx_ref.cek_call fn_val (List 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 (match !Sx_types._vm_global_set_hook with\n | Some f -> f name v | None -> ())\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 -> \"\" 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 (* Use Symbol \"compile\" so the CEK resolves it from the env, not\n an embedded VmClosure value — the CEK dispatches VmClosure calls\n differently when the value is resolved from env vs embedded in AST. *)\n ignore compile_fn;\n let compile_env = Sx_types.env_extend (Sx_types.make_env ()) in\n Hashtbl.iter (fun k v -> Hashtbl.replace compile_env.bindings (Sx_types.intern k) v) globals;\n let result = Sx_ref.eval_expr (List [Symbol \"compile\"; quoted]) (Env compile_env) in\n (* Closure vars are accessible via vm_closure_env (set on the VmClosure\n at line ~617). OP_GLOBAL_GET falls back to vm_closure_env when vars\n aren't in globals. No injection into the shared globals table —\n that would break closure isolation for factory functions like\n make-page-fn where multiple closures capture different values\n for the same variable names. *)\n let effective_globals = globals 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\n\n(** {1 Debugging / introspection} *)\n\n(** Map opcode integer to human-readable name. *)\nlet opcode_name = function\n | 1 -> \"CONST\" | 2 -> \"NIL\" | 3 -> \"TRUE\" | 4 -> \"FALSE\"\n | 5 -> \"POP\" | 6 -> \"DUP\"\n | 16 -> \"LOCAL_GET\" | 17 -> \"LOCAL_SET\"\n | 18 -> \"UPVALUE_GET\" | 19 -> \"UPVALUE_SET\"\n | 20 -> \"GLOBAL_GET\" | 21 -> \"GLOBAL_SET\"\n | 32 -> \"JUMP\" | 33 -> \"JUMP_IF_FALSE\" | 34 -> \"JUMP_IF_TRUE\"\n | 48 -> \"CALL\" | 49 -> \"TAIL_CALL\" | 50 -> \"RETURN\"\n | 51 -> \"CLOSURE\" | 52 -> \"CALL_PRIM\"\n | 64 -> \"LIST\" | 65 -> \"DICT\"\n | 128 -> \"DEFINE\"\n | 144 -> \"STR_CONCAT\"\n | 160 -> \"ADD\" | 161 -> \"SUB\" | 162 -> \"MUL\" | 163 -> \"DIV\"\n | 164 -> \"EQ\" | 165 -> \"LT\" | 166 -> \"GT\" | 167 -> \"NOT\"\n | 168 -> \"LEN\" | 169 -> \"FIRST\" | 170 -> \"REST\" | 171 -> \"NTH\"\n | 172 -> \"CONS\" | 173 -> \"NEG\" | 174 -> \"INC\" | 175 -> \"DEC\"\n | n -> Printf.sprintf \"UNKNOWN_%d\" n\n\n(** Number of extra operand bytes consumed by each opcode.\n Returns (format, total_bytes) where format describes the operand types. *)\nlet opcode_operand_size = function\n | 1 (* CONST *) | 20 (* GLOBAL_GET *) | 21 (* GLOBAL_SET *)\n | 64 (* LIST *) | 65 (* DICT *) | 128 (* DEFINE *) -> 2 (* u16 *)\n | 16 (* LOCAL_GET *) | 17 (* LOCAL_SET *)\n | 18 (* UPVALUE_GET *) | 19 (* UPVALUE_SET *)\n | 48 (* CALL *) | 49 (* TAIL_CALL *)\n | 144 (* STR_CONCAT *) -> 1 (* u8 *)\n | 32 (* JUMP *) | 33 (* JUMP_IF_FALSE *) | 34 (* JUMP_IF_TRUE *) -> 2 (* i16 *)\n | 51 (* CLOSURE *) -> 2 (* u16 for constant index; upvalue descriptors follow dynamically *)\n | 52 (* CALL_PRIM *) -> 3 (* u16 + u8 *)\n | _ -> 0 (* no operand *)\n\n(** Trace a single execution — compile + run, collecting trace entries.\n Each entry is a dict with :opcode, :stack, :depth. *)\nlet trace_run src globals =\n (* Compile *)\n let compile_fn = try Hashtbl.find globals \"compile\"\n with Not_found -> raise (Eval_error \"trace: compiler not loaded\") in\n let exprs = Sx_parser.parse_all src in\n let expr = match exprs with [e] -> e | _ -> List (Symbol \"do\" :: exprs) in\n let quoted = List [Symbol \"quote\"; expr] in\n let code_val = Sx_ref.eval_expr (List [compile_fn; quoted]) (Env (make_env ())) in\n let code = code_from_value code_val in\n let cl = { vm_code = code; vm_upvalues = [||]; vm_name = Some \"trace\";\n vm_env_ref = globals; vm_closure_env = None } in\n let vm = create globals in\n let frame0 = { 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 <- [frame0];\n (* Run with tracing *)\n let trace = ref [] in\n let max_steps = 10000 in\n let steps = ref 0 in\n (try\n while vm.frames <> [] && !steps < max_steps do\n match vm.frames with\n | [] -> ()\n | frame :: _ ->\n let bc = frame.closure.vm_code.vc_bytecode in\n if frame.ip >= Array.length bc then\n vm.frames <- []\n else begin\n let op = bc.(frame.ip) in\n (* Snapshot stack top 5 *)\n let stack_snap = List.init (min 5 vm.sp) (fun i ->\n let v = vm.stack.(vm.sp - 1 - i) in\n String (Sx_types.inspect v)) in\n let entry = Hashtbl.create 4 in\n Hashtbl.replace entry \"opcode\" (String (opcode_name op));\n Hashtbl.replace entry \"stack\" (List stack_snap);\n Hashtbl.replace entry \"depth\" (Number (float_of_int (List.length vm.frames)));\n trace := Dict entry :: !trace;\n incr steps;\n (* Execute one step — use the main run loop for 1 step.\n We do this by saving the state and running the original dispatch. *)\n let saved_ip = frame.ip in\n frame.ip <- frame.ip + 1;\n let rest_frames = List.tl vm.frames in\n (try match op with\n | 1 -> let idx = read_u16 frame in push vm frame.closure.vm_code.vc_constants.(idx)\n | 2 -> push vm Nil\n | 3 -> push vm (Bool true)\n | 4 -> push vm (Bool false)\n | 5 -> ignore (pop vm)\n | 6 -> push vm (peek vm)\n | 16 -> 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 -> vm.stack.(frame.base + slot) in\n push vm v\n | 17 -> let slot = read_u8 frame in let v = peek vm in\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 -> let idx = read_u8 frame in\n push vm frame.closure.vm_upvalues.(idx).uv_value\n | 19 -> let idx = read_u8 frame in\n frame.closure.vm_upvalues.(idx).uv_value <- peek vm\n | 20 -> let idx = read_u16 frame in\n let name = match frame.closure.vm_code.vc_constants.(idx) with String s -> s | _ -> \"\" in\n let v = try Hashtbl.find vm.globals name with Not_found ->\n try Sx_primitives.get_primitive name with _ ->\n raise (Eval_error (\"VM undefined: \" ^ name)) in\n push vm v\n | 21 -> let idx = read_u16 frame in\n let name = match frame.closure.vm_code.vc_constants.(idx) with String s -> s | _ -> \"\" in\n Hashtbl.replace vm.globals name (peek vm)\n | 32 -> let offset = read_i16 frame in frame.ip <- frame.ip + offset\n | 33 -> let offset = read_i16 frame in let v = pop vm in\n if not (sx_truthy v) then frame.ip <- frame.ip + offset\n | 34 -> let offset = read_i16 frame in let v = pop vm in\n if sx_truthy v then frame.ip <- frame.ip + offset\n | 48 -> let argc = read_u8 frame in\n let args = Array.init argc (fun _ -> pop vm) in\n let f = pop vm in\n vm_call vm f (List.rev (Array.to_list args))\n | 49 -> let argc = read_u8 frame in\n let args = Array.init argc (fun _ -> pop vm) in\n let f = pop vm in\n vm.frames <- rest_frames; vm.sp <- frame.base;\n vm_call vm f (List.rev (Array.to_list args))\n | 50 -> let result = pop vm in\n vm.frames <- rest_frames; vm.sp <- frame.base; push vm result\n | 51 -> (* CLOSURE — skip for trace, just advance past upvalue descriptors *)\n let idx = read_u16 frame in\n let code_val2 = frame.closure.vm_code.vc_constants.(idx) in\n let uv_count = match code_val2 with\n | Dict d -> (match Hashtbl.find_opt d \"upvalue-count\" with\n | Some (Number n) -> int_of_float n | _ -> 0)\n | _ -> 0 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 let cell = match Hashtbl.find_opt frame.local_cells index with\n | Some existing -> existing\n | None ->\n let c = { uv_value = vm.stack.(frame.base + index) } in\n Hashtbl.replace frame.local_cells index c; c in\n cell\n end else frame.closure.vm_upvalues.(index)\n ) in\n let inner_code = code_from_value code_val2 in\n let c = { vm_code = inner_code; vm_upvalues = upvalues; vm_name = None;\n vm_env_ref = vm.globals; vm_closure_env = frame.closure.vm_closure_env } in\n push vm (VmClosure c)\n | 52 -> let idx = read_u16 frame in let argc = read_u8 frame in\n let name = match frame.closure.vm_code.vc_constants.(idx) with String s -> s | _ -> \"\" in\n let args = List.init argc (fun _ -> pop vm) |> List.rev in\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)) in\n (match fn_val with NativeFn (_, fn) -> push vm (fn args) | _ -> push vm Nil)\n | 64 -> 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 -> let count = read_u16 frame in\n let d = Hashtbl.create count in\n for _ = 1 to count do let v = pop vm in 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 done;\n push vm (Dict d)\n | 128 -> let idx = read_u16 frame in\n let name = match frame.closure.vm_code.vc_constants.(idx) with String s -> s | _ -> \"\" in\n Hashtbl.replace vm.globals name (peek vm)\n | 144 -> let count = read_u8 frame in\n let parts = List.init count (fun _ -> pop vm) |> List.rev in\n push vm (String (String.concat \"\" (List.map Sx_runtime.value_to_str parts)))\n | 160 -> let b = pop vm and a = pop vm in\n push vm (match a, b with Number x, Number y -> Number (x +. y) | _ -> Nil)\n | 161 -> let b = pop vm and a = pop vm in\n push vm (match a, b with Number x, Number y -> Number (x -. y) | _ -> Nil)\n | 162 -> let b = pop vm and a = pop vm in\n push vm (match a, b with Number x, Number y -> Number (x *. y) | _ -> Nil)\n | 163 -> let b = pop vm and a = pop vm in\n push vm (match a, b with Number x, Number y -> Number (x /. y) | _ -> Nil)\n | 164 -> let b = pop vm and a = pop vm in push vm (Bool (a = b))\n | 165 -> let b = pop vm and a = pop vm in\n push vm (match a, b with Number x, Number y -> Bool (x < y) | _ -> Bool false)\n | 166 -> let b = pop vm and a = pop vm in\n push vm (match a, b with Number x, Number y -> Bool (x > y) | _ -> Bool false)\n | 167 -> let v = pop vm in push vm (Bool (not (sx_truthy v)))\n | 168 -> 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 | _ -> Number 0.0)\n | 169 -> let v = pop vm in\n push vm (match v with List (x :: _) | ListRef { contents = x :: _ } -> x | _ -> Nil)\n | 170 -> let v = pop vm in\n push vm (match v with\n | List (_ :: xs) | ListRef { contents = _ :: xs } -> List xs | _ -> List [])\n | 171 -> 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) | _ -> Nil)\n | 172 -> let coll = pop vm and x = pop vm in\n push vm (match coll with List l -> List (x :: l) | _ -> List [x])\n | 173 -> let v = pop vm in\n push vm (match v with Number x -> Number (-.x) | _ -> Nil)\n | 174 -> let v = pop vm in\n push vm (match v with Number x -> Number (x +. 1.0) | _ -> Nil)\n | 175 -> let v = pop vm in\n push vm (match v with Number x -> Number (x -. 1.0) | _ -> Nil)\n | _ -> ()\n with e ->\n let _ = e in\n ignore saved_ip;\n (* On error during trace, just stop *)\n vm.frames <- [])\n end\n done\n with _ -> ());\n List (List.rev !trace)\n\n(** Disassemble a vm_code into a list of instruction dicts. *)\nlet disassemble (code : vm_code) =\n let bc = code.vc_bytecode in\n let len = Array.length bc in\n let consts = code.vc_constants in\n let instrs = ref [] in\n let ip = ref 0 in\n while !ip < len do\n let offset = !ip in\n let op = bc.(!ip) in\n ip := !ip + 1;\n let name = opcode_name op in\n let operands = ref [] in\n (match op with\n | 1 (* CONST *) | 20 (* GLOBAL_GET *) | 21 (* GLOBAL_SET *)\n | 128 (* DEFINE *) ->\n if !ip + 1 < len then begin\n let lo = bc.(!ip) in let hi = bc.(!ip + 1) in\n let idx = lo lor (hi lsl 8) in\n ip := !ip + 2;\n let const_str = if idx < Array.length consts\n then Sx_types.inspect consts.(idx) else \"?\" in\n operands := [Number (float_of_int idx); String const_str]\n end\n | 64 (* LIST *) | 65 (* DICT *) | 51 (* CLOSURE *) ->\n if !ip + 1 < len then begin\n let lo = bc.(!ip) in let hi = bc.(!ip + 1) in\n let idx = lo lor (hi lsl 8) in\n ip := !ip + 2;\n operands := [Number (float_of_int idx)];\n (* For CLOSURE, skip upvalue descriptors *)\n if op = 51 && idx < Array.length consts then begin\n let uv_count = match consts.(idx) with\n | Dict d -> (match Hashtbl.find_opt d \"upvalue-count\" with\n | Some (Number n) -> int_of_float n | _ -> 0)\n | _ -> 0 in\n ip := !ip + uv_count * 2\n end\n end\n | 16 (* LOCAL_GET *) | 17 (* LOCAL_SET *)\n | 18 (* UPVALUE_GET *) | 19 (* UPVALUE_SET *)\n | 48 (* CALL *) | 49 (* TAIL_CALL *)\n | 144 (* STR_CONCAT *) ->\n if !ip < len then begin\n let v = bc.(!ip) in ip := !ip + 1;\n operands := [Number (float_of_int v)]\n end\n | 32 (* JUMP *) | 33 (* JUMP_IF_FALSE *) | 34 (* JUMP_IF_TRUE *) ->\n if !ip + 1 < len then begin\n let lo = bc.(!ip) in let hi = bc.(!ip + 1) in\n let raw = lo lor (hi lsl 8) in\n let signed = if raw >= 32768 then raw - 65536 else raw in\n ip := !ip + 2;\n operands := [Number (float_of_int signed)]\n end\n | 52 (* CALL_PRIM *) ->\n if !ip + 2 < len then begin\n let lo = bc.(!ip) in let hi = bc.(!ip + 1) in\n let idx = lo lor (hi lsl 8) in\n let argc = bc.(!ip + 2) in\n ip := !ip + 3;\n let prim_name = if idx < Array.length consts\n then (match consts.(idx) with String s -> s | _ -> \"?\") else \"?\" in\n operands := [Number (float_of_int idx); String prim_name; Number (float_of_int argc)]\n end\n | _ -> ());\n let entry = Hashtbl.create 4 in\n Hashtbl.replace entry \"offset\" (Number (float_of_int offset));\n Hashtbl.replace entry \"opcode\" (String name);\n Hashtbl.replace entry \"operands\" (List !operands);\n instrs := Dict entry :: !instrs\n done;\n let result = Hashtbl.create 4 in\n Hashtbl.replace result \"arity\" (Number (float_of_int code.vc_arity));\n Hashtbl.replace result \"num_locals\" (Number (float_of_int code.vc_locals));\n Hashtbl.replace result \"constants\" (List (Array.to_list (Array.map (fun v -> String (Sx_types.inspect v)) consts)));\n Hashtbl.replace result \"bytecode\" (List (List.rev !instrs));\n Dict result\n","(* generated code *)"],"names":[],"mappings":"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","ignoreList":[1]}},{"offset":{"line":0,"column":256214},"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(** Debug trace for scope operations — enabled from JS *)\nlet _scope_trace = ref false\nlet _scope_log : string list ref = ref []\nlet scope_trace_enable () = _scope_trace := true; _scope_log := []\nlet scope_trace_disable () = _scope_trace := false\nlet scope_trace_drain () =\n let log = List.rev !_scope_log in\n _scope_log := [];\n log\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 if !_scope_trace then\n _scope_log := Printf.sprintf \"PUSH %s depth=%d->%d\" name (List.length stack) (List.length stack + 1) :: !_scope_log;\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 if !_scope_trace then\n _scope_log := Printf.sprintf \"POP %s depth=%d->%d\" name (List.length stack) (max 0 (List.length stack - 1)) :: !_scope_log;\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 if !_scope_trace then\n _scope_log := Printf.sprintf \"PEEK %s depth=%d found=%b\" name (List.length stack) (stack <> []) :: !_scope_log;\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) :: rest ->\n let stack = try Hashtbl.find scope_stacks name with Not_found -> [] in\n if !_scope_trace then\n _scope_log := Printf.sprintf \"CTX %s depth=%d found=%b\" name (List.length stack) (stack <> []) :: !_scope_log;\n (match stack with\n | v :: _ -> v\n | [] -> (match rest with default_val :: _ -> default_val | [] -> Nil))\n | _ -> Nil);\n\n register \"context-debug\" (fun args ->\n match args with\n | [String name] ->\n let stack = try Hashtbl.find scope_stacks name with Not_found -> [] in\n let all_keys = Hashtbl.fold (fun k _ acc -> k :: acc) scope_stacks [] in\n String (Printf.sprintf \"name=%s stack_len=%d all_keys=[%s]\"\n name (List.length stack) (String.concat \",\" all_keys))\n | _ -> String \"bad args\");\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":"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","ignoreList":[1]}},{"offset":{"line":0,"column":261678},"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 \"&\"\n | '<' -> Buffer.add_string buf \"<\"\n | '>' -> Buffer.add_string buf \">\"\n | '\"' -> Buffer.add_string buf \""\"\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\n(** Render via the SX adapter (render-to-html from adapter-html.sx).\n Falls back to the native ref if the SX adapter isn't loaded. *)\nlet sx_render_to_html render_env expr eval_env =\n if env_has render_env \"render-to-html\" then\n let fn = env_get render_env \"render-to-html\" in\n let result = Sx_ref.cek_call fn (List [expr; Env eval_env]) in\n match result with String s -> s | RawHTML s -> s | _ -> Sx_runtime.value_to_str result\n else\n render_to_html expr eval_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 ^ \"\"\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 let call_sx = \"(\" ^ String.concat \" \" (List.map (fun v ->\n match v with\n | Symbol s -> s | Keyword k -> \":\" ^ k | String s -> \"\\\"\" ^ s ^ \"\\\"\"\n | _ -> Sx_runtime.value_to_str v\n ) (Symbol name :: args)) ^ \")\" in\n Printf.sprintf \"%s\" _i.i_name call_sx\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 | _ ->\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(* Buffer-based streaming renderer — zero intermediate string allocation *)\n(* ====================================================================== *)\n\n(** Escape HTML directly into a buffer. *)\nlet escape_html_buf buf s =\n for i = 0 to String.length s - 1 do\n match String.unsafe_get s i with\n | '&' -> Buffer.add_string buf \"&\"\n | '<' -> Buffer.add_string buf \"<\"\n | '>' -> Buffer.add_string buf \">\"\n | '\"' -> Buffer.add_string buf \""\"\n | c -> Buffer.add_char buf c\n done\n\n(** Render attributes directly into a buffer. *)\nlet render_attrs_buf buf attrs =\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 escape_html_buf buf (value_to_string v);\n Buffer.add_char buf '\"'\n end) attrs\n\n(** Buffer-based render_to_html — writes directly, no intermediate strings. *)\nlet rec render_to_buf buf (expr : value) (env : env) : unit =\n match expr with\n | Nil -> ()\n | Bool true -> Buffer.add_string buf \"true\"\n | Bool false -> Buffer.add_string buf \"false\"\n | Number n ->\n if Float.is_integer n then Buffer.add_string buf (string_of_int (int_of_float n))\n else Buffer.add_string buf (Printf.sprintf \"%g\" n)\n | String s -> escape_html_buf buf s\n | Keyword k -> escape_html_buf buf k\n | RawHTML s -> Buffer.add_string buf s\n | Symbol s ->\n let v = Sx_ref.eval_expr (Symbol s) (Env env) in\n render_to_buf buf v env\n | List [] | ListRef { contents = [] } -> ()\n | List (head :: args) | ListRef { contents = head :: args } ->\n render_list_buf buf head args env\n | _ ->\n let v = Sx_ref.eval_expr expr (Env env) in\n render_to_buf buf v env\n\nand render_list_buf buf head args env =\n match head with\n | Symbol \"<>\" ->\n List.iter (fun c -> render_to_buf buf c env) args\n | Symbol \"raw!\" ->\n let v = Sx_ref.eval_expr (List.hd args) (Env env) in\n (match v with\n | String s | RawHTML s -> Buffer.add_string buf s\n | _ -> Buffer.add_string buf (value_to_string v))\n | Symbol tag when is_html_tag tag ->\n render_element_buf buf 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 render_to_buf buf (List.nth args 1) env)\n else\n (if List.length args > 2 then render_to_buf buf (List.nth args 2) env)\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 List.iter (fun e -> render_to_buf buf e env) (List.tl args)\n | Symbol \"cond\" ->\n render_cond_buf buf args env\n | Symbol \"case\" ->\n let v = Sx_ref.eval_expr (List (head :: args)) (Env env) in\n render_to_buf buf v env\n | Symbol (\"let\" | \"let*\") ->\n render_let_buf buf args env\n | Symbol (\"begin\" | \"do\") ->\n let rec go = function\n | [] -> ()\n | [last] -> render_to_buf buf last env\n | e :: rest -> ignore (Sx_ref.eval_expr e (Env env)); go rest\n in go args\n | Symbol (\"define\" | \"defcomp\" | \"defmacro\" | \"defisland\") ->\n ignore (Sx_ref.eval_expr (List (head :: args)) (Env env))\n | Symbol \"map\" -> render_map_buf buf args env false\n | Symbol \"map-indexed\" -> render_map_buf buf args env true\n | Symbol \"filter\" ->\n let v = Sx_ref.eval_expr (List (head :: args)) (Env env) in\n render_to_buf buf v env\n | Symbol \"for-each\" -> render_for_each_buf buf 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\" -> ()\n | Component _ -> render_component_buf buf v args env\n | Island _i ->\n (* Islands are client-rendered — emit placeholder with SX call\n expression so the client can hydrate from source. *)\n let call_sx = \"(\" ^ String.concat \" \" (List.map (fun v ->\n match v with\n | Symbol s -> s | Keyword k -> \":\" ^ k | String s -> \"\\\"\" ^ s ^ \"\\\"\"\n | _ -> Sx_runtime.value_to_str v\n ) (Symbol name :: args)) ^ \")\" in\n Buffer.add_string buf (Printf.sprintf \"%s\"\n _i.i_name call_sx)\n | Macro m ->\n let expanded = expand_macro m args env in\n render_to_buf buf expanded env\n | _ ->\n let result = Sx_ref.eval_expr (List (head :: args)) (Env env) in\n render_to_buf buf result env)\n with Eval_error msg ->\n (* Unknown symbol/component — skip silently during SSR.\n The client will render from page-sx. *)\n Printf.eprintf \"[ssr-skip] %s\\n%!\" msg)\n | _ ->\n (try\n let result = Sx_ref.eval_expr (List (head :: args)) (Env env) in\n render_to_buf buf result env\n with Eval_error msg ->\n Printf.eprintf \"[ssr-skip] %s\\n%!\" msg)\n\nand render_element_buf buf tag args env =\n let (attrs, children) = parse_element_args args env in\n Buffer.add_char buf '<';\n Buffer.add_string buf tag;\n render_attrs_buf buf attrs;\n if is_void tag then\n Buffer.add_string buf \" />\"\n else begin\n Buffer.add_char buf '>';\n List.iter (fun c -> render_to_buf buf c env) children;\n Buffer.add_string buf \"'\n end\n\nand render_component_buf buf 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 | _ -> 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 child_buf = Buffer.create 256 in\n List.iter (fun c -> render_to_buf child_buf c env) children;\n ignore (env_bind local \"children\" (RawHTML (Buffer.contents child_buf)))\n end;\n render_to_buf buf c.c_body local\n | _ -> ()\n\nand render_cond_buf buf 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 | _ -> false) args 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\" | Symbol \"else\" | Symbol \":else\" -> true | _ -> false in\n if is_else then render_to_buf buf body env\n else let v = Sx_ref.eval_expr test (Env env) in\n if sx_truthy v then render_to_buf buf body env else go rest\n | _ -> ())\n in go args\n end else begin\n let rec go = function\n | [] -> () | [_] -> ()\n | test :: body :: rest ->\n let is_else = match test with\n | Keyword \"else\" | Symbol \"else\" | Symbol \":else\" -> true | _ -> false in\n if is_else then render_to_buf buf body env\n else let v = Sx_ref.eval_expr test (Env env) in\n if sx_truthy v then render_to_buf buf body env else go rest\n in go args\n end\n\nand render_let_buf buf 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 (List _ :: _) | (ListRef _ :: _) -> true | _ -> false 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); go rest\n | _ -> ()\n in go bindings\n end;\n let rec render_body = function\n | [] -> ()\n | [last] -> render_to_buf buf last local\n | e :: rest -> ignore (Sx_ref.eval_expr e (Env local)); render_body rest\n in render_body body\n\nand render_map_buf buf 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 List.iteri (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)) l.l_params call_args;\n render_to_buf buf l.l_body local\n | _ ->\n let result = Sx_runtime.sx_call fn_val call_args in\n render_to_buf buf result env\n ) items\n\nand render_for_each_buf buf 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 List.iter (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)) l.l_params [item];\n render_to_buf buf l.l_body local\n | _ ->\n let result = Sx_runtime.sx_call fn_val [item] in\n render_to_buf buf result env\n ) items\n\n(** Public API: render to a pre-allocated buffer. *)\nlet render_to_buffer buf expr env = render_to_buf buf expr env\n\n(** Convenience: render to string using the buffer renderer. *)\nlet render_to_html_streaming expr env =\n let buf = Buffer.create 65536 in\n render_to_buf buf expr env;\n Buffer.contents buf\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]}},{"offset":{"line":0,"column":279001},"map":{"version":3,"sources":["/workspace_root/lib/sx_compiler.ml","/builtin/blackbox.ml"],"sourcesContent":["(* sx_compiler.ml — Auto-generated from lib/compiler.sx *)\n(* Do not edit — regenerate with: python3 hosts/ocaml/bootstrap_compiler.py *)\n\n[@@@warning \"-26-27\"]\n\nopen Sx_types\nopen Sx_runtime\n\n(* The compiler uses cek_call from the evaluator for runtime dispatch *)\nlet cek_call = Sx_ref.cek_call\nlet eval_expr = Sx_ref.eval_expr\nlet trampoline v = match v with\n | Thunk (expr, env) -> Sx_ref.eval_expr expr (Env env)\n | other -> other\n\n(* Bindings for external functions the compiler calls.\n Some shadow OCaml stdlib names — the SX versions operate on values. *)\nlet serialize v = String (Sx_types.inspect v)\nlet sx_parse v = match v with\n | String s -> (match Sx_parser.parse_all s with [e] -> e | es -> List es)\n | v -> v\nlet floor v = prim_call \"floor\" [v]\nlet abs v = prim_call \"abs\" [v]\nlet min a b = prim_call \"min\" [a; b]\nlet max a b = prim_call \"max\" [a; b]\nlet set_nth_b lst idx v = prim_call \"set-nth!\" [lst; idx; v]\nlet init lst = prim_call \"init\" [lst]\nlet last lst = prim_call \"last\" [lst]\n\n(* skip_annotations: strips :keyword value pairs from a list (type annotations) *)\nlet rec skip_annotations items =\n match items with\n | List [] | Nil -> Nil\n | List (Keyword _ :: _ :: rest) -> skip_annotations (List rest)\n | ListRef { contents = [] } -> Nil\n | ListRef { contents = Keyword _ :: _ :: rest } -> skip_annotations (List rest)\n | List (first :: _) -> first\n | ListRef { contents = first :: _ } -> first\n | _ -> Nil\n\n(* compile_match: uses local recursion (letrec) that the transpiler can't handle.\n Falls back to CEK evaluation at runtime. *)\nlet compile_match em args scope tail_p =\n let fn = Sx_ref.eval_expr (Symbol \"compile-match\") (Env (Sx_types.make_env ())) in\n Sx_ref.cek_call fn (List [em; args; scope; tail_p])\n\n\n(* === Transpiled from bytecode compiler === *)\n(* make-pool *)\nlet rec make_pool () =\n (let _d = Hashtbl.create 2 in Hashtbl.replace _d \"entries\" (if sx_truthy ((is_primitive ((String \"mutable-list\")))) then (mutable_list ()) else (List [])); Hashtbl.replace _d \"index\" (let _d = Hashtbl.create 1 in Hashtbl.replace _d \"_count\" (Number 0.0); Dict _d); Dict _d)\n\n(* pool-add *)\nand pool_add pool value =\n (let () = ignore ((String \"Add a value to the constant pool, return its index. Deduplicates.\")) in (let key = (serialize (value)) in let idx_map = (get (pool) ((String \"index\"))) in (if sx_truthy ((prim_call \"has-key?\" [idx_map; key])) then (get (idx_map) (key)) else (let idx = (get (idx_map) ((String \"_count\"))) in (let () = ignore ((sx_dict_set_b idx_map key idx)) in (let () = ignore ((sx_dict_set_b idx_map (String \"_count\") (prim_call \"+\" [idx; (Number 1.0)]))) in (let () = ignore ((sx_append_b (get (pool) ((String \"entries\"))) value)) in idx)))))))\n\n(* make-scope *)\nand make_scope parent =\n (let _d = Hashtbl.create 5 in Hashtbl.replace _d \"next-slot\" (Number 0.0); Hashtbl.replace _d \"upvalues\" (List []); Hashtbl.replace _d \"locals\" (List []); Hashtbl.replace _d \"parent\" parent; Hashtbl.replace _d \"is-function\" (Bool false); Dict _d)\n\n(* scope-define-local *)\nand scope_define_local scope name =\n (let () = ignore ((String \"Add a local variable, return its slot index.\\n Idempotent: if name already has a slot, return it.\")) in (let existing = (first ((List (List.filter (fun l -> sx_truthy ((prim_call \"=\" [(get (l) ((String \"name\"))); name]))) (sx_to_list (get (scope) ((String \"locals\")))))))) in (if sx_truthy (existing) then (get (existing) ((String \"slot\"))) else (let slot = (get (scope) ((String \"next-slot\"))) in (let () = ignore ((sx_append_b (get (scope) ((String \"locals\"))) (let _d = Hashtbl.create 3 in Hashtbl.replace _d \"mutable\" (Bool false); Hashtbl.replace _d \"slot\" slot; Hashtbl.replace _d \"name\" name; Dict _d))) in (let () = ignore ((sx_dict_set_b scope (String \"next-slot\") (prim_call \"+\" [slot; (Number 1.0)]))) in slot))))))\n\n(* scope-resolve *)\nand scope_resolve scope name =\n (let () = ignore ((String \"Resolve a variable name. Returns {:type \\\"local\\\"|\\\"upvalue\\\"|\\\"global\\\", :index N}.\\n Upvalue captures only happen at function boundaries (is-function=true).\\n Let scopes share the enclosing function's frame — their locals are\\n accessed directly without upvalue indirection.\")) in (if sx_truthy ((is_nil (scope))) then (CekFrame { cf_type = \"global\"; cf_env = Nil; cf_name = Nil; cf_body = Nil; cf_remaining = Nil; cf_f = Nil; cf_args = Nil; cf_results = Nil; cf_extra = Nil; cf_extra2 = Nil }) else (let locals = (get (scope) ((String \"locals\"))) in let found = (Bool (List.exists (fun l -> sx_truthy ((prim_call \"=\" [(get (l) ((String \"name\"))); name]))) (sx_to_list locals))) in (if sx_truthy (found) then (let local = (first ((List (List.filter (fun l -> sx_truthy ((prim_call \"=\" [(get (l) ((String \"name\"))); name]))) (sx_to_list locals))))) in (CekFrame { cf_type = \"local\"; cf_env = Nil; cf_name = Nil; cf_body = Nil; cf_remaining = Nil; cf_f = Nil; cf_args = Nil; cf_results = Nil; cf_extra = Nil; cf_extra2 = Nil })) else (let upvals = (get (scope) ((String \"upvalues\"))) in let uv_found = (Bool (List.exists (fun u -> sx_truthy ((prim_call \"=\" [(get (u) ((String \"name\"))); name]))) (sx_to_list upvals))) in (if sx_truthy (uv_found) then (let uv = (first ((List (List.filter (fun u -> sx_truthy ((prim_call \"=\" [(get (u) ((String \"name\"))); name]))) (sx_to_list upvals))))) in (CekFrame { cf_type = \"upvalue\"; cf_env = Nil; cf_name = Nil; cf_body = Nil; cf_remaining = Nil; cf_f = Nil; cf_args = Nil; cf_results = Nil; cf_extra = Nil; cf_extra2 = Nil })) else (let parent = (get (scope) ((String \"parent\"))) in (if sx_truthy ((is_nil (parent))) then (CekFrame { cf_type = \"global\"; cf_env = Nil; cf_name = Nil; cf_body = Nil; cf_remaining = Nil; cf_f = Nil; cf_args = Nil; cf_results = Nil; cf_extra = Nil; cf_extra2 = Nil }) else (let parent_result = (scope_resolve (parent) (name)) in (if sx_truthy ((prim_call \"=\" [(get (parent_result) ((String \"type\"))); (String \"global\")])) then parent_result else (if sx_truthy ((get (scope) ((String \"is-function\")))) then (let uv_idx = (len ((get (scope) ((String \"upvalues\"))))) in (let () = ignore ((sx_append_b (get (scope) ((String \"upvalues\"))) (let _d = Hashtbl.create 4 in Hashtbl.replace _d \"index\" (get (parent_result) ((String \"index\"))); Hashtbl.replace _d \"is-local\" (prim_call \"=\" [(get (parent_result) ((String \"type\"))); (String \"local\")]); Hashtbl.replace _d \"uv-index\" uv_idx; Hashtbl.replace _d \"name\" name; Dict _d))) in (CekFrame { cf_type = \"upvalue\"; cf_env = Nil; cf_name = Nil; cf_body = Nil; cf_remaining = Nil; cf_f = Nil; cf_args = Nil; cf_results = Nil; cf_extra = Nil; cf_extra2 = Nil }))) else parent_result)))))))))))\n\n(* make-emitter *)\nand make_emitter () =\n (let _d = Hashtbl.create 2 in Hashtbl.replace _d \"pool\" (make_pool ()); Hashtbl.replace _d \"bytecode\" (if sx_truthy ((is_primitive ((String \"mutable-list\")))) then (mutable_list ()) else (List [])); Dict _d)\n\n(* emit-byte *)\nand emit_byte em byte =\n (sx_append_b (get (em) ((String \"bytecode\"))) byte)\n\n(* emit-u16 *)\nand emit_u16 em value =\n (let () = ignore ((emit_byte (em) ((prim_call \"mod\" [value; (Number 256.0)])))) in (emit_byte (em) ((prim_call \"mod\" [(floor ((prim_call \"/\" [value; (Number 256.0)]))); (Number 256.0)]))))\n\n(* emit-i16 *)\nand emit_i16 em value =\n (let v = (if sx_truthy ((prim_call \"<\" [value; (Number 0.0)])) then (prim_call \"+\" [value; (Number 65536.0)]) else value) in (emit_u16 (em) (v)))\n\n(* emit-op *)\nand emit_op em opcode =\n (emit_byte (em) (opcode))\n\n(* emit-const *)\nand emit_const em value =\n (let idx = (pool_add ((get (em) ((String \"pool\")))) (value)) in (let () = ignore ((emit_op (em) ((Number 1.0)))) in (emit_u16 (em) (idx))))\n\n(* current-offset *)\nand current_offset em =\n (len ((get (em) ((String \"bytecode\")))))\n\n(* patch-i16 *)\nand patch_i16 em offset value =\n (let () = ignore ((String \"Patch a previously emitted i16 at the given bytecode offset.\")) in (let v = (if sx_truthy ((prim_call \"<\" [value; (Number 0.0)])) then (prim_call \"+\" [value; (Number 65536.0)]) else value) in let bc = (get (em) ((String \"bytecode\"))) in (let () = ignore ((set_nth_b (bc) (offset) ((prim_call \"mod\" [v; (Number 256.0)])))) in (set_nth_b (bc) ((prim_call \"+\" [offset; (Number 1.0)])) ((prim_call \"mod\" [(floor ((prim_call \"/\" [v; (Number 256.0)]))); (Number 256.0)]))))))\n\n(* compile-expr *)\nand compile_expr em expr scope tail_p =\n (let () = ignore ((String \"Compile an expression. tail? indicates tail position for TCO.\")) in (if sx_truthy ((is_nil (expr))) then (emit_op (em) ((Number 2.0))) else (if sx_truthy ((prim_call \"=\" [(type_of (expr)); (String \"number\")])) then (emit_const (em) (expr)) else (if sx_truthy ((prim_call \"=\" [(type_of (expr)); (String \"string\")])) then (emit_const (em) (expr)) else (if sx_truthy ((prim_call \"=\" [(type_of (expr)); (String \"boolean\")])) then (emit_op (em) ((if sx_truthy (expr) then (Number 3.0) else (Number 4.0)))) else (if sx_truthy ((prim_call \"=\" [(type_of (expr)); (String \"keyword\")])) then (emit_const (em) ((keyword_name (expr)))) else (if sx_truthy ((prim_call \"=\" [(type_of (expr)); (String \"symbol\")])) then (compile_symbol (em) ((symbol_name (expr))) (scope)) else (if sx_truthy ((prim_call \"=\" [(type_of (expr)); (String \"list\")])) then (if sx_truthy ((empty_p (expr))) then (let () = ignore ((emit_op (em) ((Number 64.0)))) in (emit_u16 (em) ((Number 0.0)))) else (compile_list (em) (expr) (scope) (tail_p))) else (if sx_truthy ((prim_call \"=\" [(type_of (expr)); (String \"dict\")])) then (compile_dict (em) (expr) (scope)) else (emit_const (em) (expr)))))))))))\n\n(* compile-symbol *)\nand compile_symbol em name scope =\n (let resolved = (scope_resolve (scope) (name)) in (if sx_truthy ((prim_call \"=\" [(get (resolved) ((String \"type\"))); (String \"local\")])) then (let () = ignore ((emit_op (em) ((Number 16.0)))) in (emit_byte (em) ((get (resolved) ((String \"index\")))))) else (if sx_truthy ((prim_call \"=\" [(get (resolved) ((String \"type\"))); (String \"upvalue\")])) then (let () = ignore ((emit_op (em) ((Number 18.0)))) in (emit_byte (em) ((get (resolved) ((String \"index\")))))) else (let idx = (pool_add ((get (em) ((String \"pool\")))) (name)) in (let () = ignore ((emit_op (em) ((Number 20.0)))) in (emit_u16 (em) (idx)))))))\n\n(* compile-dict *)\nand compile_dict em expr scope =\n (let ks = (prim_call \"keys\" [expr]) in let count = (len (ks)) in (let () = ignore ((List.iter (fun k -> ignore ((let () = ignore ((emit_const (em) (k))) in (compile_expr (em) ((get (expr) (k))) (scope) ((Bool false)))))) (sx_to_list ks); Nil)) in (let () = ignore ((emit_op (em) ((Number 65.0)))) in (emit_u16 (em) (count)))))\n\n(* compile-list *)\nand compile_list em expr scope tail_p =\n (let head = (first (expr)) in let args = (rest (expr)) in (if sx_truthy ((Bool (not (sx_truthy ((prim_call \"=\" [(type_of (head)); (String \"symbol\")])))))) then (compile_call (em) (head) (args) (scope) (tail_p)) else (let name = (symbol_name (head)) in (if sx_truthy ((prim_call \"=\" [name; (String \"if\")])) then (compile_if (em) (args) (scope) (tail_p)) else (if sx_truthy ((prim_call \"=\" [name; (String \"when\")])) then (compile_when (em) (args) (scope) (tail_p)) else (if sx_truthy ((prim_call \"=\" [name; (String \"and\")])) then (compile_and (em) (args) (scope) (tail_p)) else (if sx_truthy ((prim_call \"=\" [name; (String \"or\")])) then (compile_or (em) (args) (scope) (tail_p)) else (if sx_truthy ((prim_call \"=\" [name; (String \"let\")])) then (compile_let (em) (args) (scope) (tail_p)) else (if sx_truthy ((prim_call \"=\" [name; (String \"let*\")])) then (compile_let (em) (args) (scope) (tail_p)) else (if sx_truthy ((prim_call \"=\" [name; (String \"begin\")])) then (compile_begin (em) (args) (scope) (tail_p)) else (if sx_truthy ((prim_call \"=\" [name; (String \"do\")])) then (compile_begin (em) (args) (scope) (tail_p)) else (if sx_truthy ((prim_call \"=\" [name; (String \"lambda\")])) then (compile_lambda (em) (args) (scope)) else (if sx_truthy ((prim_call \"=\" [name; (String \"fn\")])) then (compile_lambda (em) (args) (scope)) else (if sx_truthy ((prim_call \"=\" [name; (String \"define\")])) then (compile_define (em) (args) (scope)) else (if sx_truthy ((prim_call \"=\" [name; (String \"set!\")])) then (compile_set (em) (args) (scope)) else (if sx_truthy ((prim_call \"=\" [name; (String \"quote\")])) then (compile_quote (em) (args)) else (if sx_truthy ((prim_call \"=\" [name; (String \"cond\")])) then (compile_cond (em) (args) (scope) (tail_p)) else (if sx_truthy ((prim_call \"=\" [name; (String \"case\")])) then (compile_case (em) (args) (scope) (tail_p)) else (if sx_truthy ((prim_call \"=\" [name; (String \"->\")])) then (compile_thread (em) (args) (scope) (tail_p)) else (if sx_truthy ((prim_call \"=\" [name; (String \"defcomp\")])) then (compile_defcomp (em) (args) (scope)) else (if sx_truthy ((prim_call \"=\" [name; (String \"defisland\")])) then (compile_defcomp (em) (args) (scope)) else (if sx_truthy ((prim_call \"=\" [name; (String \"defmacro\")])) then (compile_defmacro (em) (args) (scope)) else (if sx_truthy ((prim_call \"=\" [name; (String \"defstyle\")])) then (emit_op (em) ((Number 2.0))) else (if sx_truthy ((prim_call \"=\" [name; (String \"defhandler\")])) then (emit_op (em) ((Number 2.0))) else (if sx_truthy ((prim_call \"=\" [name; (String \"defpage\")])) then (emit_op (em) ((Number 2.0))) else (if sx_truthy ((prim_call \"=\" [name; (String \"defquery\")])) then (emit_op (em) ((Number 2.0))) else (if sx_truthy ((prim_call \"=\" [name; (String \"defaction\")])) then (emit_op (em) ((Number 2.0))) else (if sx_truthy ((prim_call \"=\" [name; (String \"defrelation\")])) then (emit_op (em) ((Number 2.0))) else (if sx_truthy ((prim_call \"=\" [name; (String \"deftype\")])) then (emit_op (em) ((Number 2.0))) else (if sx_truthy ((prim_call \"=\" [name; (String \"defeffect\")])) then (emit_op (em) ((Number 2.0))) else (if sx_truthy ((prim_call \"=\" [name; (String \"defisland\")])) then (compile_defcomp (em) (args) (scope)) else (if sx_truthy ((prim_call \"=\" [name; (String \"quasiquote\")])) then (compile_quasiquote (em) ((first (args))) (scope)) else (if sx_truthy ((prim_call \"=\" [name; (String \"letrec\")])) then (compile_letrec (em) (args) (scope) (tail_p)) else (if sx_truthy ((prim_call \"=\" [name; (String \"match\")])) then (compile_match (em) (args) (scope) (tail_p)) else (compile_call (em) (head) (args) (scope) (tail_p))))))))))))))))))))))))))))))))))))\n\n(* compile-if *)\nand compile_if em args scope tail_p =\n (let test = (first (args)) in let then_expr = (nth (args) ((Number 1.0))) in let else_expr = (if sx_truthy ((prim_call \">\" [(len (args)); (Number 2.0)])) then (nth (args) ((Number 2.0))) else Nil) in (let () = ignore ((compile_expr (em) (test) (scope) ((Bool false)))) in (let () = ignore ((emit_op (em) ((Number 33.0)))) in (let else_jump = (current_offset (em)) in (let () = ignore ((emit_i16 (em) ((Number 0.0)))) in (let () = ignore ((compile_expr (em) (then_expr) (scope) (tail_p))) in (let () = ignore ((emit_op (em) ((Number 32.0)))) in (let end_jump = (current_offset (em)) in (let () = ignore ((emit_i16 (em) ((Number 0.0)))) in (let () = ignore ((patch_i16 (em) (else_jump) ((prim_call \"-\" [(current_offset (em)); (prim_call \"+\" [else_jump; (Number 2.0)])])))) in (let () = ignore ((if sx_truthy ((is_nil (else_expr))) then (emit_op (em) ((Number 2.0))) else (compile_expr (em) (else_expr) (scope) (tail_p)))) in (patch_i16 (em) (end_jump) ((prim_call \"-\" [(current_offset (em)); (prim_call \"+\" [end_jump; (Number 2.0)])]))))))))))))))\n\n(* compile-when *)\nand compile_when em args scope tail_p =\n (let test = (first (args)) in let body = (rest (args)) in (let () = ignore ((compile_expr (em) (test) (scope) ((Bool false)))) in (let () = ignore ((emit_op (em) ((Number 33.0)))) in (let skip_jump = (current_offset (em)) in (let () = ignore ((emit_i16 (em) ((Number 0.0)))) in (let () = ignore ((compile_begin (em) (body) (scope) (tail_p))) in (let () = ignore ((emit_op (em) ((Number 32.0)))) in (let end_jump = (current_offset (em)) in (let () = ignore ((emit_i16 (em) ((Number 0.0)))) in (let () = ignore ((patch_i16 (em) (skip_jump) ((prim_call \"-\" [(current_offset (em)); (prim_call \"+\" [skip_jump; (Number 2.0)])])))) in (let () = ignore ((emit_op (em) ((Number 2.0)))) in (patch_i16 (em) (end_jump) ((prim_call \"-\" [(current_offset (em)); (prim_call \"+\" [end_jump; (Number 2.0)])]))))))))))))))\n\n(* compile-and *)\nand compile_and em args scope tail_p =\n (if sx_truthy ((empty_p (args))) then (emit_op (em) ((Number 3.0))) else (if sx_truthy ((prim_call \"=\" [(len (args)); (Number 1.0)])) then (compile_expr (em) ((first (args))) (scope) (tail_p)) else (let () = ignore ((compile_expr (em) ((first (args))) (scope) ((Bool false)))) in (let () = ignore ((emit_op (em) ((Number 6.0)))) in (let () = ignore ((emit_op (em) ((Number 33.0)))) in (let skip = (current_offset (em)) in (let () = ignore ((emit_i16 (em) ((Number 0.0)))) in (let () = ignore ((emit_op (em) ((Number 5.0)))) in (let () = ignore ((compile_and (em) ((rest (args))) (scope) (tail_p))) in (patch_i16 (em) (skip) ((prim_call \"-\" [(current_offset (em)); (prim_call \"+\" [skip; (Number 2.0)])]))))))))))))\n\n(* compile-or *)\nand compile_or em args scope tail_p =\n (if sx_truthy ((empty_p (args))) then (emit_op (em) ((Number 4.0))) else (if sx_truthy ((prim_call \"=\" [(len (args)); (Number 1.0)])) then (compile_expr (em) ((first (args))) (scope) (tail_p)) else (let () = ignore ((compile_expr (em) ((first (args))) (scope) ((Bool false)))) in (let () = ignore ((emit_op (em) ((Number 6.0)))) in (let () = ignore ((emit_op (em) ((Number 34.0)))) in (let skip = (current_offset (em)) in (let () = ignore ((emit_i16 (em) ((Number 0.0)))) in (let () = ignore ((emit_op (em) ((Number 5.0)))) in (let () = ignore ((compile_or (em) ((rest (args))) (scope) (tail_p))) in (patch_i16 (em) (skip) ((prim_call \"-\" [(current_offset (em)); (prim_call \"+\" [skip; (Number 2.0)])]))))))))))))\n\n(* compile-begin *)\nand compile_begin em exprs scope tail_p =\n (let () = ignore ((if sx_truthy ((let _and = (Bool (not (sx_truthy ((empty_p (exprs)))))) in if not (sx_truthy _and) then _and else (Bool (not (sx_truthy ((is_nil ((get (scope) ((String \"parent\"))))))))))) then (List.iter (fun expr -> ignore ((if sx_truthy ((let _and = (prim_call \"=\" [(type_of (expr)); (String \"list\")]) in if not (sx_truthy _and) then _and else (let _and = (prim_call \">=\" [(len (expr)); (Number 2.0)]) in if not (sx_truthy _and) then _and else (let _and = (prim_call \"=\" [(type_of ((first (expr)))); (String \"symbol\")]) in if not (sx_truthy _and) then _and else (prim_call \"=\" [(symbol_name ((first (expr)))); (String \"define\")]))))) then (let name_expr = (nth (expr) ((Number 1.0))) in let name = (if sx_truthy ((prim_call \"=\" [(type_of (name_expr)); (String \"symbol\")])) then (symbol_name (name_expr)) else name_expr) in (scope_define_local (scope) (name))) else Nil))) (sx_to_list exprs); Nil) else Nil)) in (if sx_truthy ((empty_p (exprs))) then (emit_op (em) ((Number 2.0))) else (if sx_truthy ((prim_call \"=\" [(len (exprs)); (Number 1.0)])) then (compile_expr (em) ((first (exprs))) (scope) (tail_p)) else (let () = ignore ((compile_expr (em) ((first (exprs))) (scope) ((Bool false)))) in (let () = ignore ((emit_op (em) ((Number 5.0)))) in (compile_begin (em) ((rest (exprs))) (scope) (tail_p)))))))\n\n(* compile-let *)\nand compile_let em args scope tail_p =\n (if sx_truthy ((prim_call \"=\" [(type_of ((first (args)))); (String \"symbol\")])) then (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 ((List.iter (fun binding -> ignore ((let () = ignore ((params := sx_append_b !params (if sx_truthy ((prim_call \"=\" [(type_of ((first (binding)))); (String \"symbol\")])) then (first (binding)) else (make_symbol ((first (binding))))); Nil)) in (inits := sx_append_b !inits (nth (binding) ((Number 1.0))); Nil)))) (sx_to_list bindings); Nil)) in (let lambda_expr = (prim_call \"concat\" [(List [(make_symbol ((String \"fn\"))); !params]); body]) in let letrec_bindings = (List [(List [(make_symbol (loop_name)); lambda_expr])]) in let call_expr = (cons ((make_symbol (loop_name))) (!inits)) in (compile_letrec (em) ((List [letrec_bindings; call_expr])) (scope) (tail_p))))) else (let bindings = (first (args)) in let body = (rest (args)) in let let_scope = (make_scope (scope)) in (let () = ignore ((sx_dict_set_b let_scope (String \"next-slot\") (get (scope) ((String \"next-slot\"))))) in (let () = ignore ((List.iter (fun binding -> ignore ((let name = (if sx_truthy ((prim_call \"=\" [(type_of ((first (binding)))); (String \"symbol\")])) then (symbol_name ((first (binding)))) else (first (binding))) in let value = (nth (binding) ((Number 1.0))) in let slot = (scope_define_local (let_scope) (name)) in (let () = ignore ((compile_expr (em) (value) (let_scope) ((Bool false)))) in (let () = ignore ((emit_op (em) ((Number 17.0)))) in (emit_byte (em) (slot))))))) (sx_to_list bindings); Nil)) in (compile_begin (em) (body) (let_scope) (tail_p))))))\n\n(* compile-letrec *)\nand compile_letrec em args scope tail_p =\n (let () = ignore ((String \"Compile letrec: all names visible during value compilation.\\n 1. Define all local slots (initialized to nil).\\n 2. Compile each value and assign — names are already in scope\\n so mutually recursive functions can reference each other.\")) in (let bindings = (first (args)) in let body = (rest (args)) in let let_scope = (make_scope (scope)) in (let () = ignore ((sx_dict_set_b let_scope (String \"next-slot\") (get (scope) ((String \"next-slot\"))))) in (let () = ignore ((let slots = (List (List.map (fun binding -> (let name = (if sx_truthy ((prim_call \"=\" [(type_of ((first (binding)))); (String \"symbol\")])) then (symbol_name ((first (binding)))) else (first (binding))) in (let slot = (scope_define_local (let_scope) (name)) in (let () = ignore ((emit_op (em) ((Number 2.0)))) in (let () = ignore ((emit_op (em) ((Number 17.0)))) in (let () = ignore ((emit_byte (em) (slot))) in slot)))))) (sx_to_list bindings))) in (List.iter (fun pair -> ignore ((let binding = (first (pair)) in let slot = (nth (pair) ((Number 1.0))) in (let () = ignore ((compile_expr (em) ((nth (binding) ((Number 1.0)))) (let_scope) ((Bool false)))) in (let () = ignore ((emit_op (em) ((Number 17.0)))) in (emit_byte (em) (slot))))))) (sx_to_list (List (List.map (fun i -> (List [(nth (bindings) (i)); (nth (slots) (i))])) (sx_to_list (prim_call \"range\" [(Number 0.0); (len (bindings))]))))); Nil))) in (compile_begin (em) (body) (let_scope) (tail_p))))))\n\n(* compile-lambda *)\nand compile_lambda em args scope =\n (let params = (first (args)) in let body = (rest (args)) in let fn_scope = (make_scope (scope)) in let fn_em = (make_emitter ()) in (let () = ignore ((sx_dict_set_b fn_scope (String \"is-function\") (Bool true))) in (let () = ignore ((List.iter (fun p -> ignore ((let name = (if sx_truthy ((prim_call \"=\" [(type_of (p)); (String \"symbol\")])) then (symbol_name (p)) else (if sx_truthy ((let _and = (list_p (p)) in if not (sx_truthy _and) then _and else (let _and = (Bool (not (sx_truthy ((empty_p (p)))))) in if not (sx_truthy _and) then _and else (prim_call \"=\" [(type_of ((first (p)))); (String \"symbol\")])))) then (symbol_name ((first (p)))) else p)) in (if sx_truthy ((let _and = (Bool (not (sx_truthy ((prim_call \"=\" [name; (String \"&key\")]))))) in if not (sx_truthy _and) then _and else (Bool (not (sx_truthy ((prim_call \"=\" [name; (String \"&rest\")]))))))) then (scope_define_local (fn_scope) (name)) else Nil)))) (sx_to_list params); Nil)) in (let () = ignore ((compile_begin (fn_em) (body) (fn_scope) ((Bool true)))) in (let () = ignore ((emit_op (fn_em) ((Number 50.0)))) in (let upvals = (get (fn_scope) ((String \"upvalues\"))) in let code = (let _d = Hashtbl.create 4 in Hashtbl.replace _d \"upvalue-count\" (len (upvals)); Hashtbl.replace _d \"arity\" (len ((get (fn_scope) ((String \"locals\"))))); Hashtbl.replace _d \"constants\" (get ((get (fn_em) ((String \"pool\")))) ((String \"entries\"))); Hashtbl.replace _d \"bytecode\" (get (fn_em) ((String \"bytecode\"))); Dict _d) in let code_idx = (pool_add ((get (em) ((String \"pool\")))) (code)) in (let () = ignore ((emit_op (em) ((Number 51.0)))) in (let () = ignore ((emit_u16 (em) (code_idx))) in (List.iter (fun uv -> ignore ((let () = ignore ((emit_byte (em) ((if sx_truthy ((get (uv) ((String \"is-local\")))) then (Number 1.0) else (Number 0.0))))) in (emit_byte (em) ((get (uv) ((String \"index\")))))))) (sx_to_list upvals); Nil)))))))))\n\n(* compile-define *)\nand compile_define em args scope =\n (let name_expr = (first (args)) in let name = (if sx_truthy ((prim_call \"=\" [(type_of (name_expr)); (String \"symbol\")])) then (symbol_name (name_expr)) else name_expr) in let value = (let rest_args = (rest (args)) in (if sx_truthy ((let _and = (Bool (not (sx_truthy ((empty_p (rest_args)))))) in if not (sx_truthy _and) then _and else (prim_call \"=\" [(type_of ((first (rest_args)))); (String \"keyword\")]))) then (skip_annotations (rest_args)) else (first (rest_args)))) in (if sx_truthy ((Bool (not (sx_truthy ((is_nil ((get (scope) ((String \"parent\")))))))))) then (let slot = (scope_define_local (scope) (name)) in (let () = ignore ((compile_expr (em) (value) (scope) ((Bool false)))) in (let () = ignore ((emit_op (em) ((Number 17.0)))) in (emit_byte (em) (slot))))) else (let name_idx = (pool_add ((get (em) ((String \"pool\")))) (name)) in (let () = ignore ((compile_expr (em) (value) (scope) ((Bool false)))) in (let () = ignore ((emit_op (em) ((Number 128.0)))) in (emit_u16 (em) (name_idx)))))))\n\n(* compile-set *)\nand compile_set em args scope =\n (let name = (if sx_truthy ((prim_call \"=\" [(type_of ((first (args)))); (String \"symbol\")])) then (symbol_name ((first (args)))) else (first (args))) in let value = (nth (args) ((Number 1.0))) in let resolved = (scope_resolve (scope) (name)) in (let () = ignore ((compile_expr (em) (value) (scope) ((Bool false)))) in (if sx_truthy ((prim_call \"=\" [(get (resolved) ((String \"type\"))); (String \"local\")])) then (let () = ignore ((emit_op (em) ((Number 17.0)))) in (emit_byte (em) ((get (resolved) ((String \"index\")))))) else (if sx_truthy ((prim_call \"=\" [(get (resolved) ((String \"type\"))); (String \"upvalue\")])) then (let () = ignore ((emit_op (em) ((Number 19.0)))) in (emit_byte (em) ((get (resolved) ((String \"index\")))))) else (let idx = (pool_add ((get (em) ((String \"pool\")))) (name)) in (let () = ignore ((emit_op (em) ((Number 21.0)))) in (emit_u16 (em) (idx))))))))\n\n(* compile-quote *)\nand compile_quote em args =\n (if sx_truthy ((empty_p (args))) then (emit_op (em) ((Number 2.0))) else (emit_const (em) ((first (args)))))\n\n(* compile-cond *)\nand compile_cond em args scope tail_p =\n (let () = ignore ((String \"Compile (cond test1 body1 test2 body2 ... :else fallback).\")) in (if sx_truthy ((prim_call \"<\" [(len (args)); (Number 2.0)])) then (emit_op (em) ((Number 2.0))) else (let test = (first (args)) in let body = (nth (args) ((Number 1.0))) in let rest_clauses = (if sx_truthy ((prim_call \">\" [(len (args)); (Number 2.0)])) then (prim_call \"slice\" [args; (Number 2.0)]) else (List [])) in (if sx_truthy ((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 (prim_call \"=\" [test; (Bool true)]))) then (compile_expr (em) (body) (scope) (tail_p)) else (let () = ignore ((compile_expr (em) (test) (scope) ((Bool false)))) in (let () = ignore ((emit_op (em) ((Number 33.0)))) in (let skip = (current_offset (em)) in (let () = ignore ((emit_i16 (em) ((Number 0.0)))) in (let () = ignore ((compile_expr (em) (body) (scope) (tail_p))) in (let () = ignore ((emit_op (em) ((Number 32.0)))) in (let end_jump = (current_offset (em)) in (let () = ignore ((emit_i16 (em) ((Number 0.0)))) in (let () = ignore ((patch_i16 (em) (skip) ((prim_call \"-\" [(current_offset (em)); (prim_call \"+\" [skip; (Number 2.0)])])))) in (let () = ignore ((compile_cond (em) (rest_clauses) (scope) (tail_p))) in (patch_i16 (em) (end_jump) ((prim_call \"-\" [(current_offset (em)); (prim_call \"+\" [end_jump; (Number 2.0)])])))))))))))))))))\n\n(* compile-case *)\nand compile_case em args scope tail_p =\n (let () = ignore ((String \"Compile (case expr val1 body1 val2 body2 ... :else fallback).\")) in (let () = ignore ((compile_expr (em) ((first (args))) (scope) ((Bool false)))) in (let clauses = (rest (args)) in (compile_case_clauses (em) (clauses) (scope) (tail_p)))))\n\n(* compile-case-clauses *)\nand compile_case_clauses em clauses scope tail_p =\n (if sx_truthy ((prim_call \"<\" [(len (clauses)); (Number 2.0)])) then (let () = ignore ((emit_op (em) ((Number 5.0)))) in (emit_op (em) ((Number 2.0)))) else (let test = (first (clauses)) in let body = (nth (clauses) ((Number 1.0))) in let rest_clauses = (if sx_truthy ((prim_call \">\" [(len (clauses)); (Number 2.0)])) then (prim_call \"slice\" [clauses; (Number 2.0)]) else (List [])) in (if sx_truthy ((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 (prim_call \"=\" [test; (Bool true)]))) then (let () = ignore ((emit_op (em) ((Number 5.0)))) in (compile_expr (em) (body) (scope) (tail_p))) else (let () = ignore ((emit_op (em) ((Number 6.0)))) in (let () = ignore ((compile_expr (em) (test) (scope) ((Bool false)))) in (let () = ignore ((let name_idx = (pool_add ((get (em) ((String \"pool\")))) ((String \"=\"))) in (let () = ignore ((emit_op (em) ((Number 52.0)))) in (let () = ignore ((emit_u16 (em) (name_idx))) in (emit_byte (em) ((Number 2.0))))))) in (let () = ignore ((emit_op (em) ((Number 33.0)))) in (let skip = (current_offset (em)) in (let () = ignore ((emit_i16 (em) ((Number 0.0)))) in (let () = ignore ((emit_op (em) ((Number 5.0)))) in (let () = ignore ((compile_expr (em) (body) (scope) (tail_p))) in (let () = ignore ((emit_op (em) ((Number 32.0)))) in (let end_jump = (current_offset (em)) in (let () = ignore ((emit_i16 (em) ((Number 0.0)))) in (let () = ignore ((patch_i16 (em) (skip) ((prim_call \"-\" [(current_offset (em)); (prim_call \"+\" [skip; (Number 2.0)])])))) in (let () = ignore ((compile_case_clauses (em) (rest_clauses) (scope) (tail_p))) in (patch_i16 (em) (end_jump) ((prim_call \"-\" [(current_offset (em)); (prim_call \"+\" [end_jump; (Number 2.0)])])))))))))))))))))))\n\n(* compile-thread *)\nand compile_thread em args scope tail_p =\n (let () = ignore ((String \"Compile (-> val (f1 a) (f2 b)) by desugaring to nested calls.\")) in (if sx_truthy ((empty_p (args))) then (emit_op (em) ((Number 2.0))) else (if sx_truthy ((prim_call \"=\" [(len (args)); (Number 1.0)])) then (compile_expr (em) ((first (args))) (scope) (tail_p)) else (let val_expr = (first (args)) in let forms = (rest (args)) in (compile_thread_step (em) (val_expr) (forms) (scope) (tail_p))))))\n\n(* compile-thread-step *)\nand compile_thread_step em val_expr forms scope tail_p =\n (if sx_truthy ((empty_p (forms))) then (compile_expr (em) (val_expr) (scope) (tail_p)) else (let form = (first (forms)) in let rest_forms = (rest (forms)) in let is_tail = (let _and = tail_p in if not (sx_truthy _and) then _and else (empty_p (rest_forms))) in (let call_expr = (if sx_truthy ((list_p (form))) then (prim_call \"concat\" [(List [(first (form)); val_expr]); (rest (form))]) else (List [form; val_expr])) in (if sx_truthy ((empty_p (rest_forms))) then (compile_expr (em) (call_expr) (scope) (is_tail)) else (let () = ignore ((compile_expr (em) (call_expr) (scope) ((Bool false)))) in (compile_thread_step (em) (call_expr) (rest_forms) (scope) (tail_p)))))))\n\n(* compile-defcomp *)\nand compile_defcomp em args scope =\n (let () = ignore ((String \"Compile defcomp/defisland — delegates to runtime via GLOBAL_GET + CALL.\")) in (let () = ignore ((let name_idx = (pool_add ((get (em) ((String \"pool\")))) ((String \"eval-defcomp\"))) in (let () = ignore ((emit_op (em) ((Number 20.0)))) in (emit_u16 (em) (name_idx))))) in (let () = ignore ((emit_const (em) ((prim_call \"concat\" [(List [(make_symbol ((String \"defcomp\")))]); args])))) in (let () = ignore ((emit_op (em) ((Number 48.0)))) in (emit_byte (em) ((Number 1.0)))))))\n\n(* compile-defmacro *)\nand compile_defmacro em args scope =\n (let () = ignore ((String \"Compile defmacro — delegates to runtime via GLOBAL_GET + CALL.\")) in (let () = ignore ((let name_idx = (pool_add ((get (em) ((String \"pool\")))) ((String \"eval-defmacro\"))) in (let () = ignore ((emit_op (em) ((Number 20.0)))) in (emit_u16 (em) (name_idx))))) in (let () = ignore ((emit_const (em) ((prim_call \"concat\" [(List [(make_symbol ((String \"defmacro\")))]); args])))) in (let () = ignore ((emit_op (em) ((Number 48.0)))) in (emit_byte (em) ((Number 1.0)))))))\n\n(* compile-quasiquote *)\nand compile_quasiquote em expr scope =\n (let () = ignore ((String \"Compile quasiquote inline — walks the template at compile time,\\n emitting code that builds the structure at runtime. Unquoted\\n expressions are compiled normally (resolving locals/upvalues),\\n avoiding the qq-expand-runtime env-lookup limitation.\")) in (compile_qq_expr (em) (expr) (scope)))\n\n(* compile-qq-expr *)\nand compile_qq_expr em expr scope =\n (let () = ignore ((String \"Compile a quasiquote sub-expression.\")) in (if sx_truthy ((Bool (not (sx_truthy ((prim_call \"=\" [(type_of (expr)); (String \"list\")])))))) then (emit_const (em) (expr)) else (if sx_truthy ((empty_p (expr))) then (let () = ignore ((emit_op (em) ((Number 64.0)))) in (emit_u16 (em) ((Number 0.0)))) else (let head = (first (expr)) 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 (compile_expr (em) ((nth (expr) ((Number 1.0)))) (scope) ((Bool false))) else (compile_qq_list (em) (expr) (scope)))))))\n\n(* compile-qq-list *)\nand compile_qq_list em items scope =\n (let () = ignore ((String \"Compile a quasiquote list. Handles splice-unquote by building\\n segments and concatenating them.\")) in (let has_splice = (Bool (List.exists (fun item -> 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\")])))))) (sx_to_list items))) in (if sx_truthy ((Bool (not (sx_truthy (has_splice))))) then (let () = ignore ((List.iter (fun item -> ignore ((compile_qq_expr (em) (item) (scope)))) (sx_to_list items); Nil)) in (let () = ignore ((emit_op (em) ((Number 64.0)))) in (emit_u16 (em) ((len (items)))))) else (let segment_count = ref ((Number 0.0)) in let pending = ref ((Number 0.0)) in (let () = ignore ((List.iter (fun item -> ignore ((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 () = ignore ((if sx_truthy ((prim_call \">\" [!pending; (Number 0.0)])) then (let () = ignore ((emit_op (em) ((Number 64.0)))) in (let () = ignore ((emit_u16 (em) (!pending))) in (let () = ignore ((segment_count := (prim_call \"+\" [!segment_count; (Number 1.0)]); Nil)) in (pending := (Number 0.0); Nil)))) else Nil)) in (let () = ignore ((compile_expr (em) ((nth (item) ((Number 1.0)))) (scope) ((Bool false)))) in (segment_count := (prim_call \"+\" [!segment_count; (Number 1.0)]); Nil))) else (let () = ignore ((compile_qq_expr (em) (item) (scope))) in (pending := (prim_call \"+\" [!pending; (Number 1.0)]); Nil))))) (sx_to_list items); Nil)) in (let () = ignore ((if sx_truthy ((prim_call \">\" [!pending; (Number 0.0)])) then (let () = ignore ((emit_op (em) ((Number 64.0)))) in (let () = ignore ((emit_u16 (em) (!pending))) in (segment_count := (prim_call \"+\" [!segment_count; (Number 1.0)]); Nil))) else Nil)) in (if sx_truthy ((prim_call \">\" [!segment_count; (Number 1.0)])) then (let concat_idx = (pool_add ((get (em) ((String \"pool\")))) ((String \"concat\"))) in (let () = ignore ((emit_op (em) ((Number 52.0)))) in (let () = ignore ((emit_u16 (em) (concat_idx))) in (emit_byte (em) (!segment_count))))) else Nil)))))))\n\n(* compile-call *)\nand compile_call em head args scope tail_p =\n (let is_prim = (let _and = (prim_call \"=\" [(type_of (head)); (String \"symbol\")]) in if not (sx_truthy _and) then _and else (let name = (symbol_name (head)) in (let _and = (Bool (not (sx_truthy ((prim_call \"=\" [(get ((scope_resolve (scope) (name))) ((String \"type\"))); (String \"local\")]))))) in if not (sx_truthy _and) then _and else (let _and = (Bool (not (sx_truthy ((prim_call \"=\" [(get ((scope_resolve (scope) (name))) ((String \"type\"))); (String \"upvalue\")]))))) in if not (sx_truthy _and) then _and else (is_primitive (name)))))) in (if sx_truthy (is_prim) then (let name = (symbol_name (head)) in let argc = (len (args)) in let name_idx = (pool_add ((get (em) ((String \"pool\")))) (name)) in (let () = ignore ((List.iter (fun a -> ignore ((compile_expr (em) (a) (scope) ((Bool false))))) (sx_to_list args); Nil)) in (let () = ignore ((emit_op (em) ((Number 52.0)))) in (let () = ignore ((emit_u16 (em) (name_idx))) in (emit_byte (em) (argc)))))) else (let () = ignore ((compile_expr (em) (head) (scope) ((Bool false)))) in (let () = ignore ((List.iter (fun a -> ignore ((compile_expr (em) (a) (scope) ((Bool false))))) (sx_to_list args); Nil)) in (if sx_truthy (tail_p) then (let () = ignore ((emit_op (em) ((Number 49.0)))) in (emit_byte (em) ((len (args))))) else (let () = ignore ((emit_op (em) ((Number 48.0)))) in (emit_byte (em) ((len (args))))))))))\n\n(* compile *)\nand compile expr =\n (let () = ignore ((String \"Compile a single SX expression to a bytecode module.\")) in (let em = (make_emitter ()) in let scope = (make_scope (Nil)) in (let () = ignore ((compile_expr (em) (expr) (scope) ((Bool false)))) in (let () = ignore ((emit_op (em) ((Number 50.0)))) in (let _d = Hashtbl.create 3 in let () = ignore (Hashtbl.replace _d \"arity\" (get (scope) (String \"next-slot\"))) in Hashtbl.replace _d \"constants\" (get ((get (em) ((String \"pool\")))) ((String \"entries\"))); Hashtbl.replace _d \"bytecode\" (get (em) ((String \"bytecode\"))); Dict _d)))))\n\n(* compile-module *)\nand compile_module exprs =\n (let () = ignore ((String \"Compile a list of top-level expressions to a bytecode module.\")) in (let em = (make_emitter ()) in let scope = (make_scope (Nil)) in (let () = ignore ((List.iter (fun expr -> ignore ((let () = ignore ((compile_expr (em) (expr) (scope) ((Bool false)))) in (emit_op (em) ((Number 5.0)))))) (sx_to_list (init (exprs))); Nil)) in (let () = ignore ((compile_expr (em) ((last (exprs))) (scope) ((Bool false)))) in (let () = ignore ((emit_op (em) ((Number 50.0)))) in (let _d = Hashtbl.create 3 in let () = ignore (Hashtbl.replace _d \"arity\" (get (scope) (String \"next-slot\"))) in Hashtbl.replace _d \"constants\" (get ((get (em) ((String \"pool\")))) ((String \"entries\"))); Hashtbl.replace _d \"bytecode\" (get (em) ((String \"bytecode\"))); Dict _d))))))\n\n","(* generated code *)"],"names":[],"mappings":"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","ignoreList":[1]}}]} diff --git a/shared/static/wasm/sx_browser.bc.wasm.js b/shared/static/wasm/sx_browser.bc.wasm.js index a1d7ab9e..afae7fb6 100644 --- a/shared/static/wasm/sx_browser.bc.wasm.js +++ b/shared/static/wasm/sx_browser.bc.wasm.js @@ -1792,7 +1792,7 @@ blake2_js_for_wasm_create: blake2_js_for_wasm_create}; } (globalThis)) -({"link":[["runtime-0db9b496",0],["prelude-d7e4b000",0],["stdlib-23ce0836",[]],["sx-86ee6606",[2]],["jsoo_runtime-f96b44a8",[2]],["js_of_ocaml-651f6707",[2,4]],["dune__exe__Sx_browser-8ae21d0a",[2,3,5]],["std_exit-10fb8830",[2]],["start-80fdb768",0]],"generated":(b=>{var +({"link":[["runtime-0db9b496",0],["prelude-d7e4b000",0],["stdlib-23ce0836",[]],["sx-80621fb4",[2]],["jsoo_runtime-f96b44a8",[2]],["js_of_ocaml-651f6707",[2,4]],["dune__exe__Sx_browser-8ae21d0a",[2,3,5]],["std_exit-10fb8830",[2]],["start-80fdb768",0]],"generated":(b=>{var c=b,a=b?.module?.export||b;return{"env":{"caml_ba_kind_of_typed_array":()=>{throw new Error("caml_ba_kind_of_typed_array not implemented")},"caml_exn_with_js_backtrace":()=>{throw new Error("caml_exn_with_js_backtrace not implemented")},"caml_int64_create_lo_mi_hi":()=>{throw new diff --git a/sx/sxc/docs.sx b/sx/sxc/docs.sx index a9e10057..2aef0caf 100644 --- a/sx/sxc/docs.sx +++ b/sx/sxc/docs.sx @@ -1,75 +1,130 @@ -;; SX docs — documentation page components - -(defcomp ~docs/page (&key title &rest children) - (div :class "max-w-4xl mx-auto px-6 pb-8 pt-4" +(defcomp + ~docs/page + (&key title &rest children) + (div + :class "max-w-4xl mx-auto px-6 pb-8 pt-4" (div :class "prose prose-stone max-w-none space-y-6" children))) -(defcomp ~docs/section (&key title id &rest children) - (section :id id :class "space-y-4" +(defcomp + ~docs/section + (&key title id &rest children) + (section + :id id + :class "space-y-4" (h2 :class "text-2xl font-semibold text-stone-800" title) children)) -(defcomp ~docs/subsection (&key title &rest children) - (div :class "space-y-3" +(defcomp + ~docs/subsection + (&key title &rest children) + (div + :class "space-y-3" (h3 :class "text-xl font-semibold text-stone-700" title) children)) -(defcomp ~docs/code (&key src) - (div :class "not-prose bg-stone-100 rounded-lg p-5 mx-auto max-w-3xl" - (pre :class "text-sm leading-relaxed whitespace-pre-wrap break-words font-mono" - (code src)))) +(defcomp + ~docs/code + (&key src) + (div + :class "not-prose bg-stone-100 rounded-lg p-5 overflow-x-auto my-6" + (pre + :class "text-sm leading-relaxed whitespace-pre-wrap break-words font-mono" + src))) -(defcomp ~docs/note (&key &rest children) - (div :class "border-l-4 border-violet-400 bg-violet-50 p-4 text-stone-700 text-sm" +(defcomp + ~docs/note + (&key &rest children) + (div + :class "border-l-4 border-violet-400 bg-violet-50 p-4 text-stone-700 text-sm" children)) -(defcomp ~docs/table (&key headers rows) - (div :class "overflow-x-auto rounded border border-stone-200" - (table :class "w-full text-left text-sm" +(defcomp + ~docs/table + (&key headers rows) + (div + :class "overflow-x-auto rounded border border-stone-200" + (table + :class "w-full text-left text-sm" (thead - (tr :class "border-b border-stone-200 bg-stone-100" - (map (fn (h) (th :class "px-3 py-2 font-medium text-stone-600" h)) headers))) + (tr + :class "border-b border-stone-200 bg-stone-100" + (map + (fn (h) (th :class "px-3 py-2 font-medium text-stone-600" h)) + headers))) (tbody - (map (fn (row) - (tr :class "border-b border-stone-100" - (map (fn (cell) (td :class "px-3 py-2 text-stone-700" cell)) row))) + (map + (fn + (row) + (tr + :class "border-b border-stone-100" + (map + (fn (cell) (td :class "px-3 py-2 text-stone-700" cell)) + row))) rows))))) -(defcomp ~docs/attr-row (&key attr description exists href) - (tr :class "border-b border-stone-100" - (td :class "px-3 py-2 font-mono text-sm whitespace-nowrap" - (if href - (a :href href - :sx-get href :sx-target "#main-panel" :sx-select "#main-panel" - :sx-swap "outerHTML" :sx-push-url "true" - :class "text-violet-700 hover:text-violet-900 underline" attr) +(defcomp + ~docs/attr-row + (&key attr description exists href) + (tr + :class "border-b border-stone-100" + (td + :class "px-3 py-2 font-mono text-sm whitespace-nowrap" + (if + href + (a + :href href + :sx-get href + :sx-target "#main-panel" + :sx-select "#main-panel" + :sx-swap "outerHTML" + :sx-push-url "true" + :class "text-violet-700 hover:text-violet-900 underline" + attr) (span :class "text-violet-700" attr))) (td :class "px-3 py-2 text-stone-700 text-sm" description) - (td :class "px-3 py-2 text-center" - (if exists + (td + :class "px-3 py-2 text-center" + (if + exists (span :class "text-emerald-600 text-sm" "yes") (span :class "text-stone-400 text-sm italic" "not yet"))))) -(defcomp ~docs/primitives-table (&key category primitives) - (div :class "space-y-2" +(defcomp + ~docs/primitives-table + (&key category primitives) + (div + :class "space-y-2" (h4 :class "text-lg font-semibold text-stone-700" category) - (div :class "flex flex-wrap gap-2" - (map (fn (p) - (span :class "inline-block px-2 py-1 rounded bg-stone-100 font-mono text-sm text-stone-700" p)) + (div + :class "flex flex-wrap gap-2" + (map + (fn + (p) + (span + :class "inline-block px-2 py-1 rounded bg-stone-100 font-mono text-sm text-stone-700" + p)) primitives)))) -(defcomp ~docs/nav (&key items current) - (nav :class "flex flex-wrap gap-2 mb-8" - (map (fn (item) - (a :href (nth item 1) - :sx-get (nth item 1) - :sx-target "#main-panel" - :sx-select "#main-panel" - :sx-swap "outerHTML" - :sx-push-url "true" - :class (str "px-3 py-1.5 rounded text-sm font-medium no-underline " - (if (= (nth item 0) current) - "bg-violet-100 text-violet-800" - "bg-stone-100 text-stone-600 hover:bg-stone-200")) - (nth item 0))) +(defcomp + ~docs/nav + (&key items current) + (nav + :class "flex flex-wrap gap-2 mb-8" + (map + (fn + (item) + (a + :href (nth item 1) + :sx-get (nth item 1) + :sx-target "#main-panel" + :sx-select "#main-panel" + :sx-swap "outerHTML" + :sx-push-url "true" + :class (str + "px-3 py-1.5 rounded text-sm font-medium no-underline " + (if + (= (nth item 0) current) + "bg-violet-100 text-violet-800" + "bg-stone-100 text-stone-600 hover:bg-stone-200")) + (nth item 0))) items)))