From 584445a843b3cabd55528d7846106264dc293410 Mon Sep 17 00:00:00 2001 From: giles Date: Wed, 1 Apr 2026 11:00:51 +0000 Subject: [PATCH] SPA navigation, page component refactors, WASM rebuild Refactor page components (docs, examples, specs, reference, layouts) and adapters (adapter-sx, boot-helpers, orchestration) across sx/ and web/ directories. Add Playwright SPA navigation tests. Rebuild WASM kernel with updated bytecode. Add OCaml primitives for request handling. Co-Authored-By: Claude Opus 4.6 (1M context) --- .gitignore | 1 + hosts/ocaml/lib/sx_primitives.ml | 7 + shared/static/wasm/sx/adapter-dom.sxbc | 2 +- shared/static/wasm/sx/adapter-sx.sx | 940 +++++------ shared/static/wasm/sx/adapter-sx.sxbc | 4 +- shared/static/wasm/sx/boot-helpers.sx | 32 +- shared/static/wasm/sx/boot-helpers.sxbc | 4 +- shared/static/wasm/sx/orchestration.sx | 45 +- shared/static/wasm/sx/orchestration.sxbc | 4 +- shared/static/wasm/sx_browser.bc.js | 43 +- .../sx-80621fb4.wasm | Bin 354050 -> 0 bytes .../sx-80621fb4.wasm.map | 1 - .../sx-afdcb8e8.wasm | Bin 0 -> 354582 bytes .../sx-afdcb8e8.wasm.map | 1 + shared/static/wasm/sx_browser.bc.wasm.js | 2 +- sx/sx/docs.sx | 366 ++-- sx/sx/essays/index.sx | 39 +- sx/sx/essays/philosophy-index.sx | 45 +- sx/sx/examples.sx | 123 +- sx/sx/layouts.sx | 23 +- sx/sx/not-found.sx | 37 +- sx/sx/optimistic-demo.sx | 141 +- sx/sx/plans/index.sx | 49 +- sx/sx/reactive-islands/demo.sx | 4 +- sx/sx/reactive-islands/event-bridge.sx | 180 +- sx/sx/reactive-islands/marshes.sx | 1456 ++++++++++------ sx/sx/reactive-islands/plan.sx | 418 +++-- sx/sx/reference.sx | 154 +- sx/sx/routing-analyzer.sx | 229 ++- sx/sx/specs-explorer.sx | 407 +++-- sx/sx/specs.sx | 1493 +++++++++++------ sx/sxc/docs.sx | 8 +- sx/sxc/examples.sx | 1042 ++++++++---- sx/sxc/reference.sx | 1142 +++++++------ tests/playwright/spa-navigation.spec.js | 90 + web/adapter-sx.sx | 940 +++++------ web/lib/boot-helpers.sx | 32 +- web/orchestration.sx | 45 +- 38 files changed, 5854 insertions(+), 3695 deletions(-) delete mode 100644 shared/static/wasm/sx_browser.bc.wasm.assets/sx-80621fb4.wasm delete mode 100644 shared/static/wasm/sx_browser.bc.wasm.assets/sx-80621fb4.wasm.map create mode 100644 shared/static/wasm/sx_browser.bc.wasm.assets/sx-afdcb8e8.wasm create mode 100644 shared/static/wasm/sx_browser.bc.wasm.assets/sx-afdcb8e8.wasm.map create mode 100644 tests/playwright/spa-navigation.spec.js diff --git a/.gitignore b/.gitignore index 9baaa67e..b095183b 100644 --- a/.gitignore +++ b/.gitignore @@ -15,3 +15,4 @@ sx-haskell/ sx-rust/ shared/static/scripts/sx-full-test.js hosts/ocaml/_build/ +hosts/ocaml/browser/sx_browser.bc.wasm.assets/ diff --git a/hosts/ocaml/lib/sx_primitives.ml b/hosts/ocaml/lib/sx_primitives.ml index 99008447..bf223e11 100644 --- a/hosts/ocaml/lib/sx_primitives.ml +++ b/hosts/ocaml/lib/sx_primitives.ml @@ -665,6 +665,13 @@ let () = match args with [String msg] -> raise (Eval_error msg) | [a] -> raise (Eval_error (to_string a)) | _ -> raise (Eval_error "error: 1 arg")); + register "try-catch" (fun args -> + match args with + | [try_fn; catch_fn] -> + (try !_sx_trampoline_fn (!_sx_call_fn try_fn []) + with Eval_error msg -> + !_sx_trampoline_fn (!_sx_call_fn catch_fn [String msg])) + | _ -> raise (Eval_error "try-catch: expected (try-fn catch-fn)")); (* client? — false by default (server); sx_browser.ml sets _is_client := true *) register "client?" (fun _args -> Bool !_is_client); (* Named stores — global mutable registry, bypasses env scoping issues *) diff --git a/shared/static/wasm/sx/adapter-dom.sxbc b/shared/static/wasm/sx/adapter-dom.sxbc index 390543b7..f8d2c438 100644 --- a/shared/static/wasm/sx/adapter-dom.sxbc +++ b/shared/static/wasm/sx/adapter-dom.sxbc @@ -1,3 +1,3 @@ (sxbc 1 "3d33d6d0540fbd61" (code - :constants ("SVG_NS" "http://www.w3.org/2000/svg" "MATH_NS" "http://www.w3.org/1998/Math/MathML" "island-scope?" {:upvalue-count 0 :arity 0 :constants ("not" "nil?" "scope-peek" "sx-island-scope") :bytecode (1 3 0 52 2 0 1 52 1 0 1 52 0 0 1 50)} "*memo-cache*" "dict" "*cyst-counter*" 0 "next-cyst-id" {:upvalue-count 0 :arity 0 :constants ("+" "*cyst-counter*" 1 "str" "sx-cyst-") :bytecode (20 1 0 1 2 0 52 0 0 2 21 1 0 5 1 4 0 20 1 0 52 3 0 2 50)} "contains-deref?" {:upvalue-count 0 :arity 1 :constants ("not" "list?" "empty?" "=" "type-of" "first" "symbol" "symbol-name" "deref" "some" "contains-deref?") :bytecode (16 0 52 1 0 1 52 0 0 1 33 4 0 4 32 69 0 16 0 52 2 0 1 33 4 0 4 32 56 0 16 0 52 5 0 1 52 4 0 1 1 6 0 52 3 0 2 6 33 19 0 5 20 7 0 16 0 52 5 0 1 48 1 1 8 0 52 3 0 2 33 4 0 3 32 9 0 20 10 0 16 0 52 9 0 2 50)} "dom-on" {:upvalue-count 0 :arity 3 :constants ("dom-listen" "lambda?" "=" 0 "len" "lambda-params" {:upvalue-count 1 :arity 1 :constants ("trampoline" "call-lambda" "list" "run-post-render-hooks") :bytecode (20 0 0 20 1 0 18 0 52 2 0 0 48 2 48 1 5 20 3 0 49 0 50)} {:upvalue-count 1 :arity 1 :constants ("trampoline" "call-lambda" "list" "run-post-render-hooks") :bytecode (20 0 0 20 1 0 18 0 16 0 52 2 0 1 48 2 48 1 5 20 3 0 49 0 50)}) :bytecode (20 0 0 16 0 16 1 16 2 52 1 0 1 33 36 0 1 3 0 16 2 52 5 0 1 52 4 0 1 52 2 0 2 33 8 0 51 6 0 1 2 32 5 0 51 7 0 1 2 32 2 0 16 2 49 3 50)} "render-to-dom" {:upvalue-count 0 :arity 3 :constants ("set-render-active!" "type-of" "nil" "=" "create-fragment" "boolean" "raw-html" "dom-parse-html" "raw-html-content" "string" "create-text-node" "number" "str" "symbol" "render-to-dom" "trampoline" "eval-expr" "keyword" "keyword-name" "dom-node" "spread" "not" "island-scope?" "scope-emit!" "element-attrs" "spread-attrs" "dict" "has-key?" "__host_handle" "list" "empty?" "render-dom-list" "signal?" "reactive-text" "deref") :bytecode (20 0 0 3 48 1 5 16 0 52 1 0 1 6 1 2 0 52 3 0 2 33 9 0 5 20 4 0 49 0 32 106 1 6 1 5 0 52 3 0 2 33 9 0 5 20 4 0 49 0 32 86 1 6 1 6 0 52 3 0 2 33 15 0 5 20 7 0 16 0 52 8 0 1 49 1 32 60 1 6 1 9 0 52 3 0 2 33 11 0 5 20 10 0 16 0 49 1 32 38 1 6 1 11 0 52 3 0 2 33 15 0 5 20 10 0 16 0 52 12 0 1 49 1 32 12 1 6 1 13 0 52 3 0 2 33 27 0 5 20 14 0 20 15 0 20 16 0 16 0 16 1 48 2 48 1 16 1 16 2 49 3 32 230 0 6 1 17 0 52 3 0 2 33 16 0 5 20 10 0 20 18 0 16 0 48 1 49 1 32 203 0 6 1 19 0 52 3 0 2 33 6 0 5 16 0 32 186 0 6 1 20 0 52 3 0 2 33 36 0 5 20 22 0 48 0 52 21 0 1 33 16 0 1 24 0 16 0 52 25 0 1 52 23 0 2 32 1 0 2 5 16 0 32 139 0 6 1 26 0 52 3 0 2 33 26 0 5 16 0 1 28 0 52 27 0 2 33 5 0 16 0 32 5 0 20 4 0 49 0 32 102 0 6 1 29 0 52 3 0 2 33 32 0 5 16 0 52 30 0 1 33 8 0 20 4 0 49 0 32 11 0 20 31 0 16 0 16 1 16 2 49 3 32 59 0 5 20 32 0 16 0 48 1 33 37 0 20 22 0 48 0 33 10 0 20 33 0 16 0 49 1 32 16 0 20 10 0 20 34 0 16 0 48 1 52 12 0 1 49 1 32 11 0 20 10 0 16 0 52 12 0 1 49 1 50)} "render-dom-list" {:upvalue-count 0 :arity 3 :constants ("first" "=" "type-of" "symbol" "symbol-name" "rest" "raw!" "render-dom-raw" "<>" "render-dom-fragment" "lake" "render-dom-lake" "marsh" "render-dom-marsh" "starts-with?" "html:" "render-dom-element" "slice" 5 "render-dom-form?" "contains?" "HTML_TAGS" ">" "len" 0 "keyword" "dispatch-render-form" "env-has?" "macro?" "env-get" "render-to-dom" "expand-macro" "~" "island?" "scope-peek" "sx-render-markers" "dom-create-element" "span" "dict" "reduce" {:upvalue-count 3 :arity 2 :constants ("get" "skip" "assoc" "i" "inc" "=" "type-of" "keyword" "<" "len" "keyword-name" "trampoline" "eval-expr" "nth" "dict-set!") :bytecode (16 0 1 1 0 52 0 0 2 17 2 16 2 33 29 0 16 0 1 1 0 4 1 3 0 16 0 1 3 0 52 0 0 2 52 4 0 1 52 2 0 5 32 148 0 16 1 52 6 0 1 1 7 0 52 5 0 2 6 33 24 0 5 16 0 1 3 0 52 0 0 2 52 4 0 1 18 0 52 9 0 1 52 8 0 2 33 82 0 20 10 0 16 1 48 1 17 3 20 11 0 20 12 0 18 0 16 0 1 3 0 52 0 0 2 52 4 0 1 52 13 0 2 18 1 48 2 48 1 17 4 18 2 16 3 16 4 52 14 0 3 5 16 0 1 1 0 3 1 3 0 16 0 1 3 0 52 0 0 2 52 4 0 1 52 2 0 5 32 22 0 16 0 1 3 0 16 0 1 3 0 52 0 0 2 52 4 0 1 52 2 0 3 50)} "i" "skip" "dom-set-attr" "data-sx-island" "component-name" "not" "empty-dict?" "data-sx-state" "sx-serialize" "render-dom-island" "component?" "render-dom-component" "render-dom-unknown-component" "index-of" "-" "deref" "island-scope?" "trampoline" "eval-expr" "signal?" "reactive-text" "create-text-node" "str" "contains-deref?" "computed" {:upvalue-count 2 :arity 0 :constants ("trampoline" "eval-expr") :bytecode (20 0 0 20 1 0 18 0 18 1 48 2 49 1 50)} "lambda?" "list" "create-fragment" "for-each" {:upvalue-count 3 :arity 1 :constants ("render-to-dom" "not" "spread?" "dom-append") :bytecode (20 0 0 16 0 18 0 18 1 48 3 17 1 16 1 52 2 0 1 52 1 0 1 33 12 0 20 3 0 18 2 16 1 49 2 32 1 0 2 50)}) :bytecode (16 0 52 0 0 1 17 3 16 3 52 2 0 1 1 3 0 52 1 0 2 33 68 3 20 4 0 16 3 48 1 17 4 16 0 52 5 0 1 17 5 16 4 1 6 0 52 1 0 2 33 12 0 20 7 0 16 5 16 1 49 2 32 24 3 16 4 1 8 0 52 1 0 2 33 14 0 20 9 0 16 5 16 1 16 2 49 3 32 254 2 16 4 1 10 0 52 1 0 2 33 14 0 20 11 0 16 5 16 1 16 2 49 3 32 228 2 16 4 1 12 0 52 1 0 2 33 14 0 20 13 0 16 5 16 1 16 2 49 3 32 202 2 16 4 1 15 0 52 14 0 2 33 23 0 20 16 0 16 4 1 18 0 52 17 0 2 16 5 16 1 16 2 49 4 32 167 2 20 19 0 16 4 48 1 33 91 0 20 21 0 16 4 52 20 0 2 6 33 43 0 5 16 5 52 23 0 1 1 24 0 52 22 0 2 6 33 18 0 5 16 5 52 0 0 1 52 2 0 1 1 25 0 52 1 0 2 6 34 3 0 5 16 2 33 16 0 20 16 0 16 4 16 5 16 1 16 2 49 4 32 13 0 20 26 0 16 4 16 0 16 1 16 2 49 4 32 66 2 20 27 0 16 1 16 4 48 2 6 33 14 0 5 20 29 0 16 1 16 4 48 2 52 28 0 1 33 30 0 20 30 0 20 31 0 20 29 0 16 1 16 4 48 2 16 5 16 1 48 3 16 1 16 2 49 3 32 6 2 20 21 0 16 4 52 20 0 2 33 16 0 20 16 0 16 4 16 5 16 1 16 2 49 4 32 234 1 16 4 1 32 0 52 14 0 2 6 33 28 0 5 20 27 0 16 1 16 4 48 2 6 33 14 0 5 20 29 0 16 1 16 4 48 2 52 33 0 1 33 148 0 1 35 0 52 34 0 1 33 115 0 20 29 0 16 1 16 4 48 2 17 6 20 36 0 1 37 0 2 48 2 17 7 52 38 0 0 17 8 51 40 0 1 5 1 1 1 8 1 41 0 1 24 0 1 42 0 4 52 38 0 4 16 5 52 39 0 3 5 20 43 0 16 7 1 44 0 16 6 52 45 0 1 48 3 5 16 8 52 47 0 1 52 46 0 1 33 20 0 20 43 0 16 7 1 48 0 20 49 0 16 8 48 1 48 3 32 1 0 2 5 16 7 32 20 0 20 50 0 20 29 0 16 1 16 4 48 2 16 5 16 1 16 2 49 4 32 42 1 16 4 1 32 0 52 14 0 2 33 46 0 20 29 0 16 1 16 4 48 2 17 6 16 6 52 51 0 1 33 16 0 20 52 0 16 6 16 5 16 1 16 2 49 4 32 7 0 20 53 0 16 4 49 1 32 240 0 16 4 1 55 0 52 54 0 2 1 24 0 52 22 0 2 6 33 36 0 5 16 5 52 23 0 1 1 24 0 52 22 0 2 6 33 18 0 5 16 5 52 0 0 1 52 2 0 1 1 25 0 52 1 0 2 33 16 0 20 16 0 16 4 16 5 16 1 16 2 49 4 32 165 0 16 2 33 16 0 20 16 0 16 4 16 5 16 1 16 2 49 4 32 144 0 16 4 1 56 0 52 1 0 2 6 33 6 0 5 20 57 0 48 0 33 59 0 20 58 0 20 59 0 16 5 52 0 0 1 16 1 48 2 48 1 17 6 20 60 0 16 6 48 1 33 10 0 20 61 0 16 6 49 1 32 16 0 20 62 0 20 56 0 16 6 48 1 52 63 0 1 49 1 32 63 0 20 57 0 48 0 6 33 8 0 5 20 64 0 16 0 48 1 33 20 0 20 61 0 20 65 0 51 66 0 1 0 1 1 48 1 49 1 32 23 0 20 30 0 20 58 0 20 59 0 16 0 16 1 48 2 48 1 16 1 16 2 49 3 32 78 0 16 3 52 67 0 1 6 34 14 0 5 16 3 52 2 0 1 1 68 0 52 1 0 2 33 26 0 20 30 0 20 58 0 20 59 0 16 0 16 1 48 2 48 1 16 1 16 2 49 3 32 25 0 20 69 0 48 0 17 4 51 71 0 1 1 1 2 1 4 16 0 52 70 0 2 5 16 4 50)} "render-dom-element" {:upvalue-count 0 :arity 4 :constants ("=" "svg" "SVG_NS" "math" "MATH_NS" "dom-create-element" "scope-push!" "element-attrs" "reduce" {:upvalue-count 5 :arity 2 :constants ("get" "skip" "assoc" "i" "inc" "=" "type-of" "keyword" "<" "len" "keyword-name" "nth" "starts-with?" "on-" "trampoline" "eval-expr" "callable?" "dom-on" "slice" 3 "bind" "signal?" "bind-input" "ref" "dict-set!" "current" "key" "dom-set-attr" "str" "island-scope?" "reactive-attr" {:upvalue-count 2 :arity 0 :constants ("trampoline" "eval-expr") :bytecode (20 0 0 20 1 0 18 0 18 1 48 2 49 1 50)} "nil?" "contains?" "BOOLEAN_ATTRS" "" "not" "VOID_ELEMENTS" "render-to-dom" "spread?" "reactive-spread" {:upvalue-count 3 :arity 0 :constants ("render-to-dom") :bytecode (20 0 0 18 0 18 1 18 2 49 3 50)} "dom-append") :bytecode (16 0 1 1 0 52 0 0 2 17 2 16 2 33 29 0 16 0 1 1 0 4 1 3 0 16 0 1 3 0 52 0 0 2 52 4 0 1 52 2 0 5 32 58 2 16 1 52 6 0 1 1 7 0 52 5 0 2 6 33 24 0 5 16 0 1 3 0 52 0 0 2 52 4 0 1 18 0 52 9 0 1 52 8 0 2 33 154 1 20 10 0 16 1 48 1 17 3 18 0 16 0 1 3 0 52 0 0 2 52 4 0 1 52 11 0 2 17 4 16 3 1 13 0 52 12 0 2 33 51 0 20 14 0 20 15 0 16 4 18 1 48 2 48 1 17 5 20 16 0 16 5 48 1 33 21 0 20 17 0 18 2 16 3 1 19 0 52 18 0 2 16 5 48 3 32 1 0 2 32 31 1 16 3 1 20 0 52 5 0 2 33 42 0 20 14 0 20 15 0 16 4 18 1 48 2 48 1 17 5 20 21 0 16 5 48 1 33 12 0 20 22 0 18 2 16 5 48 2 32 1 0 2 32 233 0 16 3 1 23 0 52 5 0 2 33 30 0 20 14 0 20 15 0 16 4 18 1 48 2 48 1 17 5 16 5 1 25 0 18 2 52 24 0 3 32 191 0 16 3 1 26 0 52 5 0 2 33 35 0 20 14 0 20 15 0 16 4 18 1 48 2 48 1 17 5 20 27 0 18 2 1 26 0 16 5 52 28 0 1 48 3 32 144 0 20 29 0 48 0 33 19 0 20 30 0 18 2 16 3 51 31 0 1 4 0 1 48 3 32 117 0 20 14 0 20 15 0 16 4 18 1 48 2 48 1 17 5 16 5 52 32 0 1 6 34 8 0 5 16 5 4 52 5 0 2 33 4 0 2 32 76 0 20 34 0 16 3 52 33 0 2 33 24 0 16 5 33 15 0 20 27 0 18 2 16 3 1 35 0 48 3 32 1 0 2 32 40 0 16 5 3 52 5 0 2 33 15 0 20 27 0 18 2 16 3 1 35 0 48 3 32 15 0 20 27 0 18 2 16 3 16 5 52 28 0 1 48 3 5 16 0 1 1 0 3 1 3 0 16 0 1 3 0 52 0 0 2 52 4 0 1 52 2 0 5 32 116 0 20 37 0 18 3 52 33 0 2 52 36 0 1 33 76 0 20 38 0 16 1 18 1 18 4 48 3 17 3 16 3 52 39 0 1 6 33 6 0 5 20 29 0 48 0 33 19 0 20 40 0 18 2 51 41 0 1 1 0 1 0 4 48 2 32 22 0 16 3 52 39 0 1 33 4 0 2 32 9 0 20 42 0 18 2 16 3 48 2 32 1 0 2 5 16 0 1 3 0 16 0 1 3 0 52 0 0 2 52 4 0 1 52 2 0 3 50)} "dict" "i" 0 "skip" "for-each" {:upvalue-count 1 :arity 1 :constants ("for-each" {:upvalue-count 2 :arity 1 :constants ("dict-get" "=" "class" "dom-get-attr" "dom-set-attr" "not" "" "str" " " "style" ";") :bytecode (18 0 16 0 52 0 0 2 17 1 16 0 1 2 0 52 1 0 2 33 64 0 20 3 0 18 1 1 2 0 48 2 17 2 20 4 0 18 1 1 2 0 16 2 6 33 14 0 5 16 2 1 6 0 52 1 0 2 52 5 0 1 33 14 0 16 2 1 8 0 16 1 52 7 0 3 32 2 0 16 1 49 3 32 91 0 16 0 1 9 0 52 1 0 2 33 64 0 20 3 0 18 1 1 9 0 48 2 17 2 20 4 0 18 1 1 9 0 16 2 6 33 14 0 5 16 2 1 6 0 52 1 0 2 52 5 0 1 33 14 0 16 2 1 10 0 16 1 52 7 0 3 32 2 0 16 1 49 3 32 15 0 20 4 0 18 1 16 0 16 1 52 7 0 1 49 3 50)} "keys") :bytecode (51 1 0 1 0 0 0 16 0 52 2 0 1 52 0 0 2 50)} "scope-emitted" "scope-pop!") :bytecode (16 0 1 1 0 52 0 0 2 33 6 0 20 2 0 32 20 0 16 0 1 3 0 52 0 0 2 33 6 0 20 4 0 32 2 0 16 3 17 4 20 5 0 16 0 16 4 48 2 17 5 1 7 0 2 52 6 0 2 5 51 9 0 1 1 1 2 1 5 1 0 1 4 1 11 0 1 12 0 1 13 0 4 52 10 0 4 16 1 52 8 0 3 5 51 15 0 1 5 1 7 0 52 16 0 1 52 14 0 2 5 1 7 0 52 17 0 1 5 16 5 50)} "render-dom-component" {:upvalue-count 0 :arity 4 :constants ("dict" "list" "reduce" {:upvalue-count 4 :arity 2 :constants ("get" "skip" "assoc" "i" "inc" "=" "type-of" "keyword" "<" "len" "trampoline" "eval-expr" "nth" "dict-set!" "keyword-name" "append!") :bytecode (16 0 1 1 0 52 0 0 2 17 2 16 2 33 29 0 16 0 1 1 0 4 1 3 0 16 0 1 3 0 52 0 0 2 52 4 0 1 52 2 0 5 32 154 0 16 1 52 6 0 1 1 7 0 52 5 0 2 6 33 24 0 5 16 0 1 3 0 52 0 0 2 52 4 0 1 18 0 52 9 0 1 52 8 0 2 33 78 0 20 10 0 20 11 0 18 0 16 0 1 3 0 52 0 0 2 52 4 0 1 52 12 0 2 18 1 48 2 48 1 17 3 18 2 20 14 0 16 1 48 1 16 3 52 13 0 3 5 16 0 1 1 0 3 1 3 0 16 0 1 3 0 52 0 0 2 52 4 0 1 52 2 0 5 32 32 0 20 15 0 18 3 16 1 48 2 5 16 0 1 3 0 16 0 1 3 0 52 0 0 2 52 4 0 1 52 2 0 3 50)} "i" 0 "skip" "env-merge" "component-closure" "for-each" {:upvalue-count 2 :arity 1 :constants ("env-bind!" "dict-has?" "dict-get") :bytecode (20 0 0 18 0 16 0 18 1 16 0 52 1 0 2 33 11 0 18 1 16 0 52 2 0 2 32 1 0 2 49 3 50)} "component-params" "component-has-children?" "create-fragment" {:upvalue-count 3 :arity 1 :constants ("render-to-dom" "not" "spread?" "dom-append") :bytecode (20 0 0 16 0 18 0 18 1 48 3 17 1 16 1 52 2 0 1 52 1 0 1 33 12 0 20 3 0 18 2 16 1 49 2 32 1 0 2 50)} "env-bind!" "children" "render-to-dom" "component-body") :bytecode (52 0 0 0 17 4 52 1 0 0 17 5 51 3 0 1 1 1 2 1 4 1 5 1 4 0 1 5 0 1 6 0 4 52 0 0 4 16 1 52 2 0 3 5 20 7 0 16 0 52 8 0 1 16 2 48 2 17 6 51 10 0 1 6 1 4 16 0 52 11 0 1 52 9 0 2 5 16 0 52 12 0 1 33 38 0 20 13 0 48 0 17 7 51 14 0 1 2 1 3 1 7 16 5 52 9 0 2 5 20 15 0 16 6 1 16 0 16 7 48 3 32 1 0 2 5 20 17 0 16 0 52 18 0 1 16 6 16 3 49 3 50)} "render-dom-fragment" {:upvalue-count 0 :arity 3 :constants ("create-fragment" "for-each" {:upvalue-count 3 :arity 1 :constants ("render-to-dom" "not" "spread?" "dom-append") :bytecode (20 0 0 16 0 18 0 18 1 48 3 17 1 16 1 52 2 0 1 52 1 0 1 33 12 0 20 3 0 18 2 16 1 49 2 32 1 0 2 50)}) :bytecode (20 0 0 48 0 17 3 51 2 0 1 1 1 2 1 3 16 0 52 1 0 2 5 16 3 50)} "render-dom-raw" {:upvalue-count 0 :arity 2 :constants ("create-fragment" "for-each" {:upvalue-count 2 :arity 1 :constants ("trampoline" "eval-expr" "=" "type-of" "string" "dom-append" "dom-parse-html" "dom-node" "dom-clone" "not" "nil?" "create-text-node" "str") :bytecode (20 0 0 20 1 0 16 0 18 0 48 2 48 1 17 1 16 1 52 3 0 1 1 4 0 52 2 0 2 33 17 0 20 5 0 18 1 20 6 0 16 1 48 1 49 2 32 68 0 16 1 52 3 0 1 1 7 0 52 2 0 2 33 17 0 20 5 0 18 1 20 8 0 16 1 48 1 49 2 32 35 0 16 1 52 10 0 1 52 9 0 1 33 21 0 20 5 0 18 1 20 11 0 16 1 52 12 0 1 48 1 49 2 32 1 0 2 50)}) :bytecode (20 0 0 48 0 17 2 51 2 0 1 1 1 2 16 0 52 1 0 2 5 16 2 50)} "render-dom-unknown-component" {:upvalue-count 0 :arity 1 :constants ("error" "str" "Unknown component: ") :bytecode (1 2 0 16 0 52 1 0 2 52 0 0 1 50)} "RENDER_DOM_FORMS" "list" "if" "when" "cond" "case" "let" "let*" "letrec" "begin" "do" "define" "defcomp" "defisland" "defmacro" "defstyle" "map" "map-indexed" "filter" "for-each" "portal" "error-boundary" "scope" "provide" "cyst" "render-dom-form?" {:upvalue-count 0 :arity 1 :constants ("contains?" "RENDER_DOM_FORMS") :bytecode (20 1 0 16 0 52 0 0 2 50)} "dispatch-render-form" {:upvalue-count 0 :arity 4 :constants ("=" "if" "island-scope?" "create-comment" "r-if" "list" "effect" {:upvalue-count 6 :arity 0 :constants ("trampoline" "eval-expr" "nth" 1 "render-to-dom" 2 ">" "len" 3 "create-fragment" "dom-parent" "for-each" {:upvalue-count 0 :arity 1 :constants ("dom-remove") :bytecode (20 0 0 16 0 49 1 50)} "dom-is-fragment?" "dom-child-nodes" "list" "dom-insert-after") :bytecode (20 0 0 20 1 0 18 0 1 3 0 52 2 0 2 18 1 48 2 48 1 17 1 16 1 33 21 0 20 4 0 18 0 1 5 0 52 2 0 2 18 1 18 2 48 3 32 42 0 18 0 52 7 0 1 1 8 0 52 6 0 2 33 21 0 20 4 0 18 0 1 8 0 52 2 0 2 18 1 18 2 48 3 32 5 0 20 9 0 48 0 17 0 20 10 0 18 3 48 1 33 51 0 51 12 0 18 4 52 11 0 2 5 20 13 0 16 0 48 1 33 10 0 20 14 0 16 0 48 1 32 6 0 16 0 52 15 0 1 19 4 5 20 16 0 18 3 16 0 49 2 32 4 0 16 0 19 5 50)} "spread?" "create-fragment" "dom-append" "dom-is-fragment?" "dom-child-nodes" "trampoline" "eval-expr" "nth" 1 "render-to-dom" 2 ">" "len" 3 "when" "r-when" {:upvalue-count 6 :arity 0 :constants ("dom-parent" "for-each" {:upvalue-count 0 :arity 1 :constants ("dom-remove") :bytecode (20 0 0 16 0 49 1 50)} "list" "trampoline" "eval-expr" "nth" 1 "create-fragment" {:upvalue-count 4 :arity 1 :constants ("dom-append" "render-to-dom" "nth") :bytecode (20 0 0 18 0 20 1 0 18 1 16 0 52 2 0 2 18 2 18 3 48 3 49 2 50)} "range" 2 "len" "dom-child-nodes" "dom-insert-after") :bytecode (20 0 0 18 0 48 1 33 103 0 51 2 0 18 1 52 1 0 2 5 52 3 0 0 19 1 5 20 4 0 20 5 0 18 2 1 7 0 52 6 0 2 18 3 48 2 48 1 33 58 0 20 8 0 48 0 17 0 51 9 0 1 0 0 2 0 3 0 4 1 11 0 18 2 52 12 0 1 52 10 0 2 52 1 0 2 5 20 13 0 16 0 48 1 19 1 5 20 14 0 18 0 16 0 49 2 32 1 0 2 32 78 0 20 4 0 20 5 0 18 2 1 7 0 52 6 0 2 18 3 48 2 48 1 33 53 0 20 8 0 48 0 17 0 51 9 0 1 0 0 2 0 3 0 4 1 11 0 18 2 52 12 0 1 52 10 0 2 52 1 0 2 5 20 13 0 16 0 48 1 19 1 5 16 0 19 5 32 1 0 2 50)} "not" "for-each" {:upvalue-count 4 :arity 1 :constants ("dom-append" "render-to-dom" "nth") :bytecode (20 0 0 18 0 20 1 0 18 1 16 0 52 2 0 2 18 2 18 3 48 3 49 2 50)} "range" "cond" "r-cond" {:upvalue-count 6 :arity 0 :constants ("eval-cond" "rest" "dom-parent" "for-each" {:upvalue-count 0 :arity 1 :constants ("dom-remove") :bytecode (20 0 0 16 0 49 1 50)} "list" "render-to-dom" "dom-is-fragment?" "dom-child-nodes" "dom-insert-after") :bytecode (20 0 0 18 0 52 1 0 1 18 1 48 2 17 0 20 2 0 18 2 48 1 33 80 0 51 4 0 18 3 52 3 0 2 5 52 5 0 0 19 3 5 16 0 33 54 0 20 6 0 16 0 18 1 18 4 48 3 17 1 20 7 0 16 1 48 1 33 10 0 20 8 0 16 1 48 1 32 6 0 16 1 52 5 0 1 19 3 5 20 9 0 18 2 16 1 49 2 32 1 0 2 32 55 0 16 0 33 49 0 20 6 0 16 0 18 1 18 4 48 3 17 1 20 7 0 16 1 48 1 33 10 0 20 8 0 16 1 48 1 32 6 0 16 1 52 5 0 1 19 3 5 16 1 19 5 32 1 0 2 50)} "eval-cond" "rest" "case" "let" "let*" "process-bindings" {:upvalue-count 4 :arity 1 :constants ("render-to-dom" "nth" "not" "spread?" "dom-append") :bytecode (20 0 0 18 0 16 0 52 1 0 2 18 1 18 2 48 3 17 1 16 1 52 3 0 1 52 2 0 1 33 12 0 20 4 0 18 3 16 1 49 2 32 1 0 2 50)} "letrec" "slice" "env-extend" {:upvalue-count 1 :arity 1 :constants ("=" "type-of" "first" "symbol" "symbol-name" "str" "env-bind!") :bytecode (16 0 52 2 0 1 52 1 0 1 1 3 0 52 0 0 2 33 14 0 20 4 0 16 0 52 2 0 1 48 1 32 10 0 16 0 52 2 0 1 52 5 0 1 17 1 20 6 0 18 0 16 1 2 49 3 50)} {:upvalue-count 1 :arity 1 :constants ("=" "type-of" "first" "symbol" "symbol-name" "str" "env-set!" "trampoline" "eval-expr" "nth" 1) :bytecode (16 0 52 2 0 1 52 1 0 1 1 3 0 52 0 0 2 33 14 0 20 4 0 16 0 52 2 0 1 48 1 32 10 0 16 0 52 2 0 1 52 5 0 1 17 1 20 6 0 18 0 16 1 20 7 0 20 8 0 16 0 1 10 0 52 9 0 2 18 0 48 2 48 1 49 3 50)} {:upvalue-count 1 :arity 1 :constants ("trampoline" "eval-expr") :bytecode (20 0 0 20 1 0 16 0 18 0 48 2 49 1 50)} "init" "last" "begin" "do" "definition-form?" "map" "type-of" "first" "symbol" "symbol-name" "deref" "signal?" "reactive-list" {:upvalue-count 4 :arity 1 :constants ("lambda?" "render-lambda-dom" "list" "render-to-dom" "apply" "dom-append") :bytecode (18 0 52 0 0 1 33 20 0 20 1 0 18 0 16 0 52 2 0 1 18 1 18 2 48 4 32 21 0 20 3 0 18 0 16 0 52 2 0 1 52 4 0 2 18 1 18 2 48 3 17 1 20 5 0 18 3 16 1 49 2 50)} "map-indexed" "for-each-indexed" {:upvalue-count 4 :arity 2 :constants ("lambda?" "render-lambda-dom" "list" "render-to-dom" "apply" "dom-append") :bytecode (18 0 52 0 0 1 33 22 0 20 1 0 18 0 16 0 16 1 52 2 0 2 18 1 18 2 48 4 32 23 0 20 3 0 18 0 16 0 16 1 52 2 0 2 52 4 0 2 18 1 18 2 48 3 17 2 20 5 0 18 3 16 2 49 2 50)} "filter" "portal" "render-dom-portal" "error-boundary" "render-dom-error-boundary" "scope" ">=" "keyword" "keyword-name" "value" "scope-push!" {:upvalue-count 3 :arity 1 :constants ("dom-append" "render-to-dom") :bytecode (20 0 0 18 0 20 1 0 16 0 18 1 18 2 48 3 49 2 50)} "scope-pop!" "provide" "cyst" "key" "str" "next-cyst-id" "get" "*memo-cache*" "host-get" "isConnected" "dom-create-element" "div" "dom-set-attr" "data-sx-cyst" "with-island-scope" {:upvalue-count 1 :arity 1 :constants ("append!") :bytecode (20 0 0 18 0 16 0 49 2 50)} {:upvalue-count 3 :arity 0 :constants ("create-fragment" "for-each" {:upvalue-count 3 :arity 1 :constants ("dom-append" "render-to-dom") :bytecode (20 0 0 18 0 20 1 0 16 0 18 1 18 2 48 3 49 2 50)}) :bytecode (20 0 0 48 0 17 0 51 2 0 1 0 0 0 0 1 18 2 52 1 0 2 5 16 0 50)} "dom-set-data" "sx-disposers" "dict-set!") :bytecode (16 0 1 1 0 52 0 0 2 33 226 0 20 2 0 48 0 33 124 0 20 3 0 1 4 0 48 1 17 4 52 5 0 0 17 5 2 17 6 20 6 0 51 7 0 1 1 1 2 1 3 1 4 1 5 1 6 48 1 5 16 6 52 8 0 1 33 5 0 16 6 32 67 0 20 9 0 48 0 17 7 20 10 0 16 7 16 4 48 2 5 16 6 33 41 0 20 11 0 16 6 48 1 33 10 0 20 12 0 16 6 48 1 32 6 0 16 6 52 5 0 1 17 5 5 20 10 0 16 7 16 6 48 2 32 1 0 2 5 16 7 32 91 0 20 13 0 20 14 0 16 1 1 16 0 52 15 0 2 16 2 48 2 48 1 17 4 16 4 33 21 0 20 17 0 16 1 1 18 0 52 15 0 2 16 2 16 3 49 3 32 42 0 16 1 52 20 0 1 1 21 0 52 19 0 2 33 21 0 20 17 0 16 1 1 21 0 52 15 0 2 16 2 16 3 49 3 32 5 0 20 9 0 49 0 32 217 7 16 0 1 22 0 52 0 0 2 33 180 0 20 2 0 48 0 33 95 0 20 3 0 1 23 0 48 1 17 4 52 5 0 0 17 5 2 17 6 20 6 0 51 24 0 1 4 1 5 1 1 1 2 1 3 1 6 48 1 5 16 6 52 8 0 1 33 5 0 16 6 32 38 0 20 9 0 48 0 17 7 20 10 0 16 7 16 4 48 2 5 16 6 33 12 0 20 10 0 16 7 16 6 48 2 32 1 0 2 5 16 7 32 74 0 20 13 0 20 14 0 16 1 1 16 0 52 15 0 2 16 2 48 2 48 1 52 25 0 1 33 8 0 20 9 0 49 0 32 38 0 20 9 0 48 0 17 4 51 27 0 1 4 1 1 1 2 1 3 1 18 0 16 1 52 20 0 1 52 28 0 2 52 26 0 2 5 16 4 32 25 7 16 0 1 29 0 52 0 0 2 33 145 0 20 2 0 48 0 33 95 0 20 3 0 1 30 0 48 1 17 4 52 5 0 0 17 5 2 17 6 20 6 0 51 31 0 1 1 1 2 1 4 1 5 1 3 1 6 48 1 5 16 6 52 8 0 1 33 5 0 16 6 32 38 0 20 9 0 48 0 17 7 20 10 0 16 7 16 4 48 2 5 16 6 33 12 0 20 10 0 16 7 16 6 48 2 32 1 0 2 5 16 7 32 39 0 20 32 0 16 1 52 33 0 1 16 2 48 2 17 4 16 4 33 14 0 20 17 0 16 4 16 2 16 3 49 3 32 5 0 20 9 0 49 0 32 124 6 16 0 1 34 0 52 0 0 2 33 26 0 20 17 0 20 13 0 20 14 0 16 1 16 2 48 2 48 1 16 2 16 3 49 3 32 86 6 16 0 1 35 0 52 0 0 2 6 34 10 0 5 16 0 1 36 0 52 0 0 2 33 96 0 20 37 0 16 1 1 16 0 52 15 0 2 16 2 48 2 17 4 16 1 52 20 0 1 1 21 0 52 0 0 2 33 21 0 20 17 0 16 1 1 18 0 52 15 0 2 16 4 16 3 49 3 32 38 0 20 9 0 48 0 17 5 51 38 0 1 1 1 4 1 3 1 5 1 18 0 16 1 52 20 0 1 52 28 0 2 52 26 0 2 5 16 5 32 220 5 16 0 1 39 0 52 0 0 2 33 109 0 16 1 1 16 0 52 15 0 2 17 4 16 1 1 18 0 52 40 0 2 17 5 20 41 0 16 2 48 1 17 6 51 42 0 1 6 16 4 52 26 0 2 5 51 43 0 1 6 16 4 52 26 0 2 5 16 5 52 20 0 1 1 16 0 52 19 0 2 33 18 0 51 44 0 1 6 16 5 52 45 0 1 52 26 0 2 32 1 0 2 5 20 17 0 16 5 52 46 0 1 16 6 16 3 49 3 32 99 5 16 0 1 47 0 52 0 0 2 6 34 10 0 5 16 0 1 48 0 52 0 0 2 33 78 0 16 1 52 20 0 1 1 18 0 52 0 0 2 33 21 0 20 17 0 16 1 1 16 0 52 15 0 2 16 2 16 3 49 3 32 38 0 20 9 0 48 0 17 4 51 38 0 1 1 1 2 1 3 1 4 1 16 0 16 1 52 20 0 1 52 28 0 2 52 26 0 2 5 16 4 32 251 4 20 49 0 16 0 48 1 33 23 0 20 13 0 20 14 0 16 1 16 2 48 2 48 1 5 20 9 0 49 0 32 218 4 16 0 1 50 0 52 0 0 2 33 31 1 16 1 1 18 0 52 15 0 2 17 4 20 2 0 48 0 6 33 77 0 5 16 4 52 51 0 1 1 5 0 52 0 0 2 6 33 59 0 5 16 4 52 20 0 1 1 16 0 52 19 0 2 6 33 41 0 5 16 4 52 52 0 1 52 51 0 1 1 53 0 52 0 0 2 6 33 19 0 5 20 54 0 16 4 52 52 0 1 48 1 1 55 0 52 0 0 2 33 111 0 20 13 0 20 14 0 16 1 1 16 0 52 15 0 2 16 2 48 2 48 1 17 5 20 13 0 20 14 0 16 4 1 16 0 52 15 0 2 16 2 48 2 48 1 17 6 20 56 0 16 6 48 1 33 16 0 20 57 0 16 5 16 6 16 2 16 3 49 4 32 36 0 20 55 0 16 6 48 1 17 7 20 9 0 48 0 17 8 51 58 0 1 5 1 2 1 3 1 8 16 7 52 26 0 2 5 16 8 32 73 0 20 13 0 20 14 0 16 1 1 16 0 52 15 0 2 16 2 48 2 48 1 17 5 20 13 0 20 14 0 16 1 1 18 0 52 15 0 2 16 2 48 2 48 1 17 6 20 9 0 48 0 17 7 51 58 0 1 5 1 2 1 3 1 7 16 6 52 26 0 2 5 16 7 32 175 3 16 0 1 59 0 52 0 0 2 33 76 0 20 13 0 20 14 0 16 1 1 16 0 52 15 0 2 16 2 48 2 48 1 17 4 20 13 0 20 14 0 16 1 1 18 0 52 15 0 2 16 2 48 2 48 1 17 5 20 9 0 48 0 17 6 51 61 0 1 4 1 2 1 3 1 6 16 5 52 60 0 2 5 16 6 32 87 3 16 0 1 62 0 52 0 0 2 33 26 0 20 17 0 20 13 0 20 14 0 16 1 16 2 48 2 48 1 16 2 16 3 49 3 32 49 3 16 0 1 63 0 52 0 0 2 33 18 0 20 64 0 16 1 52 33 0 1 16 2 16 3 49 3 32 19 3 16 0 1 65 0 52 0 0 2 33 18 0 20 66 0 16 1 52 33 0 1 16 2 16 3 49 3 32 245 2 16 0 1 26 0 52 0 0 2 33 76 0 20 13 0 20 14 0 16 1 1 16 0 52 15 0 2 16 2 48 2 48 1 17 4 20 13 0 20 14 0 16 1 1 18 0 52 15 0 2 16 2 48 2 48 1 17 5 20 9 0 48 0 17 6 51 58 0 1 4 1 2 1 3 1 6 16 5 52 26 0 2 5 16 6 32 157 2 16 0 1 67 0 52 0 0 2 33 188 0 20 13 0 20 14 0 16 1 1 16 0 52 15 0 2 16 2 48 2 48 1 17 4 16 1 1 18 0 52 40 0 2 17 5 2 17 6 2 17 7 20 9 0 48 0 17 8 16 5 52 20 0 1 1 18 0 52 68 0 2 6 33 41 0 5 16 5 52 52 0 1 52 51 0 1 1 69 0 52 0 0 2 6 33 19 0 5 20 70 0 16 5 52 52 0 1 48 1 1 71 0 52 0 0 2 33 38 0 20 13 0 20 14 0 16 5 1 16 0 52 15 0 2 16 2 48 2 48 1 17 6 5 16 5 1 18 0 52 40 0 2 17 7 32 4 0 16 5 17 7 5 16 4 16 6 52 72 0 2 5 51 73 0 1 8 1 2 1 3 16 7 52 26 0 2 5 16 4 52 74 0 1 5 16 8 32 213 1 16 0 1 75 0 52 0 0 2 33 103 0 20 13 0 20 14 0 16 1 1 16 0 52 15 0 2 16 2 48 2 48 1 17 4 20 13 0 20 14 0 16 1 1 18 0 52 15 0 2 16 2 48 2 48 1 17 5 20 9 0 48 0 17 6 16 4 16 5 52 72 0 2 5 51 27 0 1 6 1 1 1 2 1 3 1 21 0 16 1 52 20 0 1 52 28 0 2 52 26 0 2 5 16 4 52 74 0 1 5 16 6 32 98 1 16 0 1 76 0 52 0 0 2 33 63 1 16 1 52 20 0 1 1 18 0 52 19 0 2 6 33 47 0 5 16 1 1 16 0 52 15 0 2 52 51 0 1 1 69 0 52 0 0 2 6 33 22 0 5 20 70 0 16 1 1 16 0 52 15 0 2 48 1 1 77 0 52 0 0 2 33 28 0 20 13 0 20 14 0 16 1 1 18 0 52 15 0 2 16 2 48 2 48 1 52 78 0 1 32 5 0 20 79 0 48 0 17 4 20 81 0 16 4 52 80 0 2 17 5 16 5 6 33 11 0 5 20 82 0 16 5 1 83 0 48 2 33 5 0 16 5 32 178 0 20 84 0 1 85 0 2 48 2 17 6 52 5 0 0 17 7 16 1 52 20 0 1 1 18 0 52 19 0 2 6 33 47 0 5 16 1 1 16 0 52 15 0 2 52 51 0 1 1 69 0 52 0 0 2 6 33 22 0 5 20 70 0 16 1 1 16 0 52 15 0 2 48 1 1 77 0 52 0 0 2 33 12 0 16 1 1 21 0 52 40 0 2 32 9 0 16 1 1 16 0 52 40 0 2 17 8 20 86 0 16 6 1 87 0 16 4 48 3 5 20 88 0 51 89 0 1 7 51 90 0 1 2 1 3 1 8 48 2 17 9 20 10 0 16 6 16 9 48 2 5 20 91 0 16 6 1 92 0 16 7 48 3 5 20 81 0 16 4 16 6 52 93 0 3 5 16 6 32 23 0 20 17 0 20 13 0 20 14 0 16 1 16 2 48 2 48 1 16 2 16 3 49 3 50)} "render-lambda-dom" {:upvalue-count 0 :arity 4 :constants ("env-merge" "lambda-closure" "for-each-indexed" {:upvalue-count 2 :arity 2 :constants ("env-bind!" "nth") :bytecode (20 0 0 18 0 16 1 18 1 16 0 52 1 0 2 49 3 50)} "lambda-params" "render-to-dom" "lambda-body") :bytecode (20 0 0 16 0 52 1 0 1 16 2 48 2 17 4 51 3 0 1 4 1 1 16 0 52 4 0 1 52 2 0 2 5 20 5 0 16 0 52 6 0 1 16 4 16 3 49 3 50)} "render-dom-island" {:upvalue-count 0 :arity 4 :constants ("dict" "list" "reduce" {:upvalue-count 4 :arity 2 :constants ("get" "skip" "assoc" "i" "inc" "=" "type-of" "keyword" "<" "len" "trampoline" "eval-expr" "nth" "dict-set!" "keyword-name" "append!") :bytecode (16 0 1 1 0 52 0 0 2 17 2 16 2 33 29 0 16 0 1 1 0 4 1 3 0 16 0 1 3 0 52 0 0 2 52 4 0 1 52 2 0 5 32 154 0 16 1 52 6 0 1 1 7 0 52 5 0 2 6 33 24 0 5 16 0 1 3 0 52 0 0 2 52 4 0 1 18 0 52 9 0 1 52 8 0 2 33 78 0 20 10 0 20 11 0 18 0 16 0 1 3 0 52 0 0 2 52 4 0 1 52 12 0 2 18 1 48 2 48 1 17 3 18 2 20 14 0 16 1 48 1 16 3 52 13 0 3 5 16 0 1 1 0 3 1 3 0 16 0 1 3 0 52 0 0 2 52 4 0 1 52 2 0 5 32 32 0 20 15 0 18 3 16 1 48 2 5 16 0 1 3 0 16 0 1 3 0 52 0 0 2 52 4 0 1 52 2 0 3 50)} "i" 0 "skip" "env-merge" "component-closure" "component-name" "for-each" {:upvalue-count 2 :arity 1 :constants ("env-bind!" "dict-has?" "dict-get") :bytecode (20 0 0 18 0 16 0 18 1 16 0 52 1 0 2 33 11 0 18 1 16 0 52 2 0 2 32 1 0 2 49 3 50)} "component-params" "component-has-children?" "create-fragment" {:upvalue-count 3 :arity 1 :constants ("dom-append" "render-to-dom") :bytecode (20 0 0 18 0 20 1 0 16 0 18 1 18 2 48 3 49 2 50)} "env-bind!" "children" "dom-create-element" "span" "dom-set-attr" "data-sx-island" "not" "empty-dict?" "data-sx-state" "sx-serialize" "mark-processed!" "island-hydrated" "with-island-scope" {:upvalue-count 1 :arity 1 :constants ("append!") :bytecode (20 0 0 18 0 16 0 49 2 50)} {:upvalue-count 3 :arity 0 :constants ("render-to-dom" "component-body") :bytecode (20 0 0 18 0 52 1 0 1 18 1 18 2 49 3 50)} "dom-append" "dom-set-data" "sx-disposers") :bytecode (52 0 0 0 17 4 52 1 0 0 17 5 51 3 0 1 1 1 2 1 4 1 5 1 4 0 1 5 0 1 6 0 4 52 0 0 4 16 1 52 2 0 3 5 20 7 0 16 0 52 8 0 1 16 2 48 2 17 6 16 0 52 9 0 1 17 7 51 11 0 1 6 1 4 16 0 52 12 0 1 52 10 0 2 5 16 0 52 13 0 1 33 38 0 20 14 0 48 0 17 8 51 15 0 1 8 1 2 1 3 16 5 52 10 0 2 5 20 16 0 16 6 1 17 0 16 8 48 3 32 1 0 2 5 20 18 0 1 19 0 2 48 2 17 8 52 1 0 0 17 9 20 20 0 16 8 1 21 0 16 7 48 3 5 16 4 52 23 0 1 52 22 0 1 33 20 0 20 20 0 16 8 1 24 0 20 25 0 16 4 48 1 48 3 32 1 0 2 5 20 26 0 16 8 1 27 0 48 2 5 20 28 0 51 29 0 1 9 51 30 0 1 0 1 6 1 3 48 2 17 10 20 31 0 16 8 16 10 48 2 5 20 32 0 16 8 1 33 0 16 9 48 3 5 16 8 50)} "render-dom-lake" {:upvalue-count 0 :arity 3 :constants ("div" "list" "reduce" {:upvalue-count 5 :arity 2 :constants ("get" "skip" "assoc" "i" "inc" "=" "type-of" "keyword" "<" "len" "keyword-name" "trampoline" "eval-expr" "nth" "id" "tag" "append!") :bytecode (16 0 1 1 0 52 0 0 2 17 2 16 2 33 29 0 16 0 1 1 0 4 1 3 0 16 0 1 3 0 52 0 0 2 52 4 0 1 52 2 0 5 32 187 0 16 1 52 6 0 1 1 7 0 52 5 0 2 6 33 24 0 5 16 0 1 3 0 52 0 0 2 52 4 0 1 18 0 52 9 0 1 52 8 0 2 33 111 0 20 10 0 16 1 48 1 17 3 20 11 0 20 12 0 18 0 16 0 1 3 0 52 0 0 2 52 4 0 1 52 13 0 2 18 1 48 2 48 1 17 4 16 3 1 14 0 52 5 0 2 33 7 0 16 4 19 2 32 20 0 16 3 1 15 0 52 5 0 2 33 7 0 16 4 19 3 32 1 0 2 5 16 0 1 1 0 3 1 3 0 16 0 1 3 0 52 0 0 2 52 4 0 1 52 2 0 5 32 32 0 20 16 0 18 4 16 1 48 2 5 16 0 1 3 0 16 0 1 3 0 52 0 0 2 52 4 0 1 52 2 0 3 50)} "dict" "i" 0 "skip" "dom-create-element" "dom-set-attr" "data-sx-lake" "" "for-each" {:upvalue-count 3 :arity 1 :constants ("dom-append" "render-to-dom") :bytecode (20 0 0 18 0 20 1 0 16 0 18 1 18 2 48 3 49 2 50)}) :bytecode (2 17 3 1 0 0 17 4 52 1 0 0 17 5 51 3 0 1 0 1 1 1 3 1 4 1 5 1 5 0 1 6 0 1 7 0 4 52 4 0 4 16 0 52 2 0 3 5 20 8 0 16 4 2 48 2 17 6 20 9 0 16 6 1 10 0 16 3 6 34 4 0 5 1 11 0 48 3 5 51 13 0 1 6 1 1 1 2 16 5 52 12 0 2 5 16 6 50)} "render-dom-marsh" {:upvalue-count 0 :arity 3 :constants ("div" "list" "reduce" {:upvalue-count 6 :arity 2 :constants ("get" "skip" "assoc" "i" "inc" "=" "type-of" "keyword" "<" "len" "keyword-name" "trampoline" "eval-expr" "nth" "id" "tag" "transform" "append!") :bytecode (16 0 1 1 0 52 0 0 2 17 2 16 2 33 29 0 16 0 1 1 0 4 1 3 0 16 0 1 3 0 52 0 0 2 52 4 0 1 52 2 0 5 32 206 0 16 1 52 6 0 1 1 7 0 52 5 0 2 6 33 24 0 5 16 0 1 3 0 52 0 0 2 52 4 0 1 18 0 52 9 0 1 52 8 0 2 33 130 0 20 10 0 16 1 48 1 17 3 20 11 0 20 12 0 18 0 16 0 1 3 0 52 0 0 2 52 4 0 1 52 13 0 2 18 1 48 2 48 1 17 4 16 3 1 14 0 52 5 0 2 33 7 0 16 4 19 2 32 39 0 16 3 1 15 0 52 5 0 2 33 7 0 16 4 19 3 32 20 0 16 3 1 16 0 52 5 0 2 33 7 0 16 4 19 4 32 1 0 2 5 16 0 1 1 0 3 1 3 0 16 0 1 3 0 52 0 0 2 52 4 0 1 52 2 0 5 32 32 0 20 17 0 18 5 16 1 48 2 5 16 0 1 3 0 16 0 1 3 0 52 0 0 2 52 4 0 1 52 2 0 3 50)} "dict" "i" 0 "skip" "dom-create-element" "dom-set-attr" "data-sx-marsh" "" "dom-set-data" "sx-marsh-transform" "sx-marsh-env" "for-each" {:upvalue-count 3 :arity 1 :constants ("dom-append" "render-to-dom") :bytecode (20 0 0 18 0 20 1 0 16 0 18 1 18 2 48 3 49 2 50)}) :bytecode (2 17 3 1 0 0 17 4 2 17 5 52 1 0 0 17 6 51 3 0 1 0 1 1 1 3 1 4 1 5 1 6 1 5 0 1 6 0 1 7 0 4 52 4 0 4 16 0 52 2 0 3 5 20 8 0 16 4 2 48 2 17 7 20 9 0 16 7 1 10 0 16 3 6 34 4 0 5 1 11 0 48 3 5 16 5 33 15 0 20 12 0 16 7 1 13 0 16 5 48 3 32 1 0 2 5 20 12 0 16 7 1 14 0 16 1 48 3 5 51 16 0 1 7 1 1 1 2 16 6 52 15 0 2 5 16 7 50)} "reactive-text" {:upvalue-count 0 :arity 1 :constants ("create-text-node" "str" "deref" "effect" {:upvalue-count 2 :arity 0 :constants ("dom-set-text-content" "str" "deref") :bytecode (20 0 0 18 0 20 2 0 18 1 48 1 52 1 0 1 49 2 50)}) :bytecode (20 0 0 20 2 0 16 0 48 1 52 1 0 1 48 1 17 1 20 3 0 51 4 0 1 1 1 0 48 1 5 16 1 50)} "reactive-attr" {:upvalue-count 0 :arity 3 :constants ("dom-get-attr" "data-sx-reactive-attrs" "" "empty?" "str" "," "dom-set-attr" "effect" {:upvalue-count 3 :arity 0 :constants ("signal?" "deref" "nil?" "=" "dom-remove-attr" "dom-set-attr" "" "str") :bytecode (18 0 48 0 17 0 20 0 0 16 0 48 1 33 10 0 20 1 0 16 0 48 1 32 2 0 16 0 17 1 16 1 52 2 0 1 6 34 8 0 5 16 1 4 52 3 0 2 33 12 0 20 4 0 18 1 18 2 49 2 32 40 0 16 1 3 52 3 0 2 33 15 0 20 5 0 18 1 18 2 1 6 0 49 3 32 15 0 20 5 0 18 1 18 2 16 1 52 7 0 1 49 3 50)}) :bytecode (20 0 0 16 0 1 1 0 48 2 6 34 4 0 5 1 2 0 17 3 16 3 52 3 0 1 33 5 0 16 1 32 11 0 16 3 1 5 0 16 1 52 4 0 3 17 4 20 6 0 16 0 1 1 0 16 4 48 3 5 20 7 0 51 8 0 1 2 1 0 1 1 49 1 50)} "reactive-spread" {:upvalue-count 0 :arity 2 :constants ("list" "dom-get-attr" "data-sx-reactive-attrs" "" "dom-set-attr" "empty?" "_spread" "str" ",_spread" "effect" {:upvalue-count 4 :arity 0 :constants ("not" "empty?" "dom-get-attr" "class" "" "filter" {:upvalue-count 0 :arity 1 :constants ("not" "=" "") :bytecode (16 0 1 2 0 52 1 0 2 52 0 0 1 50)} "split" " " {:upvalue-count 1 :arity 1 :constants ("not" "some" {:upvalue-count 1 :arity 1 :constants ("=") :bytecode (16 0 18 0 52 0 0 2 50)}) :bytecode (51 2 0 1 0 18 0 52 1 0 2 52 0 0 1 50)} "dom-remove-attr" "dom-set-attr" "join" "for-each" {:upvalue-count 1 :arity 1 :constants ("dom-remove-attr") :bytecode (20 0 0 18 0 16 0 49 2 50)} "spread?" "spread-attrs" "dict-get" {:upvalue-count 0 :arity 1 :constants ("not" "=" "class") :bytecode (16 0 1 2 0 52 1 0 2 52 0 0 1 50)} "keys" "=" "str" {:upvalue-count 2 :arity 1 :constants ("dom-set-attr" "str" "dict-get") :bytecode (20 0 0 18 0 16 0 18 1 16 0 52 2 0 2 52 1 0 1 49 3 50)} "run-post-render-hooks" "list") :bytecode (18 0 52 1 0 1 52 0 0 1 33 95 0 20 2 0 18 1 1 3 0 48 2 6 34 4 0 5 1 4 0 17 0 51 6 0 16 0 1 8 0 52 7 0 2 52 5 0 2 17 1 51 9 0 0 0 16 1 52 5 0 2 17 2 16 2 52 1 0 1 33 13 0 20 10 0 18 1 1 3 0 48 2 32 19 0 20 11 0 18 1 1 3 0 1 8 0 16 2 52 12 0 2 48 3 32 1 0 2 5 51 14 0 0 1 18 2 52 13 0 2 5 18 3 48 0 17 0 16 0 52 15 0 1 33 179 0 16 0 52 16 0 1 17 1 16 1 1 3 0 52 17 0 2 6 34 4 0 5 1 4 0 17 2 51 6 0 16 2 1 8 0 52 7 0 2 52 5 0 2 17 3 51 18 0 16 1 52 19 0 1 52 5 0 2 17 4 16 3 19 0 5 16 4 19 2 5 16 3 52 1 0 1 52 0 0 1 33 72 0 20 2 0 18 1 1 3 0 48 2 6 34 4 0 5 1 4 0 17 5 20 11 0 18 1 1 3 0 16 5 6 33 14 0 5 16 5 1 4 0 52 20 0 2 52 0 0 1 33 14 0 16 5 1 8 0 16 2 52 21 0 3 32 2 0 16 2 48 3 32 1 0 2 5 51 22 0 0 1 1 1 16 4 52 13 0 2 5 20 23 0 49 0 32 13 0 52 24 0 0 19 0 5 52 24 0 0 19 2 50)}) :bytecode (52 0 0 0 17 2 52 0 0 0 17 3 20 1 0 16 0 1 2 0 48 2 6 34 4 0 5 1 3 0 17 4 20 4 0 16 0 1 2 0 16 4 52 5 0 1 33 6 0 1 6 0 32 9 0 16 4 1 8 0 52 7 0 2 48 3 5 20 9 0 51 10 0 1 2 1 0 1 3 1 1 49 1 50)} "reactive-fragment" {:upvalue-count 0 :arity 4 :constants ("create-comment" "island-fragment" "list" "effect" {:upvalue-count 4 :arity 0 :constants ("for-each" {:upvalue-count 0 :arity 1 :constants ("dom-remove") :bytecode (20 0 0 16 0 49 1 50)} "list" "dom-child-nodes" "dom-insert-after") :bytecode (51 1 0 18 0 52 0 0 2 5 52 2 0 0 19 0 5 18 1 48 0 33 28 0 18 2 48 0 17 0 20 3 0 16 0 48 1 19 0 5 20 4 0 18 3 16 0 49 2 32 1 0 2 50)}) :bytecode (20 0 0 1 1 0 48 1 17 4 52 2 0 0 17 5 20 3 0 51 4 0 1 5 1 0 1 1 1 4 48 1 5 16 4 50)} "render-list-item" {:upvalue-count 0 :arity 4 :constants ("lambda?" "render-lambda-dom" "list" "render-to-dom" "apply") :bytecode (16 0 52 0 0 1 33 20 0 20 1 0 16 0 16 1 52 2 0 1 16 2 16 3 49 4 32 21 0 20 3 0 16 0 16 1 52 2 0 1 52 4 0 2 16 2 16 3 49 3 50)} "extract-key" {:upvalue-count 0 :arity 2 :constants ("dom-get-attr" "key" "dom-remove-attr" "dom-get-data" "str" "__idx_") :bytecode (20 0 0 16 0 1 1 0 48 2 17 2 16 2 33 16 0 20 2 0 16 0 1 1 0 48 2 5 16 2 32 35 0 20 3 0 16 0 1 1 0 48 2 17 3 16 3 33 9 0 16 3 52 4 0 1 32 9 0 1 5 0 16 1 52 4 0 2 50)} "reactive-list" {:upvalue-count 0 :arity 4 :constants ("create-fragment" "create-comment" "island-list" "dict" "list" "dom-append" "effect" {:upvalue-count 8 :arity 0 :constants ("deref" "dom-parent" "dict" "list" "for-each-indexed" {:upvalue-count 7 :arity 2 :constants ("render-list-item" "extract-key" "not" "starts-with?" "__idx_" "dict-has?" "dict-set!" "dict-get" "append!") :bytecode (20 0 0 18 0 16 1 18 1 18 2 48 4 17 2 20 1 0 16 2 16 0 48 2 17 3 18 3 52 2 0 1 6 33 14 0 5 16 3 1 4 0 52 3 0 2 52 2 0 1 33 6 0 3 19 3 32 1 0 2 5 18 4 16 3 52 5 0 2 33 19 0 18 5 16 3 18 4 16 3 52 7 0 2 52 6 0 3 32 10 0 18 5 16 3 16 2 52 6 0 3 5 20 8 0 18 6 16 3 49 2 50)} "not" "dom-remove-children-after" "create-fragment" "for-each" {:upvalue-count 2 :arity 1 :constants ("dom-append" "dict-get") :bytecode (20 0 0 18 0 18 1 16 0 52 1 0 2 49 2 50)} "dom-insert-after" {:upvalue-count 2 :arity 1 :constants ("not" "dict-has?" "dom-remove" "dict-get") :bytecode (18 0 16 0 52 1 0 2 52 0 0 1 33 16 0 20 2 0 18 1 16 0 52 3 0 2 49 1 32 1 0 2 50)} {:upvalue-count 2 :arity 1 :constants ("dict-get" "dom-next-sibling" "not" "identical?" "dom-insert-after") :bytecode (18 0 16 0 52 0 0 2 17 1 20 1 0 18 1 48 1 17 2 16 1 16 2 52 3 0 2 52 2 0 1 33 12 0 20 4 0 18 1 16 1 48 2 32 1 0 2 5 16 1 19 1 50)} {:upvalue-count 6 :arity 2 :constants ("render-list-item" "extract-key" "dict-set!" "append!" "dom-append") :bytecode (20 0 0 18 0 16 1 18 1 18 2 48 4 17 2 20 1 0 16 2 16 0 48 2 17 3 18 3 16 3 16 2 52 2 0 3 5 20 3 0 18 4 16 3 48 2 5 20 4 0 18 5 16 2 49 2 50)}) :bytecode (20 0 0 18 0 48 1 17 0 20 1 0 18 1 48 1 33 133 0 52 2 0 0 17 1 52 3 0 0 17 2 4 17 3 51 5 0 0 2 0 3 0 4 1 3 0 5 1 1 1 2 16 0 52 4 0 2 5 16 3 52 6 0 1 33 41 0 20 7 0 18 1 48 1 5 20 8 0 48 0 17 4 51 10 0 1 4 1 1 16 2 52 9 0 2 5 20 11 0 18 1 16 4 48 2 32 31 0 51 12 0 1 1 0 5 18 6 52 9 0 2 5 18 1 17 4 51 13 0 1 1 1 4 16 2 52 9 0 2 5 16 1 19 5 5 16 2 19 6 32 21 0 51 14 0 0 2 0 3 0 4 0 5 0 6 0 7 16 0 52 4 0 2 50)}) :bytecode (20 0 0 48 0 17 4 20 1 0 1 2 0 48 1 17 5 52 3 0 0 17 6 52 4 0 0 17 7 20 5 0 16 4 16 5 48 2 5 20 6 0 51 7 0 1 1 1 5 1 0 1 2 1 3 1 6 1 7 1 4 48 1 5 16 4 50)} "bind-input" {:upvalue-count 0 :arity 2 :constants ("lower" "dom-get-attr" "type" "" "=" "checkbox" "radio" "dom-set-prop" "checked" "deref" "value" "str" "effect" {:upvalue-count 3 :arity 0 :constants ("dom-set-prop" "checked" "deref" "str" "!=" "dom-get-prop" "value") :bytecode (18 0 33 20 0 20 0 0 18 1 1 1 0 20 2 0 18 2 48 1 49 3 32 48 0 20 2 0 18 2 48 1 52 3 0 1 17 0 20 5 0 18 1 1 6 0 48 2 16 0 52 4 0 2 33 15 0 20 0 0 18 1 1 6 0 16 0 49 3 32 1 0 2 50)} "dom-on" "change" "input" {:upvalue-count 3 :arity 1 :constants ("reset!" "dom-get-prop" "checked" "value") :bytecode (18 0 33 20 0 20 0 0 18 1 20 1 0 18 2 1 2 0 48 2 49 2 32 17 0 20 0 0 18 1 20 1 0 18 2 1 3 0 48 2 49 2 50)}) :bytecode (20 1 0 16 0 1 2 0 48 2 6 34 4 0 5 1 3 0 52 0 0 1 17 2 16 2 1 5 0 52 4 0 2 6 34 10 0 5 16 2 1 6 0 52 4 0 2 17 3 16 3 33 20 0 20 7 0 16 0 1 8 0 20 9 0 16 1 48 1 48 3 32 21 0 20 7 0 16 0 1 10 0 20 9 0 16 1 48 1 52 11 0 1 48 3 5 20 12 0 51 13 0 1 3 1 0 1 1 48 1 5 20 14 0 16 0 16 3 33 6 0 1 15 0 32 3 0 1 16 0 51 17 0 1 3 1 1 1 0 49 3 50)} "*use-cek-reactive*" "enable-cek-reactive!" {:upvalue-count 0 :arity 0 :constants ("*use-cek-reactive*") :bytecode (3 21 0 0 50)} "cek-reactive-text" {:upvalue-count 0 :arity 2 :constants ("create-text-node" "" {:upvalue-count 1 :arity 1 :constants ("dom-set-text-content" "str") :bytecode (20 0 0 18 0 16 0 52 1 0 1 49 2 50)} "cek-run" "make-cek-state" "list" "make-reactive-reset-frame" "dom-set-text-content" "str") :bytecode (20 0 0 1 1 0 48 1 17 2 51 2 0 1 2 17 3 20 3 0 20 4 0 16 0 16 1 20 6 0 16 1 16 3 3 48 3 52 5 0 1 48 3 48 1 17 4 20 7 0 16 2 16 4 52 8 0 1 48 2 5 16 2 50)} "cek-reactive-attr" {:upvalue-count 0 :arity 4 :constants ({:upvalue-count 2 :arity 1 :constants ("nil?" "=" "dom-remove-attr" "dom-set-attr" "" "str") :bytecode (16 0 52 0 0 1 6 34 8 0 5 16 0 4 52 1 0 2 33 12 0 20 2 0 18 0 18 1 49 2 32 40 0 16 0 3 52 1 0 2 33 15 0 20 3 0 18 0 18 1 1 4 0 49 3 32 15 0 20 3 0 18 0 18 1 16 0 52 5 0 1 49 3 50)} "dom-get-attr" "data-sx-reactive-attrs" "" "empty?" "str" "," "dom-set-attr" "cek-run" "make-cek-state" "list" "make-reactive-reset-frame" "cek-call") :bytecode (51 0 0 1 0 1 1 17 4 20 1 0 16 0 1 2 0 48 2 6 34 4 0 5 1 3 0 17 5 16 5 52 4 0 1 33 5 0 16 1 32 11 0 16 5 1 6 0 16 1 52 5 0 3 17 6 20 7 0 16 0 1 2 0 16 6 48 3 5 20 8 0 20 9 0 16 2 16 3 20 11 0 16 3 16 4 3 48 3 52 10 0 1 48 3 48 1 17 5 20 12 0 16 4 16 5 52 10 0 1 49 2 50)} "render-dom-portal" {:upvalue-count 0 :arity 3 :constants ("trampoline" "eval-expr" "first" "dom-query" "dom-ensure-element" "not" "create-comment" "str" "portal: " " (not found)" "create-fragment" "for-each" {:upvalue-count 3 :arity 1 :constants ("dom-append" "render-to-dom") :bytecode (20 0 0 18 0 20 1 0 16 0 18 1 18 2 48 3 49 2 50)} "rest" "dom-child-nodes" "dom-append" "register-in-scope" {:upvalue-count 1 :arity 0 :constants ("for-each" {:upvalue-count 0 :arity 1 :constants ("dom-remove") :bytecode (20 0 0 16 0 49 1 50)}) :bytecode (51 1 0 18 0 52 0 0 2 50)}) :bytecode (20 0 0 20 1 0 16 0 52 2 0 1 16 1 48 2 48 1 17 3 20 3 0 16 3 48 1 6 34 8 0 5 20 4 0 16 3 48 1 17 4 16 4 52 5 0 1 33 20 0 20 6 0 1 8 0 16 3 1 9 0 52 7 0 3 49 1 32 75 0 20 6 0 1 8 0 16 3 52 7 0 2 48 1 17 5 20 10 0 48 0 17 6 51 12 0 1 6 1 1 1 2 16 0 52 13 0 1 52 11 0 2 5 20 14 0 16 6 48 1 17 7 20 15 0 16 4 16 6 48 2 5 20 16 0 51 17 0 1 7 48 1 5 16 5 50)} "render-dom-error-boundary" {:upvalue-count 0 :arity 3 :constants ("first" "rest" "dom-create-element" "div" "signal" 0 "dom-set-attr" "data-sx-boundary" "true" "effect" {:upvalue-count 6 :arity 0 :constants ("deref" "dom-set-prop" "innerHTML" "" "scope-push!" "sx-island-scope" "try-catch" {:upvalue-count 4 :arity 0 :constants ("create-fragment" "for-each" {:upvalue-count 3 :arity 1 :constants ("dom-append" "render-to-dom") :bytecode (20 0 0 18 0 20 1 0 16 0 18 1 18 2 48 3 49 2 50)} "dom-append" "scope-pop!" "sx-island-scope") :bytecode (20 0 0 48 0 17 0 51 2 0 1 0 0 0 0 1 18 2 52 1 0 2 5 20 3 0 18 3 16 0 48 2 5 1 5 0 52 4 0 1 50)} {:upvalue-count 5 :arity 1 :constants ("scope-pop!" "sx-island-scope" "trampoline" "eval-expr" {:upvalue-count 1 :arity 0 :constants ("swap!" {:upvalue-count 0 :arity 1 :constants ("+" 1) :bytecode (16 0 1 1 0 52 0 0 2 50)}) :bytecode (20 0 0 18 0 51 1 0 49 2 50)} "lambda?" "render-lambda-dom" "list" "render-to-dom" "apply" "dom-append") :bytecode (1 1 0 52 0 0 1 5 20 2 0 20 3 0 18 0 18 1 48 2 48 1 17 1 51 4 0 0 2 17 2 16 1 52 5 0 1 33 22 0 20 6 0 16 1 16 0 16 2 52 7 0 2 18 1 18 3 48 4 32 23 0 20 8 0 16 1 16 0 16 2 52 7 0 2 52 9 0 2 18 1 18 3 48 3 17 3 20 10 0 18 4 16 3 49 2 50)}) :bytecode (20 0 0 18 0 48 1 5 20 1 0 18 1 1 2 0 1 3 0 48 3 5 1 5 0 2 52 4 0 2 5 20 6 0 51 7 0 0 2 0 3 0 4 0 1 51 8 0 0 5 0 2 0 0 0 3 0 1 49 2 50)}) :bytecode (16 0 52 0 0 1 17 3 16 0 52 1 0 1 17 4 20 2 0 1 3 0 2 48 2 17 5 20 4 0 1 5 0 48 1 17 6 20 6 0 16 5 1 7 0 1 8 0 48 3 5 20 9 0 51 10 0 1 6 1 5 1 1 1 2 1 4 1 3 48 1 5 16 5 50)}) :bytecode (1 1 0 128 0 0 5 1 3 0 128 2 0 5 51 5 0 128 4 0 5 52 7 0 0 128 6 0 5 1 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 1 32 0 1 33 0 1 34 0 1 35 0 1 36 0 1 37 0 1 38 0 1 39 0 1 40 0 1 41 0 1 42 0 1 43 0 1 44 0 1 45 0 1 46 0 1 47 0 1 48 0 1 49 0 1 50 0 1 51 0 1 52 0 1 53 0 1 54 0 52 31 0 23 128 30 0 5 51 56 0 128 55 0 5 51 58 0 128 57 0 5 51 60 0 128 59 0 5 51 62 0 128 61 0 5 51 64 0 128 63 0 5 51 66 0 128 65 0 5 51 68 0 128 67 0 5 51 70 0 128 69 0 5 51 72 0 128 71 0 5 51 74 0 128 73 0 5 51 76 0 128 75 0 5 51 78 0 128 77 0 5 51 80 0 128 79 0 5 51 82 0 128 81 0 5 3 128 83 0 5 51 85 0 128 84 0 5 51 87 0 128 86 0 5 51 89 0 128 88 0 5 51 91 0 128 90 0 5 51 93 0 128 92 0 50))) + :constants ("SVG_NS" "http://www.w3.org/2000/svg" "MATH_NS" "http://www.w3.org/1998/Math/MathML" "island-scope?" {:upvalue-count 0 :arity 0 :constants ("not" "nil?" "scope-peek" "sx-island-scope") :bytecode (1 3 0 52 2 0 1 52 1 0 1 52 0 0 1 50)} "*memo-cache*" "dict" "*cyst-counter*" 0 "next-cyst-id" {:upvalue-count 0 :arity 0 :constants ("+" "*cyst-counter*" 1 "str" "sx-cyst-") :bytecode (20 1 0 1 2 0 52 0 0 2 21 1 0 5 1 4 0 20 1 0 52 3 0 2 50)} "contains-deref?" {:upvalue-count 0 :arity 1 :constants ("not" "list?" "empty?" "=" "type-of" "first" "symbol" "symbol-name" "deref" "some" "contains-deref?") :bytecode (16 0 52 1 0 1 52 0 0 1 33 4 0 4 32 69 0 16 0 52 2 0 1 33 4 0 4 32 56 0 16 0 52 5 0 1 52 4 0 1 1 6 0 52 3 0 2 6 33 19 0 5 20 7 0 16 0 52 5 0 1 48 1 1 8 0 52 3 0 2 33 4 0 3 32 9 0 20 10 0 16 0 52 9 0 2 50)} "dom-on" {:upvalue-count 0 :arity 3 :constants ("dom-listen" "lambda?" "=" 0 "len" "lambda-params" {:upvalue-count 1 :arity 1 :constants ("trampoline" "call-lambda" "list" "run-post-render-hooks") :bytecode (20 0 0 20 1 0 18 0 52 2 0 0 48 2 48 1 5 20 3 0 49 0 50)} {:upvalue-count 1 :arity 1 :constants ("trampoline" "call-lambda" "list" "run-post-render-hooks") :bytecode (20 0 0 20 1 0 18 0 16 0 52 2 0 1 48 2 48 1 5 20 3 0 49 0 50)}) :bytecode (20 0 0 16 0 16 1 16 2 52 1 0 1 33 36 0 1 3 0 16 2 52 5 0 1 52 4 0 1 52 2 0 2 33 8 0 51 6 0 1 2 32 5 0 51 7 0 1 2 32 2 0 16 2 49 3 50)} "render-to-dom" {:upvalue-count 0 :arity 3 :constants ("set-render-active!" "type-of" "nil" "=" "create-fragment" "boolean" "raw-html" "dom-parse-html" "raw-html-content" "string" "create-text-node" "number" "str" "symbol" "render-to-dom" "trampoline" "eval-expr" "keyword" "keyword-name" "dom-node" "spread" "not" "island-scope?" "scope-emit!" "element-attrs" "spread-attrs" "dict" "has-key?" "__host_handle" "list" "empty?" "render-dom-list" "signal?" "reactive-text" "deref") :bytecode (20 0 0 3 48 1 5 16 0 52 1 0 1 6 1 2 0 52 3 0 2 33 9 0 5 20 4 0 49 0 32 106 1 6 1 5 0 52 3 0 2 33 9 0 5 20 4 0 49 0 32 86 1 6 1 6 0 52 3 0 2 33 15 0 5 20 7 0 16 0 52 8 0 1 49 1 32 60 1 6 1 9 0 52 3 0 2 33 11 0 5 20 10 0 16 0 49 1 32 38 1 6 1 11 0 52 3 0 2 33 15 0 5 20 10 0 16 0 52 12 0 1 49 1 32 12 1 6 1 13 0 52 3 0 2 33 27 0 5 20 14 0 20 15 0 20 16 0 16 0 16 1 48 2 48 1 16 1 16 2 49 3 32 230 0 6 1 17 0 52 3 0 2 33 16 0 5 20 10 0 20 18 0 16 0 48 1 49 1 32 203 0 6 1 19 0 52 3 0 2 33 6 0 5 16 0 32 186 0 6 1 20 0 52 3 0 2 33 36 0 5 20 22 0 48 0 52 21 0 1 33 16 0 1 24 0 16 0 52 25 0 1 52 23 0 2 32 1 0 2 5 16 0 32 139 0 6 1 26 0 52 3 0 2 33 26 0 5 16 0 1 28 0 52 27 0 2 33 5 0 16 0 32 5 0 20 4 0 49 0 32 102 0 6 1 29 0 52 3 0 2 33 32 0 5 16 0 52 30 0 1 33 8 0 20 4 0 49 0 32 11 0 20 31 0 16 0 16 1 16 2 49 3 32 59 0 5 20 32 0 16 0 48 1 33 37 0 20 22 0 48 0 33 10 0 20 33 0 16 0 49 1 32 16 0 20 10 0 20 34 0 16 0 48 1 52 12 0 1 49 1 32 11 0 20 10 0 16 0 52 12 0 1 49 1 50)} "render-dom-list" {:upvalue-count 0 :arity 3 :constants ("first" "=" "type-of" "symbol" "symbol-name" "rest" "raw!" "render-dom-raw" "<>" "render-dom-fragment" "lake" "render-dom-lake" "marsh" "render-dom-marsh" "starts-with?" "html:" "render-dom-element" "slice" 5 "render-dom-form?" "contains?" "HTML_TAGS" ">" "len" 0 "keyword" "dispatch-render-form" "env-has?" "macro?" "env-get" "render-to-dom" "expand-macro" "~" "island?" "scope-peek" "sx-render-markers" "dom-create-element" "span" "dict" "reduce" {:upvalue-count 3 :arity 2 :constants ("get" "skip" "assoc" "i" "inc" "=" "type-of" "keyword" "<" "len" "keyword-name" "trampoline" "eval-expr" "nth" "dict-set!") :bytecode (16 0 1 1 0 52 0 0 2 17 2 16 2 33 29 0 16 0 1 1 0 4 1 3 0 16 0 1 3 0 52 0 0 2 52 4 0 1 52 2 0 5 32 148 0 16 1 52 6 0 1 1 7 0 52 5 0 2 6 33 24 0 5 16 0 1 3 0 52 0 0 2 52 4 0 1 18 0 52 9 0 1 52 8 0 2 33 82 0 20 10 0 16 1 48 1 17 3 20 11 0 20 12 0 18 0 16 0 1 3 0 52 0 0 2 52 4 0 1 52 13 0 2 18 1 48 2 48 1 17 4 18 2 16 3 16 4 52 14 0 3 5 16 0 1 1 0 3 1 3 0 16 0 1 3 0 52 0 0 2 52 4 0 1 52 2 0 5 32 22 0 16 0 1 3 0 16 0 1 3 0 52 0 0 2 52 4 0 1 52 2 0 3 50)} "i" "skip" "dom-set-attr" "data-sx-island" "component-name" "not" "empty-dict?" "data-sx-state" "sx-serialize" "render-dom-island" "component?" "render-dom-component" "render-dom-unknown-component" "index-of" "-" "deref" "island-scope?" "trampoline" "eval-expr" "signal?" "reactive-text" "create-text-node" "str" "contains-deref?" "computed" {:upvalue-count 2 :arity 0 :constants ("trampoline" "eval-expr") :bytecode (20 0 0 20 1 0 18 0 18 1 48 2 49 1 50)} "lambda?" "list" "create-fragment" "for-each" {:upvalue-count 3 :arity 1 :constants ("render-to-dom" "not" "spread?" "dom-append") :bytecode (20 0 0 16 0 18 0 18 1 48 3 17 1 16 1 52 2 0 1 52 1 0 1 33 12 0 20 3 0 18 2 16 1 49 2 32 1 0 2 50)}) :bytecode (16 0 52 0 0 1 17 3 16 3 52 2 0 1 1 3 0 52 1 0 2 33 68 3 20 4 0 16 3 48 1 17 4 16 0 52 5 0 1 17 5 16 4 1 6 0 52 1 0 2 33 12 0 20 7 0 16 5 16 1 49 2 32 24 3 16 4 1 8 0 52 1 0 2 33 14 0 20 9 0 16 5 16 1 16 2 49 3 32 254 2 16 4 1 10 0 52 1 0 2 33 14 0 20 11 0 16 5 16 1 16 2 49 3 32 228 2 16 4 1 12 0 52 1 0 2 33 14 0 20 13 0 16 5 16 1 16 2 49 3 32 202 2 16 4 1 15 0 52 14 0 2 33 23 0 20 16 0 16 4 1 18 0 52 17 0 2 16 5 16 1 16 2 49 4 32 167 2 20 19 0 16 4 48 1 33 91 0 20 21 0 16 4 52 20 0 2 6 33 43 0 5 16 5 52 23 0 1 1 24 0 52 22 0 2 6 33 18 0 5 16 5 52 0 0 1 52 2 0 1 1 25 0 52 1 0 2 6 34 3 0 5 16 2 33 16 0 20 16 0 16 4 16 5 16 1 16 2 49 4 32 13 0 20 26 0 16 4 16 0 16 1 16 2 49 4 32 66 2 20 27 0 16 1 16 4 48 2 6 33 14 0 5 20 29 0 16 1 16 4 48 2 52 28 0 1 33 30 0 20 30 0 20 31 0 20 29 0 16 1 16 4 48 2 16 5 16 1 48 3 16 1 16 2 49 3 32 6 2 20 21 0 16 4 52 20 0 2 33 16 0 20 16 0 16 4 16 5 16 1 16 2 49 4 32 234 1 16 4 1 32 0 52 14 0 2 6 33 28 0 5 20 27 0 16 1 16 4 48 2 6 33 14 0 5 20 29 0 16 1 16 4 48 2 52 33 0 1 33 148 0 1 35 0 52 34 0 1 33 115 0 20 29 0 16 1 16 4 48 2 17 6 20 36 0 1 37 0 2 48 2 17 7 52 38 0 0 17 8 51 40 0 1 5 1 1 1 8 1 41 0 1 24 0 1 42 0 4 52 38 0 4 16 5 52 39 0 3 5 20 43 0 16 7 1 44 0 16 6 52 45 0 1 48 3 5 16 8 52 47 0 1 52 46 0 1 33 20 0 20 43 0 16 7 1 48 0 20 49 0 16 8 48 1 48 3 32 1 0 2 5 16 7 32 20 0 20 50 0 20 29 0 16 1 16 4 48 2 16 5 16 1 16 2 49 4 32 42 1 16 4 1 32 0 52 14 0 2 33 46 0 20 29 0 16 1 16 4 48 2 17 6 16 6 52 51 0 1 33 16 0 20 52 0 16 6 16 5 16 1 16 2 49 4 32 7 0 20 53 0 16 4 49 1 32 240 0 16 4 1 55 0 52 54 0 2 1 24 0 52 22 0 2 6 33 36 0 5 16 5 52 23 0 1 1 24 0 52 22 0 2 6 33 18 0 5 16 5 52 0 0 1 52 2 0 1 1 25 0 52 1 0 2 33 16 0 20 16 0 16 4 16 5 16 1 16 2 49 4 32 165 0 16 2 33 16 0 20 16 0 16 4 16 5 16 1 16 2 49 4 32 144 0 16 4 1 56 0 52 1 0 2 6 33 6 0 5 20 57 0 48 0 33 59 0 20 58 0 20 59 0 16 5 52 0 0 1 16 1 48 2 48 1 17 6 20 60 0 16 6 48 1 33 10 0 20 61 0 16 6 49 1 32 16 0 20 62 0 20 56 0 16 6 48 1 52 63 0 1 49 1 32 63 0 20 57 0 48 0 6 33 8 0 5 20 64 0 16 0 48 1 33 20 0 20 61 0 20 65 0 51 66 0 1 0 1 1 48 1 49 1 32 23 0 20 30 0 20 58 0 20 59 0 16 0 16 1 48 2 48 1 16 1 16 2 49 3 32 78 0 16 3 52 67 0 1 6 34 14 0 5 16 3 52 2 0 1 1 68 0 52 1 0 2 33 26 0 20 30 0 20 58 0 20 59 0 16 0 16 1 48 2 48 1 16 1 16 2 49 3 32 25 0 20 69 0 48 0 17 4 51 71 0 1 1 1 2 1 4 16 0 52 70 0 2 5 16 4 50)} "render-dom-element" {:upvalue-count 0 :arity 4 :constants ("=" "svg" "SVG_NS" "math" "MATH_NS" "dom-create-element" "scope-push!" "element-attrs" "reduce" {:upvalue-count 5 :arity 2 :constants ("get" "skip" "assoc" "i" "inc" "=" "type-of" "keyword" "<" "len" "keyword-name" "nth" "starts-with?" "on-" "trampoline" "eval-expr" "callable?" "dom-on" "slice" 3 "bind" "signal?" "bind-input" "ref" "dict-set!" "current" "key" "dom-set-attr" "str" "island-scope?" "reactive-attr" {:upvalue-count 2 :arity 0 :constants ("trampoline" "eval-expr") :bytecode (20 0 0 20 1 0 18 0 18 1 48 2 49 1 50)} "nil?" "contains?" "BOOLEAN_ATTRS" "" "not" "VOID_ELEMENTS" "render-to-dom" "spread?" "reactive-spread" {:upvalue-count 3 :arity 0 :constants ("render-to-dom") :bytecode (20 0 0 18 0 18 1 18 2 49 3 50)} "dom-append") :bytecode (16 0 1 1 0 52 0 0 2 17 2 16 2 33 29 0 16 0 1 1 0 4 1 3 0 16 0 1 3 0 52 0 0 2 52 4 0 1 52 2 0 5 32 58 2 16 1 52 6 0 1 1 7 0 52 5 0 2 6 33 24 0 5 16 0 1 3 0 52 0 0 2 52 4 0 1 18 0 52 9 0 1 52 8 0 2 33 154 1 20 10 0 16 1 48 1 17 3 18 0 16 0 1 3 0 52 0 0 2 52 4 0 1 52 11 0 2 17 4 16 3 1 13 0 52 12 0 2 33 51 0 20 14 0 20 15 0 16 4 18 1 48 2 48 1 17 5 20 16 0 16 5 48 1 33 21 0 20 17 0 18 2 16 3 1 19 0 52 18 0 2 16 5 48 3 32 1 0 2 32 31 1 16 3 1 20 0 52 5 0 2 33 42 0 20 14 0 20 15 0 16 4 18 1 48 2 48 1 17 5 20 21 0 16 5 48 1 33 12 0 20 22 0 18 2 16 5 48 2 32 1 0 2 32 233 0 16 3 1 23 0 52 5 0 2 33 30 0 20 14 0 20 15 0 16 4 18 1 48 2 48 1 17 5 16 5 1 25 0 18 2 52 24 0 3 32 191 0 16 3 1 26 0 52 5 0 2 33 35 0 20 14 0 20 15 0 16 4 18 1 48 2 48 1 17 5 20 27 0 18 2 1 26 0 16 5 52 28 0 1 48 3 32 144 0 20 29 0 48 0 33 19 0 20 30 0 18 2 16 3 51 31 0 1 4 0 1 48 3 32 117 0 20 14 0 20 15 0 16 4 18 1 48 2 48 1 17 5 16 5 52 32 0 1 6 34 8 0 5 16 5 4 52 5 0 2 33 4 0 2 32 76 0 20 34 0 16 3 52 33 0 2 33 24 0 16 5 33 15 0 20 27 0 18 2 16 3 1 35 0 48 3 32 1 0 2 32 40 0 16 5 3 52 5 0 2 33 15 0 20 27 0 18 2 16 3 1 35 0 48 3 32 15 0 20 27 0 18 2 16 3 16 5 52 28 0 1 48 3 5 16 0 1 1 0 3 1 3 0 16 0 1 3 0 52 0 0 2 52 4 0 1 52 2 0 5 32 116 0 20 37 0 18 3 52 33 0 2 52 36 0 1 33 76 0 20 38 0 16 1 18 1 18 4 48 3 17 3 16 3 52 39 0 1 6 33 6 0 5 20 29 0 48 0 33 19 0 20 40 0 18 2 51 41 0 1 1 0 1 0 4 48 2 32 22 0 16 3 52 39 0 1 33 4 0 2 32 9 0 20 42 0 18 2 16 3 48 2 32 1 0 2 5 16 0 1 3 0 16 0 1 3 0 52 0 0 2 52 4 0 1 52 2 0 3 50)} "dict" "i" 0 "skip" "for-each" {:upvalue-count 1 :arity 1 :constants ("for-each" {:upvalue-count 2 :arity 1 :constants ("dict-get" "=" "class" "dom-get-attr" "dom-set-attr" "not" "" "str" " " "style" ";") :bytecode (18 0 16 0 52 0 0 2 17 1 16 0 1 2 0 52 1 0 2 33 64 0 20 3 0 18 1 1 2 0 48 2 17 2 20 4 0 18 1 1 2 0 16 2 6 33 14 0 5 16 2 1 6 0 52 1 0 2 52 5 0 1 33 14 0 16 2 1 8 0 16 1 52 7 0 3 32 2 0 16 1 49 3 32 91 0 16 0 1 9 0 52 1 0 2 33 64 0 20 3 0 18 1 1 9 0 48 2 17 2 20 4 0 18 1 1 9 0 16 2 6 33 14 0 5 16 2 1 6 0 52 1 0 2 52 5 0 1 33 14 0 16 2 1 10 0 16 1 52 7 0 3 32 2 0 16 1 49 3 32 15 0 20 4 0 18 1 16 0 16 1 52 7 0 1 49 3 50)} "keys") :bytecode (51 1 0 1 0 0 0 16 0 52 2 0 1 52 0 0 2 50)} "scope-emitted" "scope-pop!") :bytecode (16 0 1 1 0 52 0 0 2 33 6 0 20 2 0 32 20 0 16 0 1 3 0 52 0 0 2 33 6 0 20 4 0 32 2 0 16 3 17 4 20 5 0 16 0 16 4 48 2 17 5 1 7 0 2 52 6 0 2 5 51 9 0 1 1 1 2 1 5 1 0 1 4 1 11 0 1 12 0 1 13 0 4 52 10 0 4 16 1 52 8 0 3 5 51 15 0 1 5 1 7 0 52 16 0 1 52 14 0 2 5 1 7 0 52 17 0 1 5 16 5 50)} "render-dom-component" {:upvalue-count 0 :arity 4 :constants ("dict" "list" "reduce" {:upvalue-count 4 :arity 2 :constants ("get" "skip" "assoc" "i" "inc" "=" "type-of" "keyword" "<" "len" "trampoline" "eval-expr" "nth" "dict-set!" "keyword-name" "append!") :bytecode (16 0 1 1 0 52 0 0 2 17 2 16 2 33 29 0 16 0 1 1 0 4 1 3 0 16 0 1 3 0 52 0 0 2 52 4 0 1 52 2 0 5 32 154 0 16 1 52 6 0 1 1 7 0 52 5 0 2 6 33 24 0 5 16 0 1 3 0 52 0 0 2 52 4 0 1 18 0 52 9 0 1 52 8 0 2 33 78 0 20 10 0 20 11 0 18 0 16 0 1 3 0 52 0 0 2 52 4 0 1 52 12 0 2 18 1 48 2 48 1 17 3 18 2 20 14 0 16 1 48 1 16 3 52 13 0 3 5 16 0 1 1 0 3 1 3 0 16 0 1 3 0 52 0 0 2 52 4 0 1 52 2 0 5 32 32 0 20 15 0 18 3 16 1 48 2 5 16 0 1 3 0 16 0 1 3 0 52 0 0 2 52 4 0 1 52 2 0 3 50)} "i" 0 "skip" "env-merge" "component-closure" "for-each" {:upvalue-count 2 :arity 1 :constants ("env-bind!" "dict-has?" "dict-get") :bytecode (20 0 0 18 0 16 0 18 1 16 0 52 1 0 2 33 11 0 18 1 16 0 52 2 0 2 32 1 0 2 49 3 50)} "component-params" "component-has-children?" "create-fragment" {:upvalue-count 3 :arity 1 :constants ("render-to-dom" "not" "spread?" "dom-append") :bytecode (20 0 0 16 0 18 0 18 1 48 3 17 1 16 1 52 2 0 1 52 1 0 1 33 12 0 20 3 0 18 2 16 1 49 2 32 1 0 2 50)} "env-bind!" "children" "render-to-dom" "component-body") :bytecode (52 0 0 0 17 4 52 1 0 0 17 5 51 3 0 1 1 1 2 1 4 1 5 1 4 0 1 5 0 1 6 0 4 52 0 0 4 16 1 52 2 0 3 5 20 7 0 16 0 52 8 0 1 16 2 48 2 17 6 51 10 0 1 6 1 4 16 0 52 11 0 1 52 9 0 2 5 16 0 52 12 0 1 33 38 0 20 13 0 48 0 17 7 51 14 0 1 2 1 3 1 7 16 5 52 9 0 2 5 20 15 0 16 6 1 16 0 16 7 48 3 32 1 0 2 5 20 17 0 16 0 52 18 0 1 16 6 16 3 49 3 50)} "render-dom-fragment" {:upvalue-count 0 :arity 3 :constants ("create-fragment" "for-each" {:upvalue-count 3 :arity 1 :constants ("render-to-dom" "not" "spread?" "dom-append") :bytecode (20 0 0 16 0 18 0 18 1 48 3 17 1 16 1 52 2 0 1 52 1 0 1 33 12 0 20 3 0 18 2 16 1 49 2 32 1 0 2 50)}) :bytecode (20 0 0 48 0 17 3 51 2 0 1 1 1 2 1 3 16 0 52 1 0 2 5 16 3 50)} "render-dom-raw" {:upvalue-count 0 :arity 2 :constants ("create-fragment" "for-each" {:upvalue-count 2 :arity 1 :constants ("trampoline" "eval-expr" "=" "type-of" "string" "dom-append" "dom-parse-html" "dom-node" "dom-clone" "not" "nil?" "create-text-node" "str") :bytecode (20 0 0 20 1 0 16 0 18 0 48 2 48 1 17 1 16 1 52 3 0 1 1 4 0 52 2 0 2 33 17 0 20 5 0 18 1 20 6 0 16 1 48 1 49 2 32 68 0 16 1 52 3 0 1 1 7 0 52 2 0 2 33 17 0 20 5 0 18 1 20 8 0 16 1 48 1 49 2 32 35 0 16 1 52 10 0 1 52 9 0 1 33 21 0 20 5 0 18 1 20 11 0 16 1 52 12 0 1 48 1 49 2 32 1 0 2 50)}) :bytecode (20 0 0 48 0 17 2 51 2 0 1 1 1 2 16 0 52 1 0 2 5 16 2 50)} "render-dom-unknown-component" {:upvalue-count 0 :arity 1 :constants ("error" "str" "Unknown component: ") :bytecode (1 2 0 16 0 52 1 0 2 52 0 0 1 50)} "RENDER_DOM_FORMS" "list" "if" "when" "cond" "case" "let" "let*" "letrec" "begin" "do" "define" "defcomp" "defisland" "defmacro" "defstyle" "map" "map-indexed" "filter" "for-each" "portal" "error-boundary" "scope" "provide" "cyst" "render-dom-form?" {:upvalue-count 0 :arity 1 :constants ("contains?" "RENDER_DOM_FORMS") :bytecode (20 1 0 16 0 52 0 0 2 50)} "dispatch-render-form" {:upvalue-count 0 :arity 4 :constants ("=" "if" "island-scope?" "create-comment" "r-if" "list" "effect" {:upvalue-count 6 :arity 0 :constants ("trampoline" "eval-expr" "nth" 1 "render-to-dom" 2 ">" "len" 3 "create-fragment" "dom-parent" "for-each" {:upvalue-count 0 :arity 1 :constants ("dom-remove") :bytecode (20 0 0 16 0 49 1 50)} "dom-is-fragment?" "dom-child-nodes" "list" "dom-insert-after") :bytecode (20 0 0 20 1 0 18 0 1 3 0 52 2 0 2 18 1 48 2 48 1 17 1 16 1 33 21 0 20 4 0 18 0 1 5 0 52 2 0 2 18 1 18 2 48 3 32 42 0 18 0 52 7 0 1 1 8 0 52 6 0 2 33 21 0 20 4 0 18 0 1 8 0 52 2 0 2 18 1 18 2 48 3 32 5 0 20 9 0 48 0 17 0 20 10 0 18 3 48 1 33 51 0 51 12 0 18 4 52 11 0 2 5 20 13 0 16 0 48 1 33 10 0 20 14 0 16 0 48 1 32 6 0 16 0 52 15 0 1 19 4 5 20 16 0 18 3 16 0 49 2 32 4 0 16 0 19 5 50)} "spread?" "create-fragment" "dom-append" "dom-is-fragment?" "dom-child-nodes" "trampoline" "eval-expr" "nth" 1 "render-to-dom" 2 ">" "len" 3 "when" "r-when" {:upvalue-count 6 :arity 0 :constants ("dom-parent" "for-each" {:upvalue-count 0 :arity 1 :constants ("dom-remove") :bytecode (20 0 0 16 0 49 1 50)} "list" "trampoline" "eval-expr" "nth" 1 "create-fragment" {:upvalue-count 4 :arity 1 :constants ("dom-append" "render-to-dom" "nth") :bytecode (20 0 0 18 0 20 1 0 18 1 16 0 52 2 0 2 18 2 18 3 48 3 49 2 50)} "range" 2 "len" "dom-child-nodes" "dom-insert-after") :bytecode (20 0 0 18 0 48 1 33 103 0 51 2 0 18 1 52 1 0 2 5 52 3 0 0 19 1 5 20 4 0 20 5 0 18 2 1 7 0 52 6 0 2 18 3 48 2 48 1 33 58 0 20 8 0 48 0 17 0 51 9 0 1 0 0 2 0 3 0 4 1 11 0 18 2 52 12 0 1 52 10 0 2 52 1 0 2 5 20 13 0 16 0 48 1 19 1 5 20 14 0 18 0 16 0 49 2 32 1 0 2 32 78 0 20 4 0 20 5 0 18 2 1 7 0 52 6 0 2 18 3 48 2 48 1 33 53 0 20 8 0 48 0 17 0 51 9 0 1 0 0 2 0 3 0 4 1 11 0 18 2 52 12 0 1 52 10 0 2 52 1 0 2 5 20 13 0 16 0 48 1 19 1 5 16 0 19 5 32 1 0 2 50)} "not" "for-each" {:upvalue-count 4 :arity 1 :constants ("dom-append" "render-to-dom" "nth") :bytecode (20 0 0 18 0 20 1 0 18 1 16 0 52 2 0 2 18 2 18 3 48 3 49 2 50)} "range" "cond" "r-cond" {:upvalue-count 6 :arity 0 :constants ("eval-cond" "rest" "dom-parent" "for-each" {:upvalue-count 0 :arity 1 :constants ("dom-remove") :bytecode (20 0 0 16 0 49 1 50)} "list" "render-to-dom" "dom-is-fragment?" "dom-child-nodes" "dom-insert-after") :bytecode (20 0 0 18 0 52 1 0 1 18 1 48 2 17 0 20 2 0 18 2 48 1 33 80 0 51 4 0 18 3 52 3 0 2 5 52 5 0 0 19 3 5 16 0 33 54 0 20 6 0 16 0 18 1 18 4 48 3 17 1 20 7 0 16 1 48 1 33 10 0 20 8 0 16 1 48 1 32 6 0 16 1 52 5 0 1 19 3 5 20 9 0 18 2 16 1 49 2 32 1 0 2 32 55 0 16 0 33 49 0 20 6 0 16 0 18 1 18 4 48 3 17 1 20 7 0 16 1 48 1 33 10 0 20 8 0 16 1 48 1 32 6 0 16 1 52 5 0 1 19 3 5 16 1 19 5 32 1 0 2 50)} "eval-cond" "rest" "case" "let" "let*" "process-bindings" {:upvalue-count 4 :arity 1 :constants ("render-to-dom" "nth" "not" "spread?" "dom-append") :bytecode (20 0 0 18 0 16 0 52 1 0 2 18 1 18 2 48 3 17 1 16 1 52 3 0 1 52 2 0 1 33 12 0 20 4 0 18 3 16 1 49 2 32 1 0 2 50)} "letrec" "slice" "env-extend" {:upvalue-count 1 :arity 1 :constants ("=" "type-of" "first" "symbol" "symbol-name" "str" "env-bind!") :bytecode (16 0 52 2 0 1 52 1 0 1 1 3 0 52 0 0 2 33 14 0 20 4 0 16 0 52 2 0 1 48 1 32 10 0 16 0 52 2 0 1 52 5 0 1 17 1 20 6 0 18 0 16 1 2 49 3 50)} {:upvalue-count 1 :arity 1 :constants ("=" "type-of" "first" "symbol" "symbol-name" "str" "env-set!" "trampoline" "eval-expr" "nth" 1) :bytecode (16 0 52 2 0 1 52 1 0 1 1 3 0 52 0 0 2 33 14 0 20 4 0 16 0 52 2 0 1 48 1 32 10 0 16 0 52 2 0 1 52 5 0 1 17 1 20 6 0 18 0 16 1 20 7 0 20 8 0 16 0 1 10 0 52 9 0 2 18 0 48 2 48 1 49 3 50)} {:upvalue-count 1 :arity 1 :constants ("trampoline" "eval-expr") :bytecode (20 0 0 20 1 0 16 0 18 0 48 2 49 1 50)} "init" "last" "begin" "do" "definition-form?" "map" "type-of" "first" "symbol" "symbol-name" "deref" "signal?" "reactive-list" {:upvalue-count 4 :arity 1 :constants ("lambda?" "render-lambda-dom" "list" "render-to-dom" "apply" "dom-append") :bytecode (18 0 52 0 0 1 33 20 0 20 1 0 18 0 16 0 52 2 0 1 18 1 18 2 48 4 32 21 0 20 3 0 18 0 16 0 52 2 0 1 52 4 0 2 18 1 18 2 48 3 17 1 20 5 0 18 3 16 1 49 2 50)} "map-indexed" "for-each-indexed" {:upvalue-count 4 :arity 2 :constants ("lambda?" "render-lambda-dom" "list" "render-to-dom" "apply" "dom-append") :bytecode (18 0 52 0 0 1 33 22 0 20 1 0 18 0 16 0 16 1 52 2 0 2 18 1 18 2 48 4 32 23 0 20 3 0 18 0 16 0 16 1 52 2 0 2 52 4 0 2 18 1 18 2 48 3 17 2 20 5 0 18 3 16 2 49 2 50)} "filter" "portal" "render-dom-portal" "error-boundary" "render-dom-error-boundary" "scope" ">=" "keyword" "keyword-name" "value" "scope-push!" {:upvalue-count 3 :arity 1 :constants ("dom-append" "render-to-dom") :bytecode (20 0 0 18 0 20 1 0 16 0 18 1 18 2 48 3 49 2 50)} "scope-pop!" "provide" "cyst" "key" "str" "next-cyst-id" "get" "*memo-cache*" "host-get" "isConnected" "dom-create-element" "div" "dom-set-attr" "data-sx-cyst" "with-island-scope" {:upvalue-count 1 :arity 1 :constants ("append!") :bytecode (20 0 0 18 0 16 0 49 2 50)} {:upvalue-count 3 :arity 0 :constants ("create-fragment" "for-each" {:upvalue-count 3 :arity 1 :constants ("dom-append" "render-to-dom") :bytecode (20 0 0 18 0 20 1 0 16 0 18 1 18 2 48 3 49 2 50)}) :bytecode (20 0 0 48 0 17 0 51 2 0 1 0 0 0 0 1 18 2 52 1 0 2 5 16 0 50)} "dom-set-data" "sx-disposers" "dict-set!") :bytecode (16 0 1 1 0 52 0 0 2 33 226 0 20 2 0 48 0 33 124 0 20 3 0 1 4 0 48 1 17 4 52 5 0 0 17 5 2 17 6 20 6 0 51 7 0 1 1 1 2 1 3 1 4 1 5 1 6 48 1 5 16 6 52 8 0 1 33 5 0 16 6 32 67 0 20 9 0 48 0 17 7 20 10 0 16 7 16 4 48 2 5 16 6 33 41 0 20 11 0 16 6 48 1 33 10 0 20 12 0 16 6 48 1 32 6 0 16 6 52 5 0 1 17 5 5 20 10 0 16 7 16 6 48 2 32 1 0 2 5 16 7 32 91 0 20 13 0 20 14 0 16 1 1 16 0 52 15 0 2 16 2 48 2 48 1 17 4 16 4 33 21 0 20 17 0 16 1 1 18 0 52 15 0 2 16 2 16 3 49 3 32 42 0 16 1 52 20 0 1 1 21 0 52 19 0 2 33 21 0 20 17 0 16 1 1 21 0 52 15 0 2 16 2 16 3 49 3 32 5 0 20 9 0 49 0 32 217 7 16 0 1 22 0 52 0 0 2 33 180 0 20 2 0 48 0 33 95 0 20 3 0 1 23 0 48 1 17 4 52 5 0 0 17 5 2 17 6 20 6 0 51 24 0 1 4 1 5 1 1 1 2 1 3 1 6 48 1 5 16 6 52 8 0 1 33 5 0 16 6 32 38 0 20 9 0 48 0 17 7 20 10 0 16 7 16 4 48 2 5 16 6 33 12 0 20 10 0 16 7 16 6 48 2 32 1 0 2 5 16 7 32 74 0 20 13 0 20 14 0 16 1 1 16 0 52 15 0 2 16 2 48 2 48 1 52 25 0 1 33 8 0 20 9 0 49 0 32 38 0 20 9 0 48 0 17 4 51 27 0 1 4 1 1 1 2 1 3 1 18 0 16 1 52 20 0 1 52 28 0 2 52 26 0 2 5 16 4 32 25 7 16 0 1 29 0 52 0 0 2 33 145 0 20 2 0 48 0 33 95 0 20 3 0 1 30 0 48 1 17 4 52 5 0 0 17 5 2 17 6 20 6 0 51 31 0 1 1 1 2 1 4 1 5 1 3 1 6 48 1 5 16 6 52 8 0 1 33 5 0 16 6 32 38 0 20 9 0 48 0 17 7 20 10 0 16 7 16 4 48 2 5 16 6 33 12 0 20 10 0 16 7 16 6 48 2 32 1 0 2 5 16 7 32 39 0 20 32 0 16 1 52 33 0 1 16 2 48 2 17 4 16 4 33 14 0 20 17 0 16 4 16 2 16 3 49 3 32 5 0 20 9 0 49 0 32 124 6 16 0 1 34 0 52 0 0 2 33 26 0 20 17 0 20 13 0 20 14 0 16 1 16 2 48 2 48 1 16 2 16 3 49 3 32 86 6 16 0 1 35 0 52 0 0 2 6 34 10 0 5 16 0 1 36 0 52 0 0 2 33 96 0 20 37 0 16 1 1 16 0 52 15 0 2 16 2 48 2 17 4 16 1 52 20 0 1 1 21 0 52 0 0 2 33 21 0 20 17 0 16 1 1 18 0 52 15 0 2 16 4 16 3 49 3 32 38 0 20 9 0 48 0 17 5 51 38 0 1 1 1 4 1 3 1 5 1 18 0 16 1 52 20 0 1 52 28 0 2 52 26 0 2 5 16 5 32 220 5 16 0 1 39 0 52 0 0 2 33 109 0 16 1 1 16 0 52 15 0 2 17 4 16 1 1 18 0 52 40 0 2 17 5 20 41 0 16 2 48 1 17 6 51 42 0 1 6 16 4 52 26 0 2 5 51 43 0 1 6 16 4 52 26 0 2 5 16 5 52 20 0 1 1 16 0 52 19 0 2 33 18 0 51 44 0 1 6 16 5 52 45 0 1 52 26 0 2 32 1 0 2 5 20 17 0 16 5 52 46 0 1 16 6 16 3 49 3 32 99 5 16 0 1 47 0 52 0 0 2 6 34 10 0 5 16 0 1 48 0 52 0 0 2 33 78 0 16 1 52 20 0 1 1 18 0 52 0 0 2 33 21 0 20 17 0 16 1 1 16 0 52 15 0 2 16 2 16 3 49 3 32 38 0 20 9 0 48 0 17 4 51 38 0 1 1 1 2 1 3 1 4 1 16 0 16 1 52 20 0 1 52 28 0 2 52 26 0 2 5 16 4 32 251 4 20 49 0 16 0 48 1 33 23 0 20 13 0 20 14 0 16 1 16 2 48 2 48 1 5 20 9 0 49 0 32 218 4 16 0 1 50 0 52 0 0 2 33 31 1 16 1 1 18 0 52 15 0 2 17 4 20 2 0 48 0 6 33 77 0 5 16 4 52 51 0 1 1 5 0 52 0 0 2 6 33 59 0 5 16 4 52 20 0 1 1 16 0 52 19 0 2 6 33 41 0 5 16 4 52 52 0 1 52 51 0 1 1 53 0 52 0 0 2 6 33 19 0 5 20 54 0 16 4 52 52 0 1 48 1 1 55 0 52 0 0 2 33 111 0 20 13 0 20 14 0 16 1 1 16 0 52 15 0 2 16 2 48 2 48 1 17 5 20 13 0 20 14 0 16 4 1 16 0 52 15 0 2 16 2 48 2 48 1 17 6 20 56 0 16 6 48 1 33 16 0 20 57 0 16 5 16 6 16 2 16 3 49 4 32 36 0 20 55 0 16 6 48 1 17 7 20 9 0 48 0 17 8 51 58 0 1 5 1 2 1 3 1 8 16 7 52 26 0 2 5 16 8 32 73 0 20 13 0 20 14 0 16 1 1 16 0 52 15 0 2 16 2 48 2 48 1 17 5 20 13 0 20 14 0 16 1 1 18 0 52 15 0 2 16 2 48 2 48 1 17 6 20 9 0 48 0 17 7 51 58 0 1 5 1 2 1 3 1 7 16 6 52 26 0 2 5 16 7 32 175 3 16 0 1 59 0 52 0 0 2 33 76 0 20 13 0 20 14 0 16 1 1 16 0 52 15 0 2 16 2 48 2 48 1 17 4 20 13 0 20 14 0 16 1 1 18 0 52 15 0 2 16 2 48 2 48 1 17 5 20 9 0 48 0 17 6 51 61 0 1 4 1 2 1 3 1 6 16 5 52 60 0 2 5 16 6 32 87 3 16 0 1 62 0 52 0 0 2 33 26 0 20 17 0 20 13 0 20 14 0 16 1 16 2 48 2 48 1 16 2 16 3 49 3 32 49 3 16 0 1 63 0 52 0 0 2 33 18 0 20 64 0 16 1 52 33 0 1 16 2 16 3 49 3 32 19 3 16 0 1 65 0 52 0 0 2 33 18 0 20 66 0 16 1 52 33 0 1 16 2 16 3 49 3 32 245 2 16 0 1 26 0 52 0 0 2 33 76 0 20 13 0 20 14 0 16 1 1 16 0 52 15 0 2 16 2 48 2 48 1 17 4 20 13 0 20 14 0 16 1 1 18 0 52 15 0 2 16 2 48 2 48 1 17 5 20 9 0 48 0 17 6 51 58 0 1 4 1 2 1 3 1 6 16 5 52 26 0 2 5 16 6 32 157 2 16 0 1 67 0 52 0 0 2 33 188 0 20 13 0 20 14 0 16 1 1 16 0 52 15 0 2 16 2 48 2 48 1 17 4 16 1 1 18 0 52 40 0 2 17 5 2 17 6 2 17 7 20 9 0 48 0 17 8 16 5 52 20 0 1 1 18 0 52 68 0 2 6 33 41 0 5 16 5 52 52 0 1 52 51 0 1 1 69 0 52 0 0 2 6 33 19 0 5 20 70 0 16 5 52 52 0 1 48 1 1 71 0 52 0 0 2 33 38 0 20 13 0 20 14 0 16 5 1 16 0 52 15 0 2 16 2 48 2 48 1 17 6 5 16 5 1 18 0 52 40 0 2 17 7 32 4 0 16 5 17 7 5 16 4 16 6 52 72 0 2 5 51 73 0 1 8 1 2 1 3 16 7 52 26 0 2 5 16 4 52 74 0 1 5 16 8 32 213 1 16 0 1 75 0 52 0 0 2 33 103 0 20 13 0 20 14 0 16 1 1 16 0 52 15 0 2 16 2 48 2 48 1 17 4 20 13 0 20 14 0 16 1 1 18 0 52 15 0 2 16 2 48 2 48 1 17 5 20 9 0 48 0 17 6 16 4 16 5 52 72 0 2 5 51 27 0 1 6 1 1 1 2 1 3 1 21 0 16 1 52 20 0 1 52 28 0 2 52 26 0 2 5 16 4 52 74 0 1 5 16 6 32 98 1 16 0 1 76 0 52 0 0 2 33 63 1 16 1 52 20 0 1 1 18 0 52 19 0 2 6 33 47 0 5 16 1 1 16 0 52 15 0 2 52 51 0 1 1 69 0 52 0 0 2 6 33 22 0 5 20 70 0 16 1 1 16 0 52 15 0 2 48 1 1 77 0 52 0 0 2 33 28 0 20 13 0 20 14 0 16 1 1 18 0 52 15 0 2 16 2 48 2 48 1 52 78 0 1 32 5 0 20 79 0 48 0 17 4 20 81 0 16 4 52 80 0 2 17 5 16 5 6 33 11 0 5 20 82 0 16 5 1 83 0 48 2 33 5 0 16 5 32 178 0 20 84 0 1 85 0 2 48 2 17 6 52 5 0 0 17 7 16 1 52 20 0 1 1 18 0 52 19 0 2 6 33 47 0 5 16 1 1 16 0 52 15 0 2 52 51 0 1 1 69 0 52 0 0 2 6 33 22 0 5 20 70 0 16 1 1 16 0 52 15 0 2 48 1 1 77 0 52 0 0 2 33 12 0 16 1 1 21 0 52 40 0 2 32 9 0 16 1 1 16 0 52 40 0 2 17 8 20 86 0 16 6 1 87 0 16 4 48 3 5 20 88 0 51 89 0 1 7 51 90 0 1 2 1 3 1 8 48 2 17 9 20 10 0 16 6 16 9 48 2 5 20 91 0 16 6 1 92 0 16 7 48 3 5 20 81 0 16 4 16 6 52 93 0 3 5 16 6 32 23 0 20 17 0 20 13 0 20 14 0 16 1 16 2 48 2 48 1 16 2 16 3 49 3 50)} "render-lambda-dom" {:upvalue-count 0 :arity 4 :constants ("env-merge" "lambda-closure" "for-each-indexed" {:upvalue-count 2 :arity 2 :constants ("env-bind!" "nth") :bytecode (20 0 0 18 0 16 1 18 1 16 0 52 1 0 2 49 3 50)} "lambda-params" "render-to-dom" "lambda-body") :bytecode (20 0 0 16 0 52 1 0 1 16 2 48 2 17 4 51 3 0 1 4 1 1 16 0 52 4 0 1 52 2 0 2 5 20 5 0 16 0 52 6 0 1 16 4 16 3 49 3 50)} "render-dom-island" {:upvalue-count 0 :arity 4 :constants ("dict" "list" "reduce" {:upvalue-count 4 :arity 2 :constants ("get" "skip" "assoc" "i" "inc" "=" "type-of" "keyword" "<" "len" "trampoline" "eval-expr" "nth" "dict-set!" "keyword-name" "append!") :bytecode (16 0 1 1 0 52 0 0 2 17 2 16 2 33 29 0 16 0 1 1 0 4 1 3 0 16 0 1 3 0 52 0 0 2 52 4 0 1 52 2 0 5 32 154 0 16 1 52 6 0 1 1 7 0 52 5 0 2 6 33 24 0 5 16 0 1 3 0 52 0 0 2 52 4 0 1 18 0 52 9 0 1 52 8 0 2 33 78 0 20 10 0 20 11 0 18 0 16 0 1 3 0 52 0 0 2 52 4 0 1 52 12 0 2 18 1 48 2 48 1 17 3 18 2 20 14 0 16 1 48 1 16 3 52 13 0 3 5 16 0 1 1 0 3 1 3 0 16 0 1 3 0 52 0 0 2 52 4 0 1 52 2 0 5 32 32 0 20 15 0 18 3 16 1 48 2 5 16 0 1 3 0 16 0 1 3 0 52 0 0 2 52 4 0 1 52 2 0 3 50)} "i" 0 "skip" "env-merge" "component-closure" "component-name" "for-each" {:upvalue-count 2 :arity 1 :constants ("env-bind!" "dict-has?" "dict-get") :bytecode (20 0 0 18 0 16 0 18 1 16 0 52 1 0 2 33 11 0 18 1 16 0 52 2 0 2 32 1 0 2 49 3 50)} "component-params" "component-has-children?" "create-fragment" {:upvalue-count 3 :arity 1 :constants ("dom-append" "render-to-dom") :bytecode (20 0 0 18 0 20 1 0 16 0 18 1 18 2 48 3 49 2 50)} "env-bind!" "children" "dom-create-element" "span" "dom-set-attr" "data-sx-island" "not" "empty-dict?" "data-sx-state" "sx-serialize" "mark-processed!" "island-hydrated" "with-island-scope" {:upvalue-count 1 :arity 1 :constants ("append!") :bytecode (20 0 0 18 0 16 0 49 2 50)} {:upvalue-count 3 :arity 0 :constants ("render-to-dom" "component-body") :bytecode (20 0 0 18 0 52 1 0 1 18 1 18 2 49 3 50)} "dom-append" "dom-set-data" "sx-disposers") :bytecode (52 0 0 0 17 4 52 1 0 0 17 5 51 3 0 1 1 1 2 1 4 1 5 1 4 0 1 5 0 1 6 0 4 52 0 0 4 16 1 52 2 0 3 5 20 7 0 16 0 52 8 0 1 16 2 48 2 17 6 16 0 52 9 0 1 17 7 51 11 0 1 6 1 4 16 0 52 12 0 1 52 10 0 2 5 16 0 52 13 0 1 33 38 0 20 14 0 48 0 17 8 51 15 0 1 8 1 2 1 3 16 5 52 10 0 2 5 20 16 0 16 6 1 17 0 16 8 48 3 32 1 0 2 5 20 18 0 1 19 0 2 48 2 17 8 52 1 0 0 17 9 20 20 0 16 8 1 21 0 16 7 48 3 5 16 4 52 23 0 1 52 22 0 1 33 20 0 20 20 0 16 8 1 24 0 20 25 0 16 4 48 1 48 3 32 1 0 2 5 20 26 0 16 8 1 27 0 48 2 5 20 28 0 51 29 0 1 9 51 30 0 1 0 1 6 1 3 48 2 17 10 20 31 0 16 8 16 10 48 2 5 20 32 0 16 8 1 33 0 16 9 48 3 5 16 8 50)} "render-dom-lake" {:upvalue-count 0 :arity 3 :constants ("div" "list" "reduce" {:upvalue-count 5 :arity 2 :constants ("get" "skip" "assoc" "i" "inc" "=" "type-of" "keyword" "<" "len" "keyword-name" "trampoline" "eval-expr" "nth" "id" "tag" "append!") :bytecode (16 0 1 1 0 52 0 0 2 17 2 16 2 33 29 0 16 0 1 1 0 4 1 3 0 16 0 1 3 0 52 0 0 2 52 4 0 1 52 2 0 5 32 187 0 16 1 52 6 0 1 1 7 0 52 5 0 2 6 33 24 0 5 16 0 1 3 0 52 0 0 2 52 4 0 1 18 0 52 9 0 1 52 8 0 2 33 111 0 20 10 0 16 1 48 1 17 3 20 11 0 20 12 0 18 0 16 0 1 3 0 52 0 0 2 52 4 0 1 52 13 0 2 18 1 48 2 48 1 17 4 16 3 1 14 0 52 5 0 2 33 7 0 16 4 19 2 32 20 0 16 3 1 15 0 52 5 0 2 33 7 0 16 4 19 3 32 1 0 2 5 16 0 1 1 0 3 1 3 0 16 0 1 3 0 52 0 0 2 52 4 0 1 52 2 0 5 32 32 0 20 16 0 18 4 16 1 48 2 5 16 0 1 3 0 16 0 1 3 0 52 0 0 2 52 4 0 1 52 2 0 3 50)} "dict" "i" 0 "skip" "dom-create-element" "dom-set-attr" "data-sx-lake" "" "for-each" {:upvalue-count 3 :arity 1 :constants ("dom-append" "render-to-dom") :bytecode (20 0 0 18 0 20 1 0 16 0 18 1 18 2 48 3 49 2 50)}) :bytecode (2 17 3 1 0 0 17 4 52 1 0 0 17 5 51 3 0 1 0 1 1 1 3 1 4 1 5 1 5 0 1 6 0 1 7 0 4 52 4 0 4 16 0 52 2 0 3 5 20 8 0 16 4 2 48 2 17 6 20 9 0 16 6 1 10 0 16 3 6 34 4 0 5 1 11 0 48 3 5 51 13 0 1 6 1 1 1 2 16 5 52 12 0 2 5 16 6 50)} "render-dom-marsh" {:upvalue-count 0 :arity 3 :constants ("div" "list" "reduce" {:upvalue-count 6 :arity 2 :constants ("get" "skip" "assoc" "i" "inc" "=" "type-of" "keyword" "<" "len" "keyword-name" "trampoline" "eval-expr" "nth" "id" "tag" "transform" "append!") :bytecode (16 0 1 1 0 52 0 0 2 17 2 16 2 33 29 0 16 0 1 1 0 4 1 3 0 16 0 1 3 0 52 0 0 2 52 4 0 1 52 2 0 5 32 206 0 16 1 52 6 0 1 1 7 0 52 5 0 2 6 33 24 0 5 16 0 1 3 0 52 0 0 2 52 4 0 1 18 0 52 9 0 1 52 8 0 2 33 130 0 20 10 0 16 1 48 1 17 3 20 11 0 20 12 0 18 0 16 0 1 3 0 52 0 0 2 52 4 0 1 52 13 0 2 18 1 48 2 48 1 17 4 16 3 1 14 0 52 5 0 2 33 7 0 16 4 19 2 32 39 0 16 3 1 15 0 52 5 0 2 33 7 0 16 4 19 3 32 20 0 16 3 1 16 0 52 5 0 2 33 7 0 16 4 19 4 32 1 0 2 5 16 0 1 1 0 3 1 3 0 16 0 1 3 0 52 0 0 2 52 4 0 1 52 2 0 5 32 32 0 20 17 0 18 5 16 1 48 2 5 16 0 1 3 0 16 0 1 3 0 52 0 0 2 52 4 0 1 52 2 0 3 50)} "dict" "i" 0 "skip" "dom-create-element" "dom-set-attr" "data-sx-marsh" "" "dom-set-data" "sx-marsh-transform" "sx-marsh-env" "for-each" {:upvalue-count 3 :arity 1 :constants ("dom-append" "render-to-dom") :bytecode (20 0 0 18 0 20 1 0 16 0 18 1 18 2 48 3 49 2 50)}) :bytecode (2 17 3 1 0 0 17 4 2 17 5 52 1 0 0 17 6 51 3 0 1 0 1 1 1 3 1 4 1 5 1 6 1 5 0 1 6 0 1 7 0 4 52 4 0 4 16 0 52 2 0 3 5 20 8 0 16 4 2 48 2 17 7 20 9 0 16 7 1 10 0 16 3 6 34 4 0 5 1 11 0 48 3 5 16 5 33 15 0 20 12 0 16 7 1 13 0 16 5 48 3 32 1 0 2 5 20 12 0 16 7 1 14 0 16 1 48 3 5 51 16 0 1 7 1 1 1 2 16 6 52 15 0 2 5 16 7 50)} "reactive-text" {:upvalue-count 0 :arity 1 :constants ("create-text-node" "str" "deref" "effect" {:upvalue-count 2 :arity 0 :constants ("dom-set-text-content" "str" "deref") :bytecode (20 0 0 18 0 20 2 0 18 1 48 1 52 1 0 1 49 2 50)}) :bytecode (20 0 0 20 2 0 16 0 48 1 52 1 0 1 48 1 17 1 20 3 0 51 4 0 1 1 1 0 48 1 5 16 1 50)} "reactive-attr" {:upvalue-count 0 :arity 3 :constants ("dom-get-attr" "data-sx-reactive-attrs" "" "empty?" "str" "," "dom-set-attr" "effect" {:upvalue-count 3 :arity 0 :constants ("signal?" "deref" "nil?" "=" "dom-remove-attr" "dom-set-attr" "" "str") :bytecode (18 0 48 0 17 0 20 0 0 16 0 48 1 33 10 0 20 1 0 16 0 48 1 32 2 0 16 0 17 1 16 1 52 2 0 1 6 34 8 0 5 16 1 4 52 3 0 2 33 12 0 20 4 0 18 1 18 2 49 2 32 40 0 16 1 3 52 3 0 2 33 15 0 20 5 0 18 1 18 2 1 6 0 49 3 32 15 0 20 5 0 18 1 18 2 16 1 52 7 0 1 49 3 50)}) :bytecode (20 0 0 16 0 1 1 0 48 2 6 34 4 0 5 1 2 0 17 3 16 3 52 3 0 1 33 5 0 16 1 32 11 0 16 3 1 5 0 16 1 52 4 0 3 17 4 20 6 0 16 0 1 1 0 16 4 48 3 5 20 7 0 51 8 0 1 2 1 0 1 1 49 1 50)} "reactive-spread" {:upvalue-count 0 :arity 2 :constants ("list" "dom-get-attr" "data-sx-reactive-attrs" "" "dom-set-attr" "empty?" "_spread" "str" ",_spread" "effect" {:upvalue-count 4 :arity 0 :constants ("not" "empty?" "dom-get-attr" "class" "" "filter" {:upvalue-count 0 :arity 1 :constants ("not" "=" "") :bytecode (16 0 1 2 0 52 1 0 2 52 0 0 1 50)} "split" " " {:upvalue-count 1 :arity 1 :constants ("not" "some" {:upvalue-count 1 :arity 1 :constants ("=") :bytecode (16 0 18 0 52 0 0 2 50)}) :bytecode (51 2 0 1 0 18 0 52 1 0 2 52 0 0 1 50)} "dom-remove-attr" "dom-set-attr" "join" "for-each" {:upvalue-count 1 :arity 1 :constants ("dom-remove-attr") :bytecode (20 0 0 18 0 16 0 49 2 50)} "spread?" "spread-attrs" "dict-get" {:upvalue-count 0 :arity 1 :constants ("not" "=" "class") :bytecode (16 0 1 2 0 52 1 0 2 52 0 0 1 50)} "keys" "=" "str" {:upvalue-count 2 :arity 1 :constants ("dom-set-attr" "str" "dict-get") :bytecode (20 0 0 18 0 16 0 18 1 16 0 52 2 0 2 52 1 0 1 49 3 50)} "run-post-render-hooks" "list") :bytecode (18 0 52 1 0 1 52 0 0 1 33 95 0 20 2 0 18 1 1 3 0 48 2 6 34 4 0 5 1 4 0 17 0 51 6 0 16 0 1 8 0 52 7 0 2 52 5 0 2 17 1 51 9 0 0 0 16 1 52 5 0 2 17 2 16 2 52 1 0 1 33 13 0 20 10 0 18 1 1 3 0 48 2 32 19 0 20 11 0 18 1 1 3 0 1 8 0 16 2 52 12 0 2 48 3 32 1 0 2 5 51 14 0 0 1 18 2 52 13 0 2 5 18 3 48 0 17 0 16 0 52 15 0 1 33 179 0 16 0 52 16 0 1 17 1 16 1 1 3 0 52 17 0 2 6 34 4 0 5 1 4 0 17 2 51 6 0 16 2 1 8 0 52 7 0 2 52 5 0 2 17 3 51 18 0 16 1 52 19 0 1 52 5 0 2 17 4 16 3 19 0 5 16 4 19 2 5 16 3 52 1 0 1 52 0 0 1 33 72 0 20 2 0 18 1 1 3 0 48 2 6 34 4 0 5 1 4 0 17 5 20 11 0 18 1 1 3 0 16 5 6 33 14 0 5 16 5 1 4 0 52 20 0 2 52 0 0 1 33 14 0 16 5 1 8 0 16 2 52 21 0 3 32 2 0 16 2 48 3 32 1 0 2 5 51 22 0 0 1 1 1 16 4 52 13 0 2 5 20 23 0 49 0 32 13 0 52 24 0 0 19 0 5 52 24 0 0 19 2 50)}) :bytecode (52 0 0 0 17 2 52 0 0 0 17 3 20 1 0 16 0 1 2 0 48 2 6 34 4 0 5 1 3 0 17 4 20 4 0 16 0 1 2 0 16 4 52 5 0 1 33 6 0 1 6 0 32 9 0 16 4 1 8 0 52 7 0 2 48 3 5 20 9 0 51 10 0 1 2 1 0 1 3 1 1 49 1 50)} "reactive-fragment" {:upvalue-count 0 :arity 4 :constants ("create-comment" "island-fragment" "list" "effect" {:upvalue-count 4 :arity 0 :constants ("for-each" {:upvalue-count 0 :arity 1 :constants ("dom-remove") :bytecode (20 0 0 16 0 49 1 50)} "list" "dom-child-nodes" "dom-insert-after") :bytecode (51 1 0 18 0 52 0 0 2 5 52 2 0 0 19 0 5 18 1 48 0 33 28 0 18 2 48 0 17 0 20 3 0 16 0 48 1 19 0 5 20 4 0 18 3 16 0 49 2 32 1 0 2 50)}) :bytecode (20 0 0 1 1 0 48 1 17 4 52 2 0 0 17 5 20 3 0 51 4 0 1 5 1 0 1 1 1 4 48 1 5 16 4 50)} "render-list-item" {:upvalue-count 0 :arity 4 :constants ("lambda?" "render-lambda-dom" "list" "render-to-dom" "apply") :bytecode (16 0 52 0 0 1 33 20 0 20 1 0 16 0 16 1 52 2 0 1 16 2 16 3 49 4 32 21 0 20 3 0 16 0 16 1 52 2 0 1 52 4 0 2 16 2 16 3 49 3 50)} "extract-key" {:upvalue-count 0 :arity 2 :constants ("dom-get-attr" "key" "dom-remove-attr" "dom-get-data" "str" "__idx_") :bytecode (20 0 0 16 0 1 1 0 48 2 17 2 16 2 33 16 0 20 2 0 16 0 1 1 0 48 2 5 16 2 32 35 0 20 3 0 16 0 1 1 0 48 2 17 3 16 3 33 9 0 16 3 52 4 0 1 32 9 0 1 5 0 16 1 52 4 0 2 50)} "reactive-list" {:upvalue-count 0 :arity 4 :constants ("create-fragment" "create-comment" "island-list" "dict" "list" "dom-append" "effect" {:upvalue-count 8 :arity 0 :constants ("deref" "dom-parent" "dict" "list" "for-each-indexed" {:upvalue-count 7 :arity 2 :constants ("render-list-item" "extract-key" "not" "starts-with?" "__idx_" "dict-has?" "dict-set!" "dict-get" "append!") :bytecode (20 0 0 18 0 16 1 18 1 18 2 48 4 17 2 20 1 0 16 2 16 0 48 2 17 3 18 3 52 2 0 1 6 33 14 0 5 16 3 1 4 0 52 3 0 2 52 2 0 1 33 6 0 3 19 3 32 1 0 2 5 18 4 16 3 52 5 0 2 33 19 0 18 5 16 3 18 4 16 3 52 7 0 2 52 6 0 3 32 10 0 18 5 16 3 16 2 52 6 0 3 5 20 8 0 18 6 16 3 49 2 50)} "not" "dom-remove-children-after" "create-fragment" "for-each" {:upvalue-count 2 :arity 1 :constants ("dom-append" "dict-get") :bytecode (20 0 0 18 0 18 1 16 0 52 1 0 2 49 2 50)} "dom-insert-after" {:upvalue-count 2 :arity 1 :constants ("not" "dict-has?" "dom-remove" "dict-get") :bytecode (18 0 16 0 52 1 0 2 52 0 0 1 33 16 0 20 2 0 18 1 16 0 52 3 0 2 49 1 32 1 0 2 50)} {:upvalue-count 2 :arity 1 :constants ("dict-get" "dom-next-sibling" "not" "identical?" "dom-insert-after") :bytecode (18 0 16 0 52 0 0 2 17 1 20 1 0 18 1 48 1 17 2 16 1 16 2 52 3 0 2 52 2 0 1 33 12 0 20 4 0 18 1 16 1 48 2 32 1 0 2 5 16 1 19 1 50)} {:upvalue-count 6 :arity 2 :constants ("render-list-item" "extract-key" "dict-set!" "append!" "dom-append") :bytecode (20 0 0 18 0 16 1 18 1 18 2 48 4 17 2 20 1 0 16 2 16 0 48 2 17 3 18 3 16 3 16 2 52 2 0 3 5 20 3 0 18 4 16 3 48 2 5 20 4 0 18 5 16 2 49 2 50)}) :bytecode (20 0 0 18 0 48 1 17 0 20 1 0 18 1 48 1 33 133 0 52 2 0 0 17 1 52 3 0 0 17 2 4 17 3 51 5 0 0 2 0 3 0 4 1 3 0 5 1 1 1 2 16 0 52 4 0 2 5 16 3 52 6 0 1 33 41 0 20 7 0 18 1 48 1 5 20 8 0 48 0 17 4 51 10 0 1 4 1 1 16 2 52 9 0 2 5 20 11 0 18 1 16 4 48 2 32 31 0 51 12 0 1 1 0 5 18 6 52 9 0 2 5 18 1 17 4 51 13 0 1 1 1 4 16 2 52 9 0 2 5 16 1 19 5 5 16 2 19 6 32 21 0 51 14 0 0 2 0 3 0 4 0 5 0 6 0 7 16 0 52 4 0 2 50)}) :bytecode (20 0 0 48 0 17 4 20 1 0 1 2 0 48 1 17 5 52 3 0 0 17 6 52 4 0 0 17 7 20 5 0 16 4 16 5 48 2 5 20 6 0 51 7 0 1 1 1 5 1 0 1 2 1 3 1 6 1 7 1 4 48 1 5 16 4 50)} "bind-input" {:upvalue-count 0 :arity 2 :constants ("lower" "dom-get-attr" "type" "" "=" "checkbox" "radio" "dom-set-prop" "checked" "deref" "value" "str" "effect" {:upvalue-count 3 :arity 0 :constants ("dom-set-prop" "checked" "deref" "str" "!=" "dom-get-prop" "value") :bytecode (18 0 33 20 0 20 0 0 18 1 1 1 0 20 2 0 18 2 48 1 49 3 32 48 0 20 2 0 18 2 48 1 52 3 0 1 17 0 20 5 0 18 1 1 6 0 48 2 16 0 52 4 0 2 33 15 0 20 0 0 18 1 1 6 0 16 0 49 3 32 1 0 2 50)} "dom-on" "change" "input" {:upvalue-count 3 :arity 1 :constants ("reset!" "dom-get-prop" "checked" "value") :bytecode (18 0 33 20 0 20 0 0 18 1 20 1 0 18 2 1 2 0 48 2 49 2 32 17 0 20 0 0 18 1 20 1 0 18 2 1 3 0 48 2 49 2 50)}) :bytecode (20 1 0 16 0 1 2 0 48 2 6 34 4 0 5 1 3 0 52 0 0 1 17 2 16 2 1 5 0 52 4 0 2 6 34 10 0 5 16 2 1 6 0 52 4 0 2 17 3 16 3 33 20 0 20 7 0 16 0 1 8 0 20 9 0 16 1 48 1 48 3 32 21 0 20 7 0 16 0 1 10 0 20 9 0 16 1 48 1 52 11 0 1 48 3 5 20 12 0 51 13 0 1 3 1 0 1 1 48 1 5 20 14 0 16 0 16 3 33 6 0 1 15 0 32 3 0 1 16 0 51 17 0 1 3 1 1 1 0 49 3 50)} "*use-cek-reactive*" "enable-cek-reactive!" {:upvalue-count 0 :arity 0 :constants ("*use-cek-reactive*") :bytecode (3 21 0 0 50)} "cek-reactive-text" {:upvalue-count 0 :arity 2 :constants ("create-text-node" "" {:upvalue-count 1 :arity 1 :constants ("dom-set-text-content" "str") :bytecode (20 0 0 18 0 16 0 52 1 0 1 49 2 50)} "cek-run" "make-cek-state" "list" "make-reactive-reset-frame" "dom-set-text-content" "str") :bytecode (20 0 0 1 1 0 48 1 17 2 51 2 0 1 2 17 3 20 3 0 20 4 0 16 0 16 1 20 6 0 16 1 16 3 3 48 3 52 5 0 1 48 3 48 1 17 4 20 7 0 16 2 16 4 52 8 0 1 48 2 5 16 2 50)} "cek-reactive-attr" {:upvalue-count 0 :arity 4 :constants ({:upvalue-count 2 :arity 1 :constants ("nil?" "=" "dom-remove-attr" "dom-set-attr" "" "str") :bytecode (16 0 52 0 0 1 6 34 8 0 5 16 0 4 52 1 0 2 33 12 0 20 2 0 18 0 18 1 49 2 32 40 0 16 0 3 52 1 0 2 33 15 0 20 3 0 18 0 18 1 1 4 0 49 3 32 15 0 20 3 0 18 0 18 1 16 0 52 5 0 1 49 3 50)} "dom-get-attr" "data-sx-reactive-attrs" "" "empty?" "str" "," "dom-set-attr" "cek-run" "make-cek-state" "list" "make-reactive-reset-frame" "cek-call") :bytecode (51 0 0 1 0 1 1 17 4 20 1 0 16 0 1 2 0 48 2 6 34 4 0 5 1 3 0 17 5 16 5 52 4 0 1 33 5 0 16 1 32 11 0 16 5 1 6 0 16 1 52 5 0 3 17 6 20 7 0 16 0 1 2 0 16 6 48 3 5 20 8 0 20 9 0 16 2 16 3 20 11 0 16 3 16 4 3 48 3 52 10 0 1 48 3 48 1 17 5 20 12 0 16 4 16 5 52 10 0 1 49 2 50)} "render-dom-portal" {:upvalue-count 0 :arity 3 :constants ("trampoline" "eval-expr" "first" "dom-query" "dom-ensure-element" "not" "create-comment" "str" "portal: " " (not found)" "create-fragment" "for-each" {:upvalue-count 3 :arity 1 :constants ("dom-append" "render-to-dom") :bytecode (20 0 0 18 0 20 1 0 16 0 18 1 18 2 48 3 49 2 50)} "rest" "dom-child-nodes" "dom-append" "register-in-scope" {:upvalue-count 1 :arity 0 :constants ("for-each" {:upvalue-count 0 :arity 1 :constants ("dom-remove") :bytecode (20 0 0 16 0 49 1 50)}) :bytecode (51 1 0 18 0 52 0 0 2 50)}) :bytecode (20 0 0 20 1 0 16 0 52 2 0 1 16 1 48 2 48 1 17 3 20 3 0 16 3 48 1 6 34 8 0 5 20 4 0 16 3 48 1 17 4 16 4 52 5 0 1 33 20 0 20 6 0 1 8 0 16 3 1 9 0 52 7 0 3 49 1 32 75 0 20 6 0 1 8 0 16 3 52 7 0 2 48 1 17 5 20 10 0 48 0 17 6 51 12 0 1 6 1 1 1 2 16 0 52 13 0 1 52 11 0 2 5 20 14 0 16 6 48 1 17 7 20 15 0 16 4 16 6 48 2 5 20 16 0 51 17 0 1 7 48 1 5 16 5 50)} "render-dom-error-boundary" {:upvalue-count 0 :arity 3 :constants ("first" "rest" "dom-create-element" "div" "signal" 0 "dom-set-attr" "data-sx-boundary" "true" "effect" {:upvalue-count 6 :arity 0 :constants ("deref" "dom-set-prop" "innerHTML" "" "scope-push!" "sx-island-scope" "try-catch" {:upvalue-count 4 :arity 0 :constants ("create-fragment" "for-each" {:upvalue-count 3 :arity 1 :constants ("dom-append" "render-to-dom") :bytecode (20 0 0 18 0 20 1 0 16 0 18 1 18 2 48 3 49 2 50)} "dom-append" "scope-pop!" "sx-island-scope") :bytecode (20 0 0 48 0 17 0 51 2 0 1 0 0 0 0 1 18 2 52 1 0 2 5 20 3 0 18 3 16 0 48 2 5 1 5 0 52 4 0 1 50)} {:upvalue-count 5 :arity 1 :constants ("scope-pop!" "sx-island-scope" "trampoline" "eval-expr" {:upvalue-count 1 :arity 0 :constants ("swap!" {:upvalue-count 0 :arity 1 :constants ("+" 1) :bytecode (16 0 1 1 0 52 0 0 2 50)}) :bytecode (20 0 0 18 0 51 1 0 49 2 50)} "lambda?" "render-lambda-dom" "list" "render-to-dom" "apply" "dom-append") :bytecode (1 1 0 52 0 0 1 5 20 2 0 20 3 0 18 0 18 1 48 2 48 1 17 1 51 4 0 0 2 17 2 16 1 52 5 0 1 33 22 0 20 6 0 16 1 16 0 16 2 52 7 0 2 18 1 18 3 48 4 32 23 0 20 8 0 16 1 16 0 16 2 52 7 0 2 52 9 0 2 18 1 18 3 48 3 17 3 20 10 0 18 4 16 3 49 2 50)}) :bytecode (20 0 0 18 0 48 1 5 20 1 0 18 1 1 2 0 1 3 0 48 3 5 1 5 0 2 52 4 0 2 5 51 7 0 0 2 0 3 0 4 0 1 51 8 0 0 5 0 2 0 0 0 3 0 1 52 6 0 2 50)}) :bytecode (16 0 52 0 0 1 17 3 16 0 52 1 0 1 17 4 20 2 0 1 3 0 2 48 2 17 5 20 4 0 1 5 0 48 1 17 6 20 6 0 16 5 1 7 0 1 8 0 48 3 5 20 9 0 51 10 0 1 6 1 5 1 1 1 2 1 4 1 3 48 1 5 16 5 50)}) :bytecode (1 1 0 128 0 0 5 1 3 0 128 2 0 5 51 5 0 128 4 0 5 52 7 0 0 128 6 0 5 1 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 1 32 0 1 33 0 1 34 0 1 35 0 1 36 0 1 37 0 1 38 0 1 39 0 1 40 0 1 41 0 1 42 0 1 43 0 1 44 0 1 45 0 1 46 0 1 47 0 1 48 0 1 49 0 1 50 0 1 51 0 1 52 0 1 53 0 1 54 0 52 31 0 23 128 30 0 5 51 56 0 128 55 0 5 51 58 0 128 57 0 5 51 60 0 128 59 0 5 51 62 0 128 61 0 5 51 64 0 128 63 0 5 51 66 0 128 65 0 5 51 68 0 128 67 0 5 51 70 0 128 69 0 5 51 72 0 128 71 0 5 51 74 0 128 73 0 5 51 76 0 128 75 0 5 51 78 0 128 77 0 5 51 80 0 128 79 0 5 51 82 0 128 81 0 5 3 128 83 0 5 51 85 0 128 84 0 5 51 87 0 128 86 0 5 51 89 0 128 88 0 5 51 91 0 128 90 0 5 51 93 0 128 92 0 50))) diff --git a/shared/static/wasm/sx/adapter-sx.sx b/shared/static/wasm/sx/adapter-sx.sx index b510f3d2..788257c7 100644 --- a/shared/static/wasm/sx/adapter-sx.sx +++ b/shared/static/wasm/sx/adapter-sx.sx @@ -1,185 +1,148 @@ -;; ========================================================================== -;; adapter-sx.sx — SX wire format rendering adapter -;; -;; Serializes SX expressions for client-side rendering. -;; Component calls are NOT expanded — they're sent to the client as-is. -;; HTML tags are serialized as SX source text. Special forms are evaluated. -;; -;; Depends on: -;; render.sx — HTML_TAGS -;; eval.sx — eval-expr, trampoline, call-lambda, expand-macro -;; ========================================================================== - - -(define render-to-sx :effects [render] - (fn (expr (env :as dict)) - (let ((result (aser expr env))) - ;; aser-call returns SxExpr which serialize passes through unquoted. - ;; Plain strings from data need serialization (quoting). +(define + render-to-sx + :effects (render) + (fn + (expr (env :as dict)) + (let + ((result (aser expr env))) (cond - (= (type-of result) "sx-expr") (sx-expr-source result) - (= (type-of result) "string") result + (= (type-of result) "sx-expr") + (sx-expr-source result) + (= (type-of result) "string") + result :else (serialize result))))) -(define aser :effects [render] - (fn ((expr :as any) (env :as dict)) - ;; Evaluate for SX wire format — serialize rendering forms, - ;; evaluate control flow and function calls. +(define + aser + :effects (render) + (fn + ((expr :as any) (env :as dict)) (set-render-active! true) - (let ((result - (case (type-of expr) - "number" expr - "string" expr - "boolean" expr - "nil" nil - - "symbol" - (let ((name (symbol-name expr))) - (cond - (env-has? env name) (env-get env name) - (primitive? name) (get-primitive name) - (= name "true") true - (= name "false") false - (= name "nil") nil - :else (error (str "Undefined symbol: " name)))) - - "keyword" (keyword-name expr) - - "list" - (if (empty? expr) - (list) - (aser-list expr env)) - - ;; Spread — emit attrs to nearest element provider - "spread" (do (scope-emit! "element-attrs" (spread-attrs expr)) nil) - - :else expr))) - ;; Catch spread values from function calls and symbol lookups - (if (spread? result) + (let + ((result (case (type-of expr) "number" expr "string" expr "boolean" expr "nil" nil "symbol" (let ((name (symbol-name expr))) (cond (env-has? env name) (env-get env name) (primitive? name) (get-primitive name) (= name "true") true (= name "false") false (= name "nil") nil :else (error (str "Undefined symbol: " name)))) "keyword" (keyword-name expr) "list" (if (empty? expr) (list) (aser-list expr env)) "spread" (do (scope-emit! "element-attrs" (spread-attrs expr)) nil) :else expr))) + (if + (spread? result) (do (scope-emit! "element-attrs" (spread-attrs result)) nil) result)))) - -(define aser-list :effects [render] - (fn ((expr :as list) (env :as dict)) - (let ((head (first expr)) - (args (rest expr))) - (if (not (= (type-of head) "symbol")) +(define + aser-list + :effects (render) + (fn + ((expr :as list) (env :as dict)) + (let + ((head (first expr)) (args (rest expr))) + (if + (not (= (type-of head) "symbol")) (map (fn (x) (aser x env)) expr) - (let ((name (symbol-name head))) + (let + ((name (symbol-name head))) (cond - ;; Fragment — serialize children (= name "<>") - (aser-fragment args env) - - ;; raw! — pass through as serialized call + (aser-fragment args env) (= name "raw!") - (aser-call "raw!" args env) - - ;; Component call — expand if server-affinity or expand-components? is set. - ;; expand-components? is a platform primitive (like eval-expr, trampoline); - ;; adapter-async.sx uses the same pattern at line 684. - ;; Guard with env-has? for backward compat with older kernels. + (aser-call "raw!" args env) (starts-with? name "~") - (let ((comp (if (env-has? env name) (env-get env name) nil)) - (expand-all (if (env-has? env "expand-components?") - (expand-components?) false))) - (cond - (and comp (macro? comp)) - (aser (expand-macro comp args env) env) - (and comp (component? comp) - (not (island? comp)) - (or expand-all - (= (component-affinity comp) "server")) - ;; :affinity :client components are never expanded - ;; server-side — they depend on browser-only state. - (not (= (component-affinity comp) "client"))) - (aser-expand-component comp args env) - :else - (aser-call name args env))) - - ;; Lake — serialize (server-morphable slot) + (let + ((comp (if (env-has? env name) (env-get env name) nil)) + (expand-all + (if + (env-has? env "expand-components?") + (expand-components?) + false))) + (cond + (and comp (macro? comp)) + (aser (expand-macro comp args env) env) + (and + comp + (component? comp) + (not (island? comp)) + (or expand-all (= (component-affinity comp) "server")) + (not (= (component-affinity comp) "client"))) + (aser-expand-component comp args env) + :else (aser-call name args env))) (= name "lake") - (aser-call name args env) - - ;; Marsh — serialize (reactive server-morphable slot) + (aser-call name args env) (= name "marsh") - (aser-call name args env) - - ;; HTML tag — serialize + (aser-call name args env) + (= name "error-boundary") + (aser-call name args env) (contains? HTML_TAGS name) - (aser-call name args env) - - ;; Special/HO forms — evaluate (produces data) + (aser-call name args env) (or (special-form? name) (ho-form? name)) - (aser-special name expr env) - - ;; Macro — expand then aser + (aser-special name expr env) (and (env-has? env name) (macro? (env-get env name))) - (aser (expand-macro (env-get env name) args env) env) + (aser (expand-macro (env-get env name) args env) env) + :else (let + ((f (trampoline (eval-expr head env))) + (evaled-args + (map (fn (a) (trampoline (eval-expr a env))) args))) + (cond + (and + (callable? f) + (not (lambda? f)) + (not (component? f)) + (not (island? f))) + (apply f evaled-args) + (lambda? f) + (trampoline (call-lambda f evaled-args env)) + (component? f) + (aser-call (str "~" (component-name f)) args env) + (island? f) + (aser-call (str "~" (component-name f)) args env) + :else (error (str "Not callable: " (inspect f))))))))))) - ;; Function call — evaluate fully - :else - (let ((f (trampoline (eval-expr head env))) - (evaled-args (map (fn (a) (trampoline (eval-expr a env))) args))) - (cond - (and (callable? f) (not (lambda? f)) (not (component? f)) (not (island? f))) - (apply f evaled-args) - (lambda? f) - (trampoline (call-lambda f evaled-args env)) - (component? f) - (aser-call (str "~" (component-name f)) args env) - (island? f) - (aser-call (str "~" (component-name f)) args env) - :else (error (str "Not callable: " (inspect f))))))))))) - - -;; Re-serialize an evaluated HTML element list, restoring keyword syntax. -;; The CEK evaluates keywords to strings, so (tr :class "row") becomes -;; (list Symbol("tr") String("class") String("row")). This function -;; detects string pairs where the first string is an HTML attribute name -;; and restores them as :keyword syntax for the SX wire format. -(define aser-reserialize :effects [] - (fn (val) - (if (not (= (type-of val) "list")) +(define + aser-reserialize + :effects () + (fn + (val) + (if + (not (= (type-of val) "list")) (serialize val) - (if (empty? val) + (if + (empty? val) "()" - (let ((head (first val))) - (if (not (= (type-of head) "symbol")) + (let + ((head (first val))) + (if + (not (= (type-of head) "symbol")) (serialize val) - (let ((tag (symbol-name head)) - (parts (list tag)) - (args (rest val)) - (skip false) - (i 0)) + (let + ((tag (symbol-name head)) + (parts (list tag)) + (args (rest val)) + (skip false) + (i 0)) (for-each - (fn (arg) - (if skip + (fn + (arg) + (if + skip (do (set! skip false) (set! i (inc i))) - (if (and (= (type-of arg) "string") - (< (inc i) (len args)) - ;; Heuristic: if the next arg is also a string or a list, - ;; and this arg looks like an attribute name (no spaces, - ;; starts with lowercase or is a known attr pattern) - (not (contains? arg " ")) - (or (starts-with? arg "class") - (starts-with? arg "id") - (starts-with? arg "sx-") - (starts-with? arg "data-") - (starts-with? arg "style") - (starts-with? arg "href") - (starts-with? arg "src") - (starts-with? arg "type") - (starts-with? arg "name") - (starts-with? arg "value") - (starts-with? arg "placeholder") - (starts-with? arg "action") - (starts-with? arg "method") - (starts-with? arg "target") - (starts-with? arg "role") - (starts-with? arg "for") - (starts-with? arg "on"))) + (if + (and + (= (type-of arg) "string") + (< (inc i) (len args)) + (not (contains? arg " ")) + (or + (starts-with? arg "class") + (starts-with? arg "id") + (starts-with? arg "sx-") + (starts-with? arg "data-") + (starts-with? arg "style") + (starts-with? arg "href") + (starts-with? arg "src") + (starts-with? arg "type") + (starts-with? arg "name") + (starts-with? arg "value") + (starts-with? arg "placeholder") + (starts-with? arg "action") + (starts-with? arg "method") + (starts-with? arg "target") + (starts-with? arg "role") + (starts-with? arg "for") + (starts-with? arg "on"))) (do (append! parts (str ":" arg)) (append! parts (serialize (nth args (inc i)))) @@ -191,393 +154,410 @@ args) (str "(" (join " " parts) ")")))))))) - -(define aser-fragment :effects [render] - (fn ((children :as list) (env :as dict)) - ;; Serialize (<> child1 child2 ...) to sx source string - ;; Must flatten list results (e.g. from map/filter) to avoid nested parens - (let ((parts (list))) +(define + aser-fragment + :effects (render) + (fn + ((children :as list) (env :as dict)) + (let + ((parts (list))) (for-each - (fn (c) - (let ((result (aser c env))) + (fn + (c) + (let + ((result (aser c env))) (cond - (nil? result) nil + (nil? result) + nil (= (type-of result) "sx-expr") - (append! parts (sx-expr-source result)) - ;; list results (from map etc.) + (append! parts (sx-expr-source result)) (= (type-of result) "list") - (for-each - (fn (item) - (when (not (nil? item)) - (if (= (type-of item) "sx-expr") - (append! parts (sx-expr-source item)) - (append! parts (aser-reserialize item))))) - result) - ;; Everything else — serialize normally (quotes strings) - :else - (append! parts (serialize result))))) + (for-each + (fn + (item) + (when + (not (nil? item)) + (if + (= (type-of item) "sx-expr") + (append! parts (sx-expr-source item)) + (append! parts (aser-reserialize item))))) + result) + :else (append! parts (serialize result))))) children) - (if (empty? parts) + (if + (empty? parts) "" - (if (= (len parts) 1) + (if + (= (len parts) 1) (make-sx-expr (first parts)) (make-sx-expr (str "(<> " (join " " parts) ")"))))))) - -(define aser-call :effects [render] - (fn ((name :as string) (args :as list) (env :as dict)) - ;; Serialize (name :key val child ...) — evaluate args but keep as sx - ;; Uses for-each + mutable state (not reduce) so bootstrapper emits for-loops - ;; that can contain nested for-each for list flattening. - ;; Separate attrs and children so emitted spread attrs go before children. - (let ((attr-parts (list)) - (child-parts (list)) - (skip false) - (i 0)) - ;; Provide scope for spread emit! +(define + aser-call + :effects (render) + (fn + ((name :as string) (args :as list) (env :as dict)) + (let + ((attr-parts (list)) (child-parts (list)) (skip false) (i 0)) (scope-push! "element-attrs" nil) (for-each - (fn (arg) - (if skip - (do (set! skip false) - (set! i (inc i))) - (if (and (= (type-of arg) "keyword") - (< (inc i) (len args))) - (let ((val (aser (nth args (inc i)) env))) - (when (not (nil? val)) + (fn + (arg) + (if + skip + (do (set! skip false) (set! i (inc i))) + (if + (and (= (type-of arg) "keyword") (< (inc i) (len args))) + (let + ((val (aser (nth args (inc i)) env))) + (when + (not (nil? val)) (append! attr-parts (str ":" (keyword-name arg))) - (if (= (type-of val) "sx-expr") + (if + (= (type-of val) "sx-expr") (append! attr-parts (sx-expr-source val)) (append! attr-parts (serialize val)))) (set! skip true) (set! i (inc i))) - (let ((val (aser arg env))) - (when (not (nil? val)) + (let + ((val (aser arg env))) + (when + (not (nil? val)) (cond (= (type-of val) "sx-expr") - (append! child-parts (sx-expr-source val)) - ;; List results (from map etc.) + (append! child-parts (sx-expr-source val)) (= (type-of val) "list") - (for-each - (fn (item) - (when (not (nil? item)) - (if (= (type-of item) "sx-expr") - (append! child-parts (sx-expr-source item)) - (append! child-parts (serialize item))))) - val) - ;; Plain values — serialize normally - :else - (append! child-parts (serialize val)))) + (for-each + (fn + (item) + (when + (not (nil? item)) + (if + (= (type-of item) "sx-expr") + (append! child-parts (sx-expr-source item)) + (append! child-parts (serialize item))))) + val) + :else (append! child-parts (serialize val)))) (set! i (inc i)))))) args) - ;; Collect emitted spread attrs — goes after explicit attrs, before children (for-each - (fn (spread-dict) + (fn + (spread-dict) (for-each - (fn (k) - (let ((v (dict-get spread-dict k))) + (fn + (k) + (let + ((v (dict-get spread-dict k))) (append! attr-parts (str ":" k)) (append! attr-parts (serialize v)))) (keys spread-dict))) (scope-peek "element-attrs")) (scope-pop! "element-attrs") - (let ((parts (concat (list name) attr-parts child-parts))) + (let + ((parts (concat (list name) attr-parts child-parts))) (make-sx-expr (str "(" (join " " parts) ")")))))) - -;; -------------------------------------------------------------------------- -;; Server-affinity component expansion -;; -------------------------------------------------------------------------- -;; -;; When a component has :affinity :server, the aser expands it inline: -;; bind keyword args + children, then aser the body. -;; This is the aser equivalent of render-to-html's component expansion. - -(define aser-expand-component :effects [render] - (fn ((comp :as any) (args :as list) (env :as dict)) - (let ((params (component-params comp)) - (local (env-merge env (component-closure comp))) - (i 0) - (skip false) - (children (list))) - ;; Default all keyword params to nil (same as the CEK evaluator) +(define + aser-expand-component + :effects (render) + (fn + ((comp :as any) (args :as list) (env :as dict)) + (let + ((params (component-params comp)) + (local (env-merge env (component-closure comp))) + (i 0) + (skip false) + (children (list))) (for-each (fn (p) (env-bind! local p nil)) params) - ;; Parse keyword args and positional children from args. - ;; Keyword values are ASERED (not eval'd) — they may contain - ;; rendering constructs (<>, HTML tags) that eval-expr can't - ;; handle. The aser result is a string/value that the body's - ;; aser will inline correctly (strings starting with "(" are - ;; recognized as serialized SX by aserCall). (for-each - (fn (arg) - (if skip + (fn + (arg) + (if + skip (do (set! skip false) (set! i (inc i))) - (if (and (= (type-of arg) "keyword") - (< (inc i) (len args))) - ;; Keyword arg: bind name = aser'd next arg - ;; SxExpr values pass through serialize unquoted automatically + (if + (and (= (type-of arg) "keyword") (< (inc i) (len args))) (do - (env-bind! local (keyword-name arg) + (env-bind! + local + (keyword-name arg) (aser (nth args (inc i)) env)) (set! skip true) (set! i (inc i))) - ;; Positional child: keep as unevaluated AST for aser - (do - (append! children arg) - (set! i (inc i)))))) + (do (append! children arg) (set! i (inc i)))))) args) - ;; Bind &rest children — aser each child first, then bind the result - (when (component-has-children comp) - (let ((asered-children - (map (fn (c) (aser c env)) children))) - (env-bind! local "children" - (if (= (len asered-children) 1) + (when + (component-has-children comp) + (let + ((asered-children (map (fn (c) (aser c env)) children))) + (env-bind! + local + "children" + (if + (= (len asered-children) 1) (first asered-children) asered-children)))) - ;; Aser the body in the merged env (aser (component-body comp) local)))) +(define + SPECIAL_FORM_NAMES + (list + "if" + "when" + "cond" + "case" + "and" + "or" + "let" + "let*" + "lambda" + "fn" + "define" + "defcomp" + "defmacro" + "defstyle" + "defhandler" + "defpage" + "defquery" + "defaction" + "defrelation" + "begin" + "do" + "quote" + "quasiquote" + "->" + "set!" + "letrec" + "dynamic-wind" + "defisland" + "deftype" + "defeffect" + "scope" + "provide" + "context" + "emit!" + "emitted")) -;; -------------------------------------------------------------------------- -;; Form classification -;; -------------------------------------------------------------------------- +(define + HO_FORM_NAMES + (list "map" "map-indexed" "filter" "reduce" "some" "every?" "for-each")) -(define SPECIAL_FORM_NAMES - (list "if" "when" "cond" "case" "and" "or" - "let" "let*" "lambda" "fn" - "define" "defcomp" "defmacro" "defstyle" - "defhandler" "defpage" "defquery" "defaction" "defrelation" - "begin" "do" "quote" "quasiquote" - "->" "set!" "letrec" "dynamic-wind" "defisland" - "deftype" "defeffect" "scope" "provide" - "context" "emit!" "emitted")) +(define + special-form? + :effects () + (fn ((name :as string)) (contains? SPECIAL_FORM_NAMES name))) -(define HO_FORM_NAMES - (list "map" "map-indexed" "filter" "reduce" - "some" "every?" "for-each")) +(define + ho-form? + :effects () + (fn ((name :as string)) (contains? HO_FORM_NAMES name))) -(define special-form? :effects [] - (fn ((name :as string)) - (contains? SPECIAL_FORM_NAMES name))) - -(define ho-form? :effects [] - (fn ((name :as string)) - (contains? HO_FORM_NAMES name))) - - -;; -------------------------------------------------------------------------- -;; aser-special — evaluate special/HO forms in aser mode -;; -------------------------------------------------------------------------- -;; -;; Control flow forms evaluate conditions normally but render branches -;; through aser (serializing tags/components instead of rendering HTML). -;; Definition forms evaluate for side effects and return nil. - -(define aser-special :effects [render] - (fn ((name :as string) (expr :as list) (env :as dict)) - (let ((args (rest expr))) +(define + aser-special + :effects (render) + (fn + ((name :as string) (expr :as list) (env :as dict)) + (let + ((args (rest expr))) (cond - ;; if — evaluate condition, aser chosen branch (= name "if") - (if (trampoline (eval-expr (first args) env)) - (aser (nth args 1) env) - (if (> (len args) 2) - (aser (nth args 2) env) - nil)) - - ;; when — evaluate condition, aser body if true + (if + (trampoline (eval-expr (first args) env)) + (aser (nth args 1) env) + (if (> (len args) 2) (aser (nth args 2) env) nil)) (= name "when") - (if (not (trampoline (eval-expr (first args) env))) - nil - (let ((result nil)) - (for-each (fn (body) (set! result (aser body env))) - (rest args)) - result)) - - ;; cond — evaluate conditions, aser matching branch + (if + (not (trampoline (eval-expr (first args) env))) + nil + (let + ((result nil)) + (for-each + (fn (body) (set! result (aser body env))) + (rest args)) + result)) (= name "cond") - (let ((branch (eval-cond args env))) - (if branch (aser branch env) nil)) - - ;; case — evaluate match value, check each pair + (let + ((branch (eval-cond args env))) + (if branch (aser branch env) nil)) (= name "case") - (let ((match-val (trampoline (eval-expr (first args) env))) - (clauses (rest args))) - (eval-case-aser match-val clauses env)) - - ;; let / let* + (let + ((match-val (trampoline (eval-expr (first args) env))) + (clauses (rest args))) + (eval-case-aser match-val clauses env)) (or (= name "let") (= name "let*")) - (let ((local (process-bindings (first args) env)) - (result nil)) - (for-each (fn (body) (set! result (aser body local))) - (rest args)) - result) - - ;; begin / do + (let + ((local (process-bindings (first args) env)) (result nil)) + (for-each + (fn (body) (set! result (aser body local))) + (rest args)) + result) (or (= name "begin") (= name "do")) - (let ((result nil)) - (for-each (fn (body) (set! result (aser body env))) args) - result) - - ;; and — short-circuit + (let + ((result nil)) + (for-each (fn (body) (set! result (aser body env))) args) + result) (= name "and") - (let ((result true)) - (some (fn (arg) - (set! result (trampoline (eval-expr arg env))) - (not result)) - args) - result) - - ;; or — short-circuit + (let + ((result true)) + (some + (fn + (arg) + (set! result (trampoline (eval-expr arg env))) + (not result)) + args) + result) (= name "or") - (let ((result false)) - (some (fn (arg) - (set! result (trampoline (eval-expr arg env))) - result) - args) - result) - - ;; map — evaluate function and collection, map through aser + (let + ((result false)) + (some + (fn + (arg) + (set! result (trampoline (eval-expr arg env))) + result) + args) + result) (= name "map") - (let ((f (trampoline (eval-expr (first args) env))) - (coll (trampoline (eval-expr (nth args 1) env)))) - (map (fn (item) - (if (lambda? f) - (let ((local (env-merge (lambda-closure f) env))) - (env-bind! local (first (lambda-params f)) item) - (aser (lambda-body f) local)) - (cek-call f (list item)))) - coll)) - - ;; map-indexed + (let + ((f (trampoline (eval-expr (first args) env))) + (coll (trampoline (eval-expr (nth args 1) env)))) + (map + (fn + (item) + (if + (lambda? f) + (let + ((local (env-merge (lambda-closure f) env))) + (env-bind! local (first (lambda-params f)) item) + (aser (lambda-body f) local)) + (cek-call f (list item)))) + coll)) (= name "map-indexed") - (let ((f (trampoline (eval-expr (first args) env))) - (coll (trampoline (eval-expr (nth args 1) env)))) - (map-indexed (fn (i item) - (if (lambda? f) - (let ((local (env-merge (lambda-closure f) env))) - (env-bind! local (first (lambda-params f)) i) - (env-bind! local (nth (lambda-params f) 1) item) - (aser (lambda-body f) local)) - (cek-call f (list i item)))) - coll)) - - ;; for-each — evaluate for side effects, aser each body + (let + ((f (trampoline (eval-expr (first args) env))) + (coll (trampoline (eval-expr (nth args 1) env)))) + (map-indexed + (fn + (i item) + (if + (lambda? f) + (let + ((local (env-merge (lambda-closure f) env))) + (env-bind! local (first (lambda-params f)) i) + (env-bind! local (nth (lambda-params f) 1) item) + (aser (lambda-body f) local)) + (cek-call f (list i item)))) + coll)) (= name "for-each") - (let ((f (trampoline (eval-expr (first args) env))) - (coll (trampoline (eval-expr (nth args 1) env))) - (results (list))) - (for-each (fn (item) - (if (lambda? f) - (let ((local (env-merge (lambda-closure f) env))) - (env-bind! local (first (lambda-params f)) item) - (append! results (aser (lambda-body f) local))) - (cek-call f (list item)))) - coll) - (if (empty? results) nil results)) - - ;; defisland — evaluate AND serialize (client needs the definition) + (let + ((f (trampoline (eval-expr (first args) env))) + (coll (trampoline (eval-expr (nth args 1) env))) + (results (list))) + (for-each + (fn + (item) + (if + (lambda? f) + (let + ((local (env-merge (lambda-closure f) env))) + (env-bind! local (first (lambda-params f)) item) + (append! results (aser (lambda-body f) local))) + (cek-call f (list item)))) + coll) + (if (empty? results) nil results)) (= name "defisland") - (do (trampoline (eval-expr expr env)) - (serialize expr)) - - ;; Definition forms — evaluate for side effects - (or (= name "define") (= name "defcomp") (= name "defmacro") - (= name "defstyle") (= name "defhandler") (= name "defpage") - (= name "defquery") (= name "defaction") (= name "defrelation") - (= name "deftype") (= name "defeffect")) - (do (trampoline (eval-expr expr env)) nil) - - ;; scope — unified render-time dynamic scope + (do (trampoline (eval-expr expr env)) (serialize expr)) + (or + (= name "define") + (= name "defcomp") + (= name "defmacro") + (= name "defstyle") + (= name "defhandler") + (= name "defpage") + (= name "defquery") + (= name "defaction") + (= name "defrelation") + (= name "deftype") + (= name "defeffect")) + (do (trampoline (eval-expr expr env)) nil) (= name "scope") - (let ((scope-name (trampoline (eval-expr (first args) env))) - (rest-args (rest args)) - (scope-val nil) - (body-args nil)) - ;; Check for :value keyword - (if (and (>= (len rest-args) 2) - (= (type-of (first rest-args)) "keyword") - (= (keyword-name (first rest-args)) "value")) - (do (set! scope-val (trampoline (eval-expr (nth rest-args 1) env))) - (set! body-args (slice rest-args 2))) - (set! body-args rest-args)) - (scope-push! scope-name scope-val) - (let ((result nil)) - (for-each (fn (body) (set! result (aser body env))) - body-args) - (scope-pop! scope-name) - result)) - - ;; provide — sugar for scope with value + (let + ((scope-name (trampoline (eval-expr (first args) env))) + (rest-args (rest args)) + (scope-val nil) + (body-args nil)) + (if + (and + (>= (len rest-args) 2) + (= (type-of (first rest-args)) "keyword") + (= (keyword-name (first rest-args)) "value")) + (do + (set! + scope-val + (trampoline (eval-expr (nth rest-args 1) env))) + (set! body-args (slice rest-args 2))) + (set! body-args rest-args)) + (scope-push! scope-name scope-val) + (let + ((result nil)) + (for-each (fn (body) (set! result (aser body env))) body-args) + (scope-pop! scope-name) + result)) (= name "provide") - (let ((prov-name (trampoline (eval-expr (first args) env))) - (prov-val (trampoline (eval-expr (nth args 1) env))) - (result nil)) - (scope-push! prov-name prov-val) - (for-each (fn (body) (set! result (aser body env))) - (slice args 2)) - (scope-pop! prov-name) - result) - - ;; context — scope lookup (uses hashtable stack, not CEK kont) + (let + ((prov-name (trampoline (eval-expr (first args) env))) + (prov-val (trampoline (eval-expr (nth args 1) env))) + (result nil)) + (scope-push! prov-name prov-val) + (for-each + (fn (body) (set! result (aser body env))) + (slice args 2)) + (scope-pop! prov-name) + result) (= name "context") - (let ((ctx-name (trampoline (eval-expr (first args) env))) - (default-val (if (>= (len args) 2) - (trampoline (eval-expr (nth args 1) env)) - nil))) - (let ((val (scope-peek ctx-name))) - (if (nil? val) default-val val))) - - ;; emit! — scope accumulator + (let + ((ctx-name (trampoline (eval-expr (first args) env))) + (default-val + (if + (>= (len args) 2) + (trampoline (eval-expr (nth args 1) env)) + nil))) + (let + ((val (scope-peek ctx-name))) + (if (nil? val) default-val val))) (= name "emit!") - (let ((emit-name (trampoline (eval-expr (first args) env))) - (emit-val (trampoline (eval-expr (nth args 1) env)))) - (scope-emit! emit-name emit-val) - nil) - - ;; emitted — collect accumulated scope values + (let + ((emit-name (trampoline (eval-expr (first args) env))) + (emit-val (trampoline (eval-expr (nth args 1) env)))) + (scope-emit! emit-name emit-val) + nil) (= name "emitted") - (let ((emit-name (trampoline (eval-expr (first args) env)))) - (or (scope-peek emit-name) (list))) + (let + ((emit-name (trampoline (eval-expr (first args) env)))) + (or (scope-peek emit-name) (list))) + :else (trampoline (eval-expr expr env)))))) - ;; Everything else — evaluate normally - :else - (trampoline (eval-expr expr env)))))) - - -;; Helper: case dispatch for aser mode -(define eval-case-aser :effects [render] - (fn (match-val (clauses :as list) (env :as dict)) - (if (< (len clauses) 2) +(define + eval-case-aser + :effects (render) + (fn + (match-val (clauses :as list) (env :as dict)) + (if + (< (len clauses) 2) nil - (let ((test (first clauses)) - (body (nth clauses 1))) - (if (or (and (= (type-of test) "keyword") (= (keyword-name test) "else")) - (and (= (type-of test) "symbol") - (or (= (symbol-name test) ":else") - (= (symbol-name test) "else")))) + (let + ((test (first clauses)) (body (nth clauses 1))) + (if + (or + (and + (= (type-of test) "keyword") + (= (keyword-name test) "else")) + (and + (= (type-of test) "symbol") + (or + (= (symbol-name test) ":else") + (= (symbol-name test) "else")))) (aser body env) - (if (= match-val (trampoline (eval-expr test env))) + (if + (= match-val (trampoline (eval-expr test env))) (aser body env) (eval-case-aser match-val (slice clauses 2) env))))))) - - -;; -------------------------------------------------------------------------- -;; Platform interface — SX wire adapter -;; -------------------------------------------------------------------------- -;; -;; From eval.sx: -;; eval-expr, trampoline, call-lambda, expand-macro -;; env-has?, env-get, env-set!, env-merge, callable?, lambda?, component?, -;; macro?, island?, primitive?, get-primitive, component-name -;; lambda-closure, lambda-params, lambda-body -;; -;; From render.sx: -;; HTML_TAGS, eval-cond, process-bindings -;; -;; From parser.sx: -;; serialize (= sx-serialize) -;; -;; From signals.sx (optional): -;; invoke -;; -------------------------------------------------------------------------- diff --git a/shared/static/wasm/sx/adapter-sx.sxbc b/shared/static/wasm/sx/adapter-sx.sxbc index a661eea1..17dbebd8 100644 --- a/shared/static/wasm/sx/adapter-sx.sxbc +++ b/shared/static/wasm/sx/adapter-sx.sxbc @@ -1,3 +1,3 @@ -(sxbc 1 "13762a3a91f6b00d" +(sxbc 1 "12bf24a4fca1d827" (code - :constants ("render-to-sx" {:upvalue-count 0 :arity 2 :constants ("aser" "=" "type-of" "sx-expr" "sx-expr-source" "string" "serialize") :bytecode (20 0 0 16 0 16 1 48 2 17 2 16 2 52 2 0 1 1 3 0 52 1 0 2 33 10 0 20 4 0 16 2 49 1 32 27 0 16 2 52 2 0 1 1 5 0 52 1 0 2 33 5 0 16 2 32 6 0 16 2 52 6 0 1 50)} "aser" {:upvalue-count 0 :arity 2 :constants ("set-render-active!" "type-of" "number" "=" "string" "boolean" "nil" "symbol" "symbol-name" "env-has?" "env-get" "primitive?" "get-primitive" "true" "false" "error" "str" "Undefined symbol: " "keyword" "keyword-name" "list" "empty?" "aser-list" "spread" "scope-emit!" "element-attrs" "spread-attrs" "spread?") :bytecode (20 0 0 3 48 1 5 16 0 52 1 0 1 6 1 2 0 52 3 0 2 33 6 0 5 16 0 32 16 1 6 1 4 0 52 3 0 2 33 6 0 5 16 0 32 255 0 6 1 5 0 52 3 0 2 33 6 0 5 16 0 32 238 0 6 1 6 0 52 3 0 2 33 5 0 5 2 32 222 0 6 1 7 0 52 3 0 2 33 116 0 5 20 8 0 16 0 48 1 17 3 20 9 0 16 1 16 3 48 2 33 12 0 20 10 0 16 1 16 3 48 2 32 79 0 16 3 52 11 0 1 33 9 0 16 3 52 12 0 1 32 61 0 16 3 1 13 0 52 3 0 2 33 4 0 3 32 45 0 16 3 1 14 0 52 3 0 2 33 4 0 4 32 29 0 16 3 1 6 0 52 3 0 2 33 4 0 2 32 13 0 1 17 0 16 3 52 16 0 2 52 15 0 1 32 95 0 6 1 18 0 52 3 0 2 33 11 0 5 20 19 0 16 0 48 1 32 73 0 6 1 20 0 52 3 0 2 33 29 0 5 16 0 52 21 0 1 33 7 0 52 20 0 0 32 9 0 20 22 0 16 0 16 1 48 2 32 33 0 6 1 23 0 52 3 0 2 33 19 0 5 1 25 0 16 0 52 26 0 1 52 24 0 2 5 2 32 3 0 5 16 0 17 2 16 2 52 27 0 1 33 18 0 1 25 0 16 2 52 26 0 1 52 24 0 2 5 2 32 2 0 16 2 50)} "aser-list" {:upvalue-count 0 :arity 2 :constants ("first" "rest" "not" "=" "type-of" "symbol" "map" {:upvalue-count 1 :arity 1 :constants ("aser") :bytecode (20 0 0 16 0 18 0 49 2 50)} "symbol-name" "<>" "aser-fragment" "raw!" "aser-call" "starts-with?" "~" "env-has?" "env-get" "expand-components?" "macro?" "aser" "expand-macro" "component?" "island?" "component-affinity" "server" "client" "aser-expand-component" "lake" "marsh" "contains?" "HTML_TAGS" "special-form?" "ho-form?" "aser-special" "trampoline" "eval-expr" {:upvalue-count 1 :arity 1 :constants ("trampoline" "eval-expr") :bytecode (20 0 0 20 1 0 16 0 18 0 48 2 49 1 50)} "callable?" "lambda?" "apply" "call-lambda" "str" "component-name" "error" "Not callable: " "inspect") :bytecode (16 0 52 0 0 1 17 2 16 0 52 1 0 1 17 3 16 2 52 4 0 1 1 5 0 52 3 0 2 52 2 0 1 33 14 0 51 7 0 1 1 16 0 52 6 0 2 32 136 2 20 8 0 16 2 48 1 17 4 16 4 1 9 0 52 3 0 2 33 12 0 20 10 0 16 3 16 1 49 2 32 103 2 16 4 1 11 0 52 3 0 2 33 15 0 20 12 0 1 11 0 16 3 16 1 49 3 32 76 2 16 4 1 14 0 52 13 0 2 33 196 0 20 15 0 16 1 16 4 48 2 33 12 0 20 16 0 16 1 16 4 48 2 32 1 0 2 17 5 20 15 0 16 1 1 17 0 48 2 33 8 0 20 17 0 48 0 32 1 0 4 17 6 16 5 6 33 7 0 5 16 5 52 18 0 1 33 21 0 20 19 0 20 20 0 16 5 16 3 16 1 48 3 16 1 49 2 32 105 0 16 5 6 33 71 0 5 16 5 52 21 0 1 6 33 60 0 5 16 5 52 22 0 1 52 2 0 1 6 33 45 0 5 16 6 6 34 15 0 5 20 23 0 16 5 48 1 1 24 0 52 3 0 2 6 33 19 0 5 20 23 0 16 5 48 1 1 25 0 52 3 0 2 52 2 0 1 33 14 0 20 26 0 16 5 16 3 16 1 49 3 32 11 0 20 12 0 16 4 16 3 16 1 49 3 32 124 1 16 4 1 27 0 52 3 0 2 33 14 0 20 12 0 16 4 16 3 16 1 49 3 32 98 1 16 4 1 28 0 52 3 0 2 33 14 0 20 12 0 16 4 16 3 16 1 49 3 32 72 1 20 30 0 16 4 52 29 0 2 33 14 0 20 12 0 16 4 16 3 16 1 49 3 32 46 1 20 31 0 16 4 48 1 6 34 8 0 5 20 32 0 16 4 48 1 33 14 0 20 33 0 16 4 16 0 16 1 49 3 32 10 1 20 15 0 16 1 16 4 48 2 6 33 14 0 5 20 16 0 16 1 16 4 48 2 52 18 0 1 33 28 0 20 19 0 20 20 0 20 16 0 16 1 16 4 48 2 16 3 16 1 48 3 16 1 49 2 32 208 0 20 34 0 20 35 0 16 2 16 1 48 2 48 1 17 5 51 36 0 1 1 16 3 52 6 0 2 17 6 20 37 0 16 5 48 1 6 33 41 0 5 16 5 52 38 0 1 52 2 0 1 6 33 26 0 5 16 5 52 21 0 1 52 2 0 1 6 33 11 0 5 16 5 52 22 0 1 52 2 0 1 33 11 0 16 5 16 6 52 39 0 2 32 113 0 16 5 52 38 0 1 33 19 0 20 34 0 20 40 0 16 5 16 6 16 1 48 3 49 1 32 85 0 16 5 52 21 0 1 33 25 0 20 12 0 1 14 0 16 5 52 42 0 1 52 41 0 2 16 3 16 1 49 3 32 51 0 16 5 52 22 0 1 33 25 0 20 12 0 1 14 0 16 5 52 42 0 1 52 41 0 2 16 3 16 1 49 3 32 17 0 1 44 0 16 5 52 45 0 1 52 41 0 2 52 43 0 1 50)} "aser-reserialize" {:upvalue-count 0 :arity 1 :constants ("not" "=" "type-of" "list" "serialize" "empty?" "()" "first" "symbol" "symbol-name" "rest" 0 "for-each" {:upvalue-count 4 :arity 1 :constants ("inc" "=" "type-of" "string" "<" "len" "not" "contains?" " " "starts-with?" "class" "id" "sx-" "data-" "style" "href" "src" "type" "name" "value" "placeholder" "action" "method" "target" "role" "for" "on" "append!" "str" ":" "serialize" "nth" "aser-reserialize") :bytecode (18 0 33 15 0 4 19 0 5 18 1 52 0 0 1 19 1 32 116 1 16 0 52 2 0 1 1 3 0 52 1 0 2 6 33 17 1 5 18 1 52 0 0 1 18 2 52 5 0 1 52 4 0 2 6 33 252 0 5 16 0 1 8 0 52 7 0 2 52 6 0 1 6 33 234 0 5 16 0 1 10 0 52 9 0 2 6 34 220 0 5 16 0 1 11 0 52 9 0 2 6 34 206 0 5 16 0 1 12 0 52 9 0 2 6 34 192 0 5 16 0 1 13 0 52 9 0 2 6 34 178 0 5 16 0 1 14 0 52 9 0 2 6 34 164 0 5 16 0 1 15 0 52 9 0 2 6 34 150 0 5 16 0 1 16 0 52 9 0 2 6 34 136 0 5 16 0 1 17 0 52 9 0 2 6 34 122 0 5 16 0 1 18 0 52 9 0 2 6 34 108 0 5 16 0 1 19 0 52 9 0 2 6 34 94 0 5 16 0 1 20 0 52 9 0 2 6 34 80 0 5 16 0 1 21 0 52 9 0 2 6 34 66 0 5 16 0 1 22 0 52 9 0 2 6 34 52 0 5 16 0 1 23 0 52 9 0 2 6 34 38 0 5 16 0 1 24 0 52 9 0 2 6 34 24 0 5 16 0 1 25 0 52 9 0 2 6 34 10 0 5 16 0 1 26 0 52 9 0 2 33 56 0 20 27 0 18 3 1 29 0 16 0 52 28 0 2 48 2 5 20 27 0 18 3 18 2 18 1 52 0 0 1 52 31 0 2 52 30 0 1 48 2 5 3 19 0 5 18 1 52 0 0 1 19 1 32 23 0 20 27 0 18 3 20 32 0 16 0 48 1 48 2 5 18 1 52 0 0 1 19 1 50)} "str" "(" "join" " " ")") :bytecode (16 0 52 2 0 1 1 3 0 52 1 0 2 52 0 0 1 33 9 0 16 0 52 4 0 1 32 122 0 16 0 52 5 0 1 33 6 0 1 6 0 32 107 0 16 0 52 7 0 1 17 1 16 1 52 2 0 1 1 8 0 52 1 0 2 52 0 0 1 33 9 0 16 0 52 4 0 1 32 70 0 20 9 0 16 1 48 1 17 2 16 2 52 3 0 1 17 3 16 0 52 10 0 1 17 4 4 17 5 1 11 0 17 6 51 13 0 1 5 1 6 1 4 1 3 16 4 52 12 0 2 5 1 15 0 1 17 0 16 3 52 16 0 2 1 18 0 52 14 0 3 50)} "aser-fragment" {:upvalue-count 0 :arity 2 :constants ("list" "for-each" {:upvalue-count 2 :arity 1 :constants ("aser" "nil?" "=" "type-of" "sx-expr" "append!" "sx-expr-source" "list" "for-each" {:upvalue-count 1 :arity 1 :constants ("not" "nil?" "=" "type-of" "sx-expr" "append!" "sx-expr-source" "aser-reserialize") :bytecode (16 0 52 1 0 1 52 0 0 1 33 50 0 16 0 52 3 0 1 1 4 0 52 2 0 2 33 17 0 20 5 0 18 0 20 6 0 16 0 48 1 49 2 32 14 0 20 5 0 18 0 20 7 0 16 0 48 1 49 2 32 1 0 2 50)} "serialize") :bytecode (20 0 0 16 0 18 0 48 2 17 1 16 1 52 1 0 1 33 4 0 2 32 76 0 16 1 52 3 0 1 1 4 0 52 2 0 2 33 17 0 20 5 0 18 1 20 6 0 16 1 48 1 49 2 32 43 0 16 1 52 3 0 1 1 7 0 52 2 0 2 33 14 0 51 9 0 0 1 16 1 52 8 0 2 32 13 0 20 5 0 18 1 16 1 52 10 0 1 49 2 50)} "empty?" "" "=" "len" 1 "make-sx-expr" "first" "str" "(<> " "join" " " ")") :bytecode (52 0 0 0 17 2 51 2 0 1 1 1 2 16 0 52 1 0 2 5 16 2 52 3 0 1 33 6 0 1 4 0 32 54 0 16 2 52 6 0 1 1 7 0 52 5 0 2 33 14 0 20 8 0 16 2 52 9 0 1 49 1 32 24 0 20 8 0 1 11 0 1 13 0 16 2 52 12 0 2 1 14 0 52 10 0 3 49 1 50)} "aser-call" {:upvalue-count 0 :arity 3 :constants ("list" 0 "scope-push!" "element-attrs" "for-each" {:upvalue-count 6 :arity 1 :constants ("inc" "=" "type-of" "keyword" "<" "len" "aser" "nth" "not" "nil?" "append!" "str" ":" "keyword-name" "sx-expr" "sx-expr-source" "serialize" "list" "for-each" {:upvalue-count 1 :arity 1 :constants ("not" "nil?" "=" "type-of" "sx-expr" "append!" "sx-expr-source" "serialize") :bytecode (16 0 52 1 0 1 52 0 0 1 33 49 0 16 0 52 3 0 1 1 4 0 52 2 0 2 33 17 0 20 5 0 18 0 20 6 0 16 0 48 1 49 2 32 13 0 20 5 0 18 0 16 0 52 7 0 1 49 2 32 1 0 2 50)}) :bytecode (18 0 33 15 0 4 19 0 5 18 1 52 0 0 1 19 1 32 16 1 16 0 52 2 0 1 1 3 0 52 1 0 2 6 33 17 0 5 18 1 52 0 0 1 18 2 52 5 0 1 52 4 0 2 33 122 0 20 6 0 18 2 18 1 52 0 0 1 52 7 0 2 18 3 48 2 17 1 16 1 52 9 0 1 52 8 0 1 33 71 0 20 10 0 18 4 1 12 0 20 13 0 16 0 48 1 52 11 0 2 48 2 5 16 1 52 2 0 1 1 14 0 52 1 0 2 33 17 0 20 10 0 18 4 20 15 0 16 1 48 1 48 2 32 13 0 20 10 0 18 4 16 1 52 16 0 1 48 2 32 1 0 2 5 3 19 0 5 18 1 52 0 0 1 19 1 32 113 0 20 6 0 16 0 18 3 48 2 17 1 16 1 52 9 0 1 52 8 0 1 33 79 0 16 1 52 2 0 1 1 14 0 52 1 0 2 33 17 0 20 10 0 18 5 20 15 0 16 1 48 1 48 2 32 43 0 16 1 52 2 0 1 1 17 0 52 1 0 2 33 14 0 51 19 0 0 5 16 1 52 18 0 2 32 13 0 20 10 0 18 5 16 1 52 16 0 1 48 2 32 1 0 2 5 18 1 52 0 0 1 19 1 50)} {:upvalue-count 1 :arity 1 :constants ("for-each" {:upvalue-count 2 :arity 1 :constants ("dict-get" "append!" "str" ":" "serialize") :bytecode (18 0 16 0 52 0 0 2 17 1 20 1 0 18 1 1 3 0 16 0 52 2 0 2 48 2 5 20 1 0 18 1 16 1 52 4 0 1 49 2 50)} "keys") :bytecode (51 1 0 1 0 0 0 16 0 52 2 0 1 52 0 0 2 50)} "scope-peek" "scope-pop!" "concat" "make-sx-expr" "str" "(" "join" " " ")") :bytecode (52 0 0 0 17 3 52 0 0 0 17 4 4 17 5 1 1 0 17 6 1 3 0 2 52 2 0 2 5 51 5 0 1 5 1 6 1 1 1 2 1 3 1 4 16 1 52 4 0 2 5 51 6 0 1 3 1 3 0 52 7 0 1 52 4 0 2 5 1 3 0 52 8 0 1 5 16 0 52 0 0 1 16 3 16 4 52 9 0 3 17 7 20 10 0 1 12 0 1 14 0 16 7 52 13 0 2 1 15 0 52 11 0 3 49 1 50)} "aser-expand-component" {:upvalue-count 0 :arity 3 :constants ("component-params" "env-merge" "component-closure" 0 "list" "for-each" {:upvalue-count 1 :arity 1 :constants ("env-bind!") :bytecode (20 0 0 18 0 16 0 2 49 3 50)} {:upvalue-count 6 :arity 1 :constants ("inc" "=" "type-of" "keyword" "<" "len" "env-bind!" "keyword-name" "aser" "nth" "append!") :bytecode (18 0 33 15 0 4 19 0 5 18 1 52 0 0 1 19 1 32 104 0 16 0 52 2 0 1 1 3 0 52 1 0 2 6 33 17 0 5 18 1 52 0 0 1 18 2 52 5 0 1 52 4 0 2 33 49 0 20 6 0 18 3 20 7 0 16 0 48 1 20 8 0 18 2 18 1 52 0 0 1 52 9 0 2 18 4 48 2 48 3 5 3 19 0 5 18 1 52 0 0 1 19 1 32 18 0 20 10 0 18 5 16 0 48 2 5 18 1 52 0 0 1 19 1 50)} "component-has-children" "map" {:upvalue-count 1 :arity 1 :constants ("aser") :bytecode (20 0 0 16 0 18 0 49 2 50)} "env-bind!" "children" "=" "len" 1 "first" "aser" "component-body") :bytecode (16 0 52 0 0 1 17 3 20 1 0 16 2 16 0 52 2 0 1 48 2 17 4 1 3 0 17 5 4 17 6 52 4 0 0 17 7 51 6 0 1 4 16 3 52 5 0 2 5 51 7 0 1 6 1 5 1 1 1 4 1 2 1 7 16 1 52 5 0 2 5 20 8 0 16 0 48 1 33 53 0 51 10 0 1 2 16 7 52 9 0 2 17 8 20 11 0 16 4 1 12 0 16 8 52 14 0 1 1 15 0 52 13 0 2 33 9 0 16 8 52 16 0 1 32 2 0 16 8 48 3 32 1 0 2 5 20 17 0 16 0 52 18 0 1 16 4 49 2 50)} "SPECIAL_FORM_NAMES" "list" "if" "when" "cond" "case" "and" "or" "let" "let*" "lambda" "fn" "define" "defcomp" "defmacro" "defstyle" "defhandler" "defpage" "defquery" "defaction" "defrelation" "begin" "do" "quote" "quasiquote" "->" "set!" "letrec" "dynamic-wind" "defisland" "deftype" "defeffect" "scope" "provide" "context" "emit!" "emitted" "HO_FORM_NAMES" "map" "map-indexed" "filter" "reduce" "some" "every?" "for-each" "special-form?" {:upvalue-count 0 :arity 1 :constants ("contains?" "SPECIAL_FORM_NAMES") :bytecode (20 1 0 16 0 52 0 0 2 50)} "ho-form?" {:upvalue-count 0 :arity 1 :constants ("contains?" "HO_FORM_NAMES") :bytecode (20 1 0 16 0 52 0 0 2 50)} "aser-special" {:upvalue-count 0 :arity 3 :constants ("rest" "=" "if" "trampoline" "eval-expr" "first" "aser" "nth" 1 ">" "len" 2 "when" "not" "for-each" {:upvalue-count 2 :arity 1 :constants ("aser") :bytecode (20 0 0 16 0 18 1 48 2 19 0 50)} "cond" "eval-cond" "case" "eval-case-aser" "let" "let*" "process-bindings" "begin" "do" "and" "some" {:upvalue-count 2 :arity 1 :constants ("trampoline" "eval-expr" "not") :bytecode (20 0 0 20 1 0 16 0 18 1 48 2 48 1 19 0 5 18 0 52 2 0 1 50)} "or" {:upvalue-count 2 :arity 1 :constants ("trampoline" "eval-expr") :bytecode (20 0 0 20 1 0 16 0 18 1 48 2 48 1 19 0 5 18 0 50)} "map" {:upvalue-count 2 :arity 1 :constants ("lambda?" "env-merge" "lambda-closure" "env-bind!" "first" "lambda-params" "aser" "lambda-body" "cek-call" "list") :bytecode (18 0 52 0 0 1 33 51 0 20 1 0 18 0 52 2 0 1 18 1 48 2 17 1 20 3 0 16 1 18 0 52 5 0 1 52 4 0 1 16 0 48 3 5 20 6 0 18 0 52 7 0 1 16 1 49 2 32 13 0 20 8 0 18 0 16 0 52 9 0 1 49 2 50)} "map-indexed" {:upvalue-count 2 :arity 2 :constants ("lambda?" "env-merge" "lambda-closure" "env-bind!" "first" "lambda-params" "nth" 1 "aser" "lambda-body" "cek-call" "list") :bytecode (18 0 52 0 0 1 33 74 0 20 1 0 18 0 52 2 0 1 18 1 48 2 17 2 20 3 0 16 2 18 0 52 5 0 1 52 4 0 1 16 0 48 3 5 20 3 0 16 2 18 0 52 5 0 1 1 7 0 52 6 0 2 16 1 48 3 5 20 8 0 18 0 52 9 0 1 16 2 49 2 32 15 0 20 10 0 18 0 16 0 16 1 52 11 0 2 49 2 50)} "list" {:upvalue-count 3 :arity 1 :constants ("lambda?" "env-merge" "lambda-closure" "env-bind!" "first" "lambda-params" "append!" "aser" "lambda-body" "cek-call" "list") :bytecode (18 0 52 0 0 1 33 58 0 20 1 0 18 0 52 2 0 1 18 1 48 2 17 1 20 3 0 16 1 18 0 52 5 0 1 52 4 0 1 16 0 48 3 5 20 6 0 18 2 20 7 0 18 0 52 8 0 1 16 1 48 2 49 2 32 13 0 20 9 0 18 0 16 0 52 10 0 1 49 2 50)} "empty?" "defisland" "serialize" "define" "defcomp" "defmacro" "defstyle" "defhandler" "defpage" "defquery" "defaction" "defrelation" "deftype" "defeffect" "scope" ">=" "type-of" "keyword" "keyword-name" "value" "slice" "scope-push!" "scope-pop!" "provide" "context" "scope-peek" "nil?" "emit!" "scope-emit!" "emitted") :bytecode (16 1 52 0 0 1 17 3 16 0 1 2 0 52 1 0 2 33 79 0 20 3 0 20 4 0 16 3 52 5 0 1 16 2 48 2 48 1 33 19 0 20 6 0 16 3 1 8 0 52 7 0 2 16 2 49 2 32 36 0 16 3 52 10 0 1 1 11 0 52 9 0 2 33 19 0 20 6 0 16 3 1 11 0 52 7 0 2 16 2 49 2 32 1 0 2 32 34 5 16 0 1 12 0 52 1 0 2 33 55 0 20 3 0 20 4 0 16 3 52 5 0 1 16 2 48 2 48 1 52 13 0 1 33 4 0 2 32 23 0 2 17 4 51 15 0 1 4 1 2 16 3 52 0 0 1 52 14 0 2 5 16 4 32 223 4 16 0 1 16 0 52 1 0 2 33 32 0 20 17 0 16 3 16 2 48 2 17 4 16 4 33 12 0 20 6 0 16 4 16 2 49 2 32 1 0 2 32 179 4 16 0 1 18 0 52 1 0 2 33 42 0 20 3 0 20 4 0 16 3 52 5 0 1 16 2 48 2 48 1 17 4 16 3 52 0 0 1 17 5 20 19 0 16 4 16 5 16 2 49 3 32 125 4 16 0 1 20 0 52 1 0 2 6 34 10 0 5 16 0 1 21 0 52 1 0 2 33 41 0 20 22 0 16 3 52 5 0 1 16 2 48 2 17 4 2 17 5 51 15 0 1 5 1 4 16 3 52 0 0 1 52 14 0 2 5 16 5 32 58 4 16 0 1 23 0 52 1 0 2 6 34 10 0 5 16 0 1 24 0 52 1 0 2 33 22 0 2 17 4 51 15 0 1 4 1 2 16 3 52 14 0 2 5 16 4 32 10 4 16 0 1 25 0 52 1 0 2 33 22 0 3 17 4 51 27 0 1 4 1 2 16 3 52 26 0 2 5 16 4 32 232 3 16 0 1 28 0 52 1 0 2 33 22 0 4 17 4 51 29 0 1 4 1 2 16 3 52 26 0 2 5 16 4 32 198 3 16 0 1 30 0 52 1 0 2 33 59 0 20 3 0 20 4 0 16 3 52 5 0 1 16 2 48 2 48 1 17 4 20 3 0 20 4 0 16 3 1 8 0 52 7 0 2 16 2 48 2 48 1 17 5 51 31 0 1 4 1 2 16 5 52 30 0 2 32 127 3 16 0 1 32 0 52 1 0 2 33 59 0 20 3 0 20 4 0 16 3 52 5 0 1 16 2 48 2 48 1 17 4 20 3 0 20 4 0 16 3 1 8 0 52 7 0 2 16 2 48 2 48 1 17 5 51 33 0 1 4 1 2 16 5 52 32 0 2 32 56 3 16 0 1 14 0 52 1 0 2 33 83 0 20 3 0 20 4 0 16 3 52 5 0 1 16 2 48 2 48 1 17 4 20 3 0 20 4 0 16 3 1 8 0 52 7 0 2 16 2 48 2 48 1 17 5 52 34 0 0 17 6 51 35 0 1 4 1 2 1 6 16 5 52 14 0 2 5 16 6 52 36 0 1 33 4 0 2 32 2 0 16 6 32 217 2 16 0 1 37 0 52 1 0 2 33 24 0 20 3 0 20 4 0 16 1 16 2 48 2 48 1 5 16 1 52 38 0 1 32 181 2 16 0 1 39 0 52 1 0 2 6 34 136 0 5 16 0 1 40 0 52 1 0 2 6 34 122 0 5 16 0 1 41 0 52 1 0 2 6 34 108 0 5 16 0 1 42 0 52 1 0 2 6 34 94 0 5 16 0 1 43 0 52 1 0 2 6 34 80 0 5 16 0 1 44 0 52 1 0 2 6 34 66 0 5 16 0 1 45 0 52 1 0 2 6 34 52 0 5 16 0 1 46 0 52 1 0 2 6 34 38 0 5 16 0 1 47 0 52 1 0 2 6 34 24 0 5 16 0 1 48 0 52 1 0 2 6 34 10 0 5 16 0 1 49 0 52 1 0 2 33 19 0 20 3 0 20 4 0 16 1 16 2 48 2 48 1 5 2 32 10 2 16 0 1 50 0 52 1 0 2 33 176 0 20 3 0 20 4 0 16 3 52 5 0 1 16 2 48 2 48 1 17 4 16 3 52 0 0 1 17 5 2 17 6 2 17 7 16 5 52 10 0 1 1 11 0 52 51 0 2 6 33 41 0 5 16 5 52 5 0 1 52 52 0 1 1 53 0 52 1 0 2 6 33 19 0 5 20 54 0 16 5 52 5 0 1 48 1 1 55 0 52 1 0 2 33 38 0 20 3 0 20 4 0 16 5 1 8 0 52 7 0 2 16 2 48 2 48 1 17 6 5 16 5 1 11 0 52 56 0 2 17 7 32 4 0 16 5 17 7 5 16 4 16 6 52 57 0 2 5 2 17 8 51 15 0 1 8 1 2 16 7 52 14 0 2 5 16 4 52 58 0 1 5 16 8 32 78 1 16 0 1 59 0 52 1 0 2 33 88 0 20 3 0 20 4 0 16 3 52 5 0 1 16 2 48 2 48 1 17 4 20 3 0 20 4 0 16 3 1 8 0 52 7 0 2 16 2 48 2 48 1 17 5 2 17 6 16 4 16 5 52 57 0 2 5 51 15 0 1 6 1 2 16 3 1 11 0 52 56 0 2 52 14 0 2 5 16 4 52 58 0 1 5 16 6 32 234 0 16 0 1 60 0 52 1 0 2 33 90 0 20 3 0 20 4 0 16 3 52 5 0 1 16 2 48 2 48 1 17 4 16 3 52 10 0 1 1 11 0 52 51 0 2 33 24 0 20 3 0 20 4 0 16 3 1 8 0 52 7 0 2 16 2 48 2 48 1 32 1 0 2 17 5 16 4 52 61 0 1 17 6 16 6 52 62 0 1 33 5 0 16 5 32 2 0 16 6 32 132 0 16 0 1 63 0 52 1 0 2 33 56 0 20 3 0 20 4 0 16 3 52 5 0 1 16 2 48 2 48 1 17 4 20 3 0 20 4 0 16 3 1 8 0 52 7 0 2 16 2 48 2 48 1 17 5 16 4 16 5 52 64 0 2 5 2 32 64 0 16 0 1 65 0 52 1 0 2 33 38 0 20 3 0 20 4 0 16 3 52 5 0 1 16 2 48 2 48 1 17 4 16 4 52 61 0 1 6 34 5 0 5 52 34 0 0 32 14 0 20 3 0 20 4 0 16 1 16 2 48 2 49 1 50)} "eval-case-aser" {:upvalue-count 0 :arity 3 :constants ("<" "len" 2 "first" "nth" 1 "=" "type-of" "keyword" "keyword-name" "else" "symbol" "symbol-name" ":else" "aser" "trampoline" "eval-expr" "eval-case-aser" "slice") :bytecode (16 1 52 1 0 1 1 2 0 52 0 0 2 33 4 0 2 32 175 0 16 1 52 3 0 1 17 3 16 1 1 5 0 52 4 0 2 17 4 16 3 52 7 0 1 1 8 0 52 6 0 2 6 33 15 0 5 20 9 0 16 3 48 1 1 10 0 52 6 0 2 6 34 52 0 5 16 3 52 7 0 1 1 11 0 52 6 0 2 6 33 34 0 5 20 12 0 16 3 48 1 1 13 0 52 6 0 2 6 34 15 0 5 20 12 0 16 3 48 1 1 10 0 52 6 0 2 33 12 0 20 14 0 16 4 16 2 49 2 32 53 0 16 0 20 15 0 20 16 0 16 3 16 2 48 2 48 1 52 6 0 2 33 12 0 20 14 0 16 4 16 2 49 2 32 18 0 20 17 0 16 0 16 1 1 2 0 52 18 0 2 16 2 49 3 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 1 16 0 1 17 0 1 18 0 1 19 0 1 20 0 1 21 0 1 22 0 1 23 0 1 24 0 1 25 0 1 26 0 1 27 0 1 28 0 1 29 0 1 30 0 1 31 0 1 32 0 1 33 0 1 34 0 1 35 0 1 36 0 1 37 0 1 38 0 1 39 0 1 40 0 1 41 0 1 42 0 1 43 0 1 44 0 1 45 0 1 46 0 1 47 0 1 48 0 1 49 0 1 50 0 52 15 0 35 128 14 0 5 1 52 0 1 53 0 1 54 0 1 55 0 1 56 0 1 57 0 1 58 0 52 15 0 7 128 51 0 5 51 60 0 128 59 0 5 51 62 0 128 61 0 5 51 64 0 128 63 0 5 51 66 0 128 65 0 50))) + :constants ("render-to-sx" {:upvalue-count 0 :arity 2 :constants ("aser" "=" "type-of" "sx-expr" "sx-expr-source" "string" "serialize") :bytecode (20 0 0 16 0 16 1 48 2 17 2 16 2 52 2 0 1 1 3 0 52 1 0 2 33 10 0 20 4 0 16 2 49 1 32 27 0 16 2 52 2 0 1 1 5 0 52 1 0 2 33 5 0 16 2 32 6 0 16 2 52 6 0 1 50)} "aser" {:upvalue-count 0 :arity 2 :constants ("set-render-active!" "type-of" "number" "=" "string" "boolean" "nil" "symbol" "symbol-name" "env-has?" "env-get" "primitive?" "get-primitive" "true" "false" "error" "str" "Undefined symbol: " "keyword" "keyword-name" "list" "empty?" "aser-list" "spread" "scope-emit!" "element-attrs" "spread-attrs" "spread?") :bytecode (20 0 0 3 48 1 5 16 0 52 1 0 1 6 1 2 0 52 3 0 2 33 6 0 5 16 0 32 16 1 6 1 4 0 52 3 0 2 33 6 0 5 16 0 32 255 0 6 1 5 0 52 3 0 2 33 6 0 5 16 0 32 238 0 6 1 6 0 52 3 0 2 33 5 0 5 2 32 222 0 6 1 7 0 52 3 0 2 33 116 0 5 20 8 0 16 0 48 1 17 3 20 9 0 16 1 16 3 48 2 33 12 0 20 10 0 16 1 16 3 48 2 32 79 0 16 3 52 11 0 1 33 9 0 16 3 52 12 0 1 32 61 0 16 3 1 13 0 52 3 0 2 33 4 0 3 32 45 0 16 3 1 14 0 52 3 0 2 33 4 0 4 32 29 0 16 3 1 6 0 52 3 0 2 33 4 0 2 32 13 0 1 17 0 16 3 52 16 0 2 52 15 0 1 32 95 0 6 1 18 0 52 3 0 2 33 11 0 5 20 19 0 16 0 48 1 32 73 0 6 1 20 0 52 3 0 2 33 29 0 5 16 0 52 21 0 1 33 7 0 52 20 0 0 32 9 0 20 22 0 16 0 16 1 48 2 32 33 0 6 1 23 0 52 3 0 2 33 19 0 5 1 25 0 16 0 52 26 0 1 52 24 0 2 5 2 32 3 0 5 16 0 17 2 16 2 52 27 0 1 33 18 0 1 25 0 16 2 52 26 0 1 52 24 0 2 5 2 32 2 0 16 2 50)} "aser-list" {:upvalue-count 0 :arity 2 :constants ("first" "rest" "not" "=" "type-of" "symbol" "map" {:upvalue-count 1 :arity 1 :constants ("aser") :bytecode (20 0 0 16 0 18 0 49 2 50)} "symbol-name" "<>" "aser-fragment" "raw!" "aser-call" "starts-with?" "~" "env-has?" "env-get" "expand-components?" "macro?" "aser" "expand-macro" "component?" "island?" "component-affinity" "server" "client" "aser-expand-component" "lake" "marsh" "error-boundary" "contains?" "HTML_TAGS" "special-form?" "ho-form?" "aser-special" "trampoline" "eval-expr" {:upvalue-count 1 :arity 1 :constants ("trampoline" "eval-expr") :bytecode (20 0 0 20 1 0 16 0 18 0 48 2 49 1 50)} "callable?" "lambda?" "apply" "call-lambda" "str" "component-name" "error" "Not callable: " "inspect") :bytecode (16 0 52 0 0 1 17 2 16 0 52 1 0 1 17 3 16 2 52 4 0 1 1 5 0 52 3 0 2 52 2 0 1 33 14 0 51 7 0 1 1 16 0 52 6 0 2 32 162 2 20 8 0 16 2 48 1 17 4 16 4 1 9 0 52 3 0 2 33 12 0 20 10 0 16 3 16 1 49 2 32 129 2 16 4 1 11 0 52 3 0 2 33 15 0 20 12 0 1 11 0 16 3 16 1 49 3 32 102 2 16 4 1 14 0 52 13 0 2 33 196 0 20 15 0 16 1 16 4 48 2 33 12 0 20 16 0 16 1 16 4 48 2 32 1 0 2 17 5 20 15 0 16 1 1 17 0 48 2 33 8 0 20 17 0 48 0 32 1 0 4 17 6 16 5 6 33 7 0 5 16 5 52 18 0 1 33 21 0 20 19 0 20 20 0 16 5 16 3 16 1 48 3 16 1 49 2 32 105 0 16 5 6 33 71 0 5 16 5 52 21 0 1 6 33 60 0 5 16 5 52 22 0 1 52 2 0 1 6 33 45 0 5 16 6 6 34 15 0 5 20 23 0 16 5 48 1 1 24 0 52 3 0 2 6 33 19 0 5 20 23 0 16 5 48 1 1 25 0 52 3 0 2 52 2 0 1 33 14 0 20 26 0 16 5 16 3 16 1 49 3 32 11 0 20 12 0 16 4 16 3 16 1 49 3 32 150 1 16 4 1 27 0 52 3 0 2 33 14 0 20 12 0 16 4 16 3 16 1 49 3 32 124 1 16 4 1 28 0 52 3 0 2 33 14 0 20 12 0 16 4 16 3 16 1 49 3 32 98 1 16 4 1 29 0 52 3 0 2 33 14 0 20 12 0 16 4 16 3 16 1 49 3 32 72 1 20 31 0 16 4 52 30 0 2 33 14 0 20 12 0 16 4 16 3 16 1 49 3 32 46 1 20 32 0 16 4 48 1 6 34 8 0 5 20 33 0 16 4 48 1 33 14 0 20 34 0 16 4 16 0 16 1 49 3 32 10 1 20 15 0 16 1 16 4 48 2 6 33 14 0 5 20 16 0 16 1 16 4 48 2 52 18 0 1 33 28 0 20 19 0 20 20 0 20 16 0 16 1 16 4 48 2 16 3 16 1 48 3 16 1 49 2 32 208 0 20 35 0 20 36 0 16 2 16 1 48 2 48 1 17 5 51 37 0 1 1 16 3 52 6 0 2 17 6 20 38 0 16 5 48 1 6 33 41 0 5 16 5 52 39 0 1 52 2 0 1 6 33 26 0 5 16 5 52 21 0 1 52 2 0 1 6 33 11 0 5 16 5 52 22 0 1 52 2 0 1 33 11 0 16 5 16 6 52 40 0 2 32 113 0 16 5 52 39 0 1 33 19 0 20 35 0 20 41 0 16 5 16 6 16 1 48 3 49 1 32 85 0 16 5 52 21 0 1 33 25 0 20 12 0 1 14 0 16 5 52 43 0 1 52 42 0 2 16 3 16 1 49 3 32 51 0 16 5 52 22 0 1 33 25 0 20 12 0 1 14 0 16 5 52 43 0 1 52 42 0 2 16 3 16 1 49 3 32 17 0 1 45 0 16 5 52 46 0 1 52 42 0 2 52 44 0 1 50)} "aser-reserialize" {:upvalue-count 0 :arity 1 :constants ("not" "=" "type-of" "list" "serialize" "empty?" "()" "first" "symbol" "symbol-name" "rest" 0 "for-each" {:upvalue-count 4 :arity 1 :constants ("inc" "=" "type-of" "string" "<" "len" "not" "contains?" " " "starts-with?" "class" "id" "sx-" "data-" "style" "href" "src" "type" "name" "value" "placeholder" "action" "method" "target" "role" "for" "on" "append!" "str" ":" "serialize" "nth" "aser-reserialize") :bytecode (18 0 33 15 0 4 19 0 5 18 1 52 0 0 1 19 1 32 116 1 16 0 52 2 0 1 1 3 0 52 1 0 2 6 33 17 1 5 18 1 52 0 0 1 18 2 52 5 0 1 52 4 0 2 6 33 252 0 5 16 0 1 8 0 52 7 0 2 52 6 0 1 6 33 234 0 5 16 0 1 10 0 52 9 0 2 6 34 220 0 5 16 0 1 11 0 52 9 0 2 6 34 206 0 5 16 0 1 12 0 52 9 0 2 6 34 192 0 5 16 0 1 13 0 52 9 0 2 6 34 178 0 5 16 0 1 14 0 52 9 0 2 6 34 164 0 5 16 0 1 15 0 52 9 0 2 6 34 150 0 5 16 0 1 16 0 52 9 0 2 6 34 136 0 5 16 0 1 17 0 52 9 0 2 6 34 122 0 5 16 0 1 18 0 52 9 0 2 6 34 108 0 5 16 0 1 19 0 52 9 0 2 6 34 94 0 5 16 0 1 20 0 52 9 0 2 6 34 80 0 5 16 0 1 21 0 52 9 0 2 6 34 66 0 5 16 0 1 22 0 52 9 0 2 6 34 52 0 5 16 0 1 23 0 52 9 0 2 6 34 38 0 5 16 0 1 24 0 52 9 0 2 6 34 24 0 5 16 0 1 25 0 52 9 0 2 6 34 10 0 5 16 0 1 26 0 52 9 0 2 33 56 0 20 27 0 18 3 1 29 0 16 0 52 28 0 2 48 2 5 20 27 0 18 3 18 2 18 1 52 0 0 1 52 31 0 2 52 30 0 1 48 2 5 3 19 0 5 18 1 52 0 0 1 19 1 32 23 0 20 27 0 18 3 20 32 0 16 0 48 1 48 2 5 18 1 52 0 0 1 19 1 50)} "str" "(" "join" " " ")") :bytecode (16 0 52 2 0 1 1 3 0 52 1 0 2 52 0 0 1 33 9 0 16 0 52 4 0 1 32 122 0 16 0 52 5 0 1 33 6 0 1 6 0 32 107 0 16 0 52 7 0 1 17 1 16 1 52 2 0 1 1 8 0 52 1 0 2 52 0 0 1 33 9 0 16 0 52 4 0 1 32 70 0 20 9 0 16 1 48 1 17 2 16 2 52 3 0 1 17 3 16 0 52 10 0 1 17 4 4 17 5 1 11 0 17 6 51 13 0 1 5 1 6 1 4 1 3 16 4 52 12 0 2 5 1 15 0 1 17 0 16 3 52 16 0 2 1 18 0 52 14 0 3 50)} "aser-fragment" {:upvalue-count 0 :arity 2 :constants ("list" "for-each" {:upvalue-count 2 :arity 1 :constants ("aser" "nil?" "=" "type-of" "sx-expr" "append!" "sx-expr-source" "list" "for-each" {:upvalue-count 1 :arity 1 :constants ("not" "nil?" "=" "type-of" "sx-expr" "append!" "sx-expr-source" "aser-reserialize") :bytecode (16 0 52 1 0 1 52 0 0 1 33 50 0 16 0 52 3 0 1 1 4 0 52 2 0 2 33 17 0 20 5 0 18 0 20 6 0 16 0 48 1 49 2 32 14 0 20 5 0 18 0 20 7 0 16 0 48 1 49 2 32 1 0 2 50)} "serialize") :bytecode (20 0 0 16 0 18 0 48 2 17 1 16 1 52 1 0 1 33 4 0 2 32 76 0 16 1 52 3 0 1 1 4 0 52 2 0 2 33 17 0 20 5 0 18 1 20 6 0 16 1 48 1 49 2 32 43 0 16 1 52 3 0 1 1 7 0 52 2 0 2 33 14 0 51 9 0 0 1 16 1 52 8 0 2 32 13 0 20 5 0 18 1 16 1 52 10 0 1 49 2 50)} "empty?" "" "=" "len" 1 "make-sx-expr" "first" "str" "(<> " "join" " " ")") :bytecode (52 0 0 0 17 2 51 2 0 1 1 1 2 16 0 52 1 0 2 5 16 2 52 3 0 1 33 6 0 1 4 0 32 54 0 16 2 52 6 0 1 1 7 0 52 5 0 2 33 14 0 20 8 0 16 2 52 9 0 1 49 1 32 24 0 20 8 0 1 11 0 1 13 0 16 2 52 12 0 2 1 14 0 52 10 0 3 49 1 50)} "aser-call" {:upvalue-count 0 :arity 3 :constants ("list" 0 "scope-push!" "element-attrs" "for-each" {:upvalue-count 6 :arity 1 :constants ("inc" "=" "type-of" "keyword" "<" "len" "aser" "nth" "not" "nil?" "append!" "str" ":" "keyword-name" "sx-expr" "sx-expr-source" "serialize" "list" "for-each" {:upvalue-count 1 :arity 1 :constants ("not" "nil?" "=" "type-of" "sx-expr" "append!" "sx-expr-source" "serialize") :bytecode (16 0 52 1 0 1 52 0 0 1 33 49 0 16 0 52 3 0 1 1 4 0 52 2 0 2 33 17 0 20 5 0 18 0 20 6 0 16 0 48 1 49 2 32 13 0 20 5 0 18 0 16 0 52 7 0 1 49 2 32 1 0 2 50)}) :bytecode (18 0 33 15 0 4 19 0 5 18 1 52 0 0 1 19 1 32 16 1 16 0 52 2 0 1 1 3 0 52 1 0 2 6 33 17 0 5 18 1 52 0 0 1 18 2 52 5 0 1 52 4 0 2 33 122 0 20 6 0 18 2 18 1 52 0 0 1 52 7 0 2 18 3 48 2 17 1 16 1 52 9 0 1 52 8 0 1 33 71 0 20 10 0 18 4 1 12 0 20 13 0 16 0 48 1 52 11 0 2 48 2 5 16 1 52 2 0 1 1 14 0 52 1 0 2 33 17 0 20 10 0 18 4 20 15 0 16 1 48 1 48 2 32 13 0 20 10 0 18 4 16 1 52 16 0 1 48 2 32 1 0 2 5 3 19 0 5 18 1 52 0 0 1 19 1 32 113 0 20 6 0 16 0 18 3 48 2 17 1 16 1 52 9 0 1 52 8 0 1 33 79 0 16 1 52 2 0 1 1 14 0 52 1 0 2 33 17 0 20 10 0 18 5 20 15 0 16 1 48 1 48 2 32 43 0 16 1 52 2 0 1 1 17 0 52 1 0 2 33 14 0 51 19 0 0 5 16 1 52 18 0 2 32 13 0 20 10 0 18 5 16 1 52 16 0 1 48 2 32 1 0 2 5 18 1 52 0 0 1 19 1 50)} {:upvalue-count 1 :arity 1 :constants ("for-each" {:upvalue-count 2 :arity 1 :constants ("dict-get" "append!" "str" ":" "serialize") :bytecode (18 0 16 0 52 0 0 2 17 1 20 1 0 18 1 1 3 0 16 0 52 2 0 2 48 2 5 20 1 0 18 1 16 1 52 4 0 1 49 2 50)} "keys") :bytecode (51 1 0 1 0 0 0 16 0 52 2 0 1 52 0 0 2 50)} "scope-peek" "scope-pop!" "concat" "make-sx-expr" "str" "(" "join" " " ")") :bytecode (52 0 0 0 17 3 52 0 0 0 17 4 4 17 5 1 1 0 17 6 1 3 0 2 52 2 0 2 5 51 5 0 1 5 1 6 1 1 1 2 1 3 1 4 16 1 52 4 0 2 5 51 6 0 1 3 1 3 0 52 7 0 1 52 4 0 2 5 1 3 0 52 8 0 1 5 16 0 52 0 0 1 16 3 16 4 52 9 0 3 17 7 20 10 0 1 12 0 1 14 0 16 7 52 13 0 2 1 15 0 52 11 0 3 49 1 50)} "aser-expand-component" {:upvalue-count 0 :arity 3 :constants ("component-params" "env-merge" "component-closure" 0 "list" "for-each" {:upvalue-count 1 :arity 1 :constants ("env-bind!") :bytecode (20 0 0 18 0 16 0 2 49 3 50)} {:upvalue-count 6 :arity 1 :constants ("inc" "=" "type-of" "keyword" "<" "len" "env-bind!" "keyword-name" "aser" "nth" "append!") :bytecode (18 0 33 15 0 4 19 0 5 18 1 52 0 0 1 19 1 32 104 0 16 0 52 2 0 1 1 3 0 52 1 0 2 6 33 17 0 5 18 1 52 0 0 1 18 2 52 5 0 1 52 4 0 2 33 49 0 20 6 0 18 3 20 7 0 16 0 48 1 20 8 0 18 2 18 1 52 0 0 1 52 9 0 2 18 4 48 2 48 3 5 3 19 0 5 18 1 52 0 0 1 19 1 32 18 0 20 10 0 18 5 16 0 48 2 5 18 1 52 0 0 1 19 1 50)} "component-has-children" "map" {:upvalue-count 1 :arity 1 :constants ("aser") :bytecode (20 0 0 16 0 18 0 49 2 50)} "env-bind!" "children" "=" "len" 1 "first" "aser" "component-body") :bytecode (16 0 52 0 0 1 17 3 20 1 0 16 2 16 0 52 2 0 1 48 2 17 4 1 3 0 17 5 4 17 6 52 4 0 0 17 7 51 6 0 1 4 16 3 52 5 0 2 5 51 7 0 1 6 1 5 1 1 1 4 1 2 1 7 16 1 52 5 0 2 5 20 8 0 16 0 48 1 33 53 0 51 10 0 1 2 16 7 52 9 0 2 17 8 20 11 0 16 4 1 12 0 16 8 52 14 0 1 1 15 0 52 13 0 2 33 9 0 16 8 52 16 0 1 32 2 0 16 8 48 3 32 1 0 2 5 20 17 0 16 0 52 18 0 1 16 4 49 2 50)} "SPECIAL_FORM_NAMES" "list" "if" "when" "cond" "case" "and" "or" "let" "let*" "lambda" "fn" "define" "defcomp" "defmacro" "defstyle" "defhandler" "defpage" "defquery" "defaction" "defrelation" "begin" "do" "quote" "quasiquote" "->" "set!" "letrec" "dynamic-wind" "defisland" "deftype" "defeffect" "scope" "provide" "context" "emit!" "emitted" "HO_FORM_NAMES" "map" "map-indexed" "filter" "reduce" "some" "every?" "for-each" "special-form?" {:upvalue-count 0 :arity 1 :constants ("contains?" "SPECIAL_FORM_NAMES") :bytecode (20 1 0 16 0 52 0 0 2 50)} "ho-form?" {:upvalue-count 0 :arity 1 :constants ("contains?" "HO_FORM_NAMES") :bytecode (20 1 0 16 0 52 0 0 2 50)} "aser-special" {:upvalue-count 0 :arity 3 :constants ("rest" "=" "if" "trampoline" "eval-expr" "first" "aser" "nth" 1 ">" "len" 2 "when" "not" "for-each" {:upvalue-count 2 :arity 1 :constants ("aser") :bytecode (20 0 0 16 0 18 1 48 2 19 0 50)} "cond" "eval-cond" "case" "eval-case-aser" "let" "let*" "process-bindings" "begin" "do" "and" "some" {:upvalue-count 2 :arity 1 :constants ("trampoline" "eval-expr" "not") :bytecode (20 0 0 20 1 0 16 0 18 1 48 2 48 1 19 0 5 18 0 52 2 0 1 50)} "or" {:upvalue-count 2 :arity 1 :constants ("trampoline" "eval-expr") :bytecode (20 0 0 20 1 0 16 0 18 1 48 2 48 1 19 0 5 18 0 50)} "map" {:upvalue-count 2 :arity 1 :constants ("lambda?" "env-merge" "lambda-closure" "env-bind!" "first" "lambda-params" "aser" "lambda-body" "cek-call" "list") :bytecode (18 0 52 0 0 1 33 51 0 20 1 0 18 0 52 2 0 1 18 1 48 2 17 1 20 3 0 16 1 18 0 52 5 0 1 52 4 0 1 16 0 48 3 5 20 6 0 18 0 52 7 0 1 16 1 49 2 32 13 0 20 8 0 18 0 16 0 52 9 0 1 49 2 50)} "map-indexed" {:upvalue-count 2 :arity 2 :constants ("lambda?" "env-merge" "lambda-closure" "env-bind!" "first" "lambda-params" "nth" 1 "aser" "lambda-body" "cek-call" "list") :bytecode (18 0 52 0 0 1 33 74 0 20 1 0 18 0 52 2 0 1 18 1 48 2 17 2 20 3 0 16 2 18 0 52 5 0 1 52 4 0 1 16 0 48 3 5 20 3 0 16 2 18 0 52 5 0 1 1 7 0 52 6 0 2 16 1 48 3 5 20 8 0 18 0 52 9 0 1 16 2 49 2 32 15 0 20 10 0 18 0 16 0 16 1 52 11 0 2 49 2 50)} "list" {:upvalue-count 3 :arity 1 :constants ("lambda?" "env-merge" "lambda-closure" "env-bind!" "first" "lambda-params" "append!" "aser" "lambda-body" "cek-call" "list") :bytecode (18 0 52 0 0 1 33 58 0 20 1 0 18 0 52 2 0 1 18 1 48 2 17 1 20 3 0 16 1 18 0 52 5 0 1 52 4 0 1 16 0 48 3 5 20 6 0 18 2 20 7 0 18 0 52 8 0 1 16 1 48 2 49 2 32 13 0 20 9 0 18 0 16 0 52 10 0 1 49 2 50)} "empty?" "defisland" "serialize" "define" "defcomp" "defmacro" "defstyle" "defhandler" "defpage" "defquery" "defaction" "defrelation" "deftype" "defeffect" "scope" ">=" "type-of" "keyword" "keyword-name" "value" "slice" "scope-push!" "scope-pop!" "provide" "context" "scope-peek" "nil?" "emit!" "scope-emit!" "emitted") :bytecode (16 1 52 0 0 1 17 3 16 0 1 2 0 52 1 0 2 33 79 0 20 3 0 20 4 0 16 3 52 5 0 1 16 2 48 2 48 1 33 19 0 20 6 0 16 3 1 8 0 52 7 0 2 16 2 49 2 32 36 0 16 3 52 10 0 1 1 11 0 52 9 0 2 33 19 0 20 6 0 16 3 1 11 0 52 7 0 2 16 2 49 2 32 1 0 2 32 34 5 16 0 1 12 0 52 1 0 2 33 55 0 20 3 0 20 4 0 16 3 52 5 0 1 16 2 48 2 48 1 52 13 0 1 33 4 0 2 32 23 0 2 17 4 51 15 0 1 4 1 2 16 3 52 0 0 1 52 14 0 2 5 16 4 32 223 4 16 0 1 16 0 52 1 0 2 33 32 0 20 17 0 16 3 16 2 48 2 17 4 16 4 33 12 0 20 6 0 16 4 16 2 49 2 32 1 0 2 32 179 4 16 0 1 18 0 52 1 0 2 33 42 0 20 3 0 20 4 0 16 3 52 5 0 1 16 2 48 2 48 1 17 4 16 3 52 0 0 1 17 5 20 19 0 16 4 16 5 16 2 49 3 32 125 4 16 0 1 20 0 52 1 0 2 6 34 10 0 5 16 0 1 21 0 52 1 0 2 33 41 0 20 22 0 16 3 52 5 0 1 16 2 48 2 17 4 2 17 5 51 15 0 1 5 1 4 16 3 52 0 0 1 52 14 0 2 5 16 5 32 58 4 16 0 1 23 0 52 1 0 2 6 34 10 0 5 16 0 1 24 0 52 1 0 2 33 22 0 2 17 4 51 15 0 1 4 1 2 16 3 52 14 0 2 5 16 4 32 10 4 16 0 1 25 0 52 1 0 2 33 22 0 3 17 4 51 27 0 1 4 1 2 16 3 52 26 0 2 5 16 4 32 232 3 16 0 1 28 0 52 1 0 2 33 22 0 4 17 4 51 29 0 1 4 1 2 16 3 52 26 0 2 5 16 4 32 198 3 16 0 1 30 0 52 1 0 2 33 59 0 20 3 0 20 4 0 16 3 52 5 0 1 16 2 48 2 48 1 17 4 20 3 0 20 4 0 16 3 1 8 0 52 7 0 2 16 2 48 2 48 1 17 5 51 31 0 1 4 1 2 16 5 52 30 0 2 32 127 3 16 0 1 32 0 52 1 0 2 33 59 0 20 3 0 20 4 0 16 3 52 5 0 1 16 2 48 2 48 1 17 4 20 3 0 20 4 0 16 3 1 8 0 52 7 0 2 16 2 48 2 48 1 17 5 51 33 0 1 4 1 2 16 5 52 32 0 2 32 56 3 16 0 1 14 0 52 1 0 2 33 83 0 20 3 0 20 4 0 16 3 52 5 0 1 16 2 48 2 48 1 17 4 20 3 0 20 4 0 16 3 1 8 0 52 7 0 2 16 2 48 2 48 1 17 5 52 34 0 0 17 6 51 35 0 1 4 1 2 1 6 16 5 52 14 0 2 5 16 6 52 36 0 1 33 4 0 2 32 2 0 16 6 32 217 2 16 0 1 37 0 52 1 0 2 33 24 0 20 3 0 20 4 0 16 1 16 2 48 2 48 1 5 16 1 52 38 0 1 32 181 2 16 0 1 39 0 52 1 0 2 6 34 136 0 5 16 0 1 40 0 52 1 0 2 6 34 122 0 5 16 0 1 41 0 52 1 0 2 6 34 108 0 5 16 0 1 42 0 52 1 0 2 6 34 94 0 5 16 0 1 43 0 52 1 0 2 6 34 80 0 5 16 0 1 44 0 52 1 0 2 6 34 66 0 5 16 0 1 45 0 52 1 0 2 6 34 52 0 5 16 0 1 46 0 52 1 0 2 6 34 38 0 5 16 0 1 47 0 52 1 0 2 6 34 24 0 5 16 0 1 48 0 52 1 0 2 6 34 10 0 5 16 0 1 49 0 52 1 0 2 33 19 0 20 3 0 20 4 0 16 1 16 2 48 2 48 1 5 2 32 10 2 16 0 1 50 0 52 1 0 2 33 176 0 20 3 0 20 4 0 16 3 52 5 0 1 16 2 48 2 48 1 17 4 16 3 52 0 0 1 17 5 2 17 6 2 17 7 16 5 52 10 0 1 1 11 0 52 51 0 2 6 33 41 0 5 16 5 52 5 0 1 52 52 0 1 1 53 0 52 1 0 2 6 33 19 0 5 20 54 0 16 5 52 5 0 1 48 1 1 55 0 52 1 0 2 33 38 0 20 3 0 20 4 0 16 5 1 8 0 52 7 0 2 16 2 48 2 48 1 17 6 5 16 5 1 11 0 52 56 0 2 17 7 32 4 0 16 5 17 7 5 16 4 16 6 52 57 0 2 5 2 17 8 51 15 0 1 8 1 2 16 7 52 14 0 2 5 16 4 52 58 0 1 5 16 8 32 78 1 16 0 1 59 0 52 1 0 2 33 88 0 20 3 0 20 4 0 16 3 52 5 0 1 16 2 48 2 48 1 17 4 20 3 0 20 4 0 16 3 1 8 0 52 7 0 2 16 2 48 2 48 1 17 5 2 17 6 16 4 16 5 52 57 0 2 5 51 15 0 1 6 1 2 16 3 1 11 0 52 56 0 2 52 14 0 2 5 16 4 52 58 0 1 5 16 6 32 234 0 16 0 1 60 0 52 1 0 2 33 90 0 20 3 0 20 4 0 16 3 52 5 0 1 16 2 48 2 48 1 17 4 16 3 52 10 0 1 1 11 0 52 51 0 2 33 24 0 20 3 0 20 4 0 16 3 1 8 0 52 7 0 2 16 2 48 2 48 1 32 1 0 2 17 5 16 4 52 61 0 1 17 6 16 6 52 62 0 1 33 5 0 16 5 32 2 0 16 6 32 132 0 16 0 1 63 0 52 1 0 2 33 56 0 20 3 0 20 4 0 16 3 52 5 0 1 16 2 48 2 48 1 17 4 20 3 0 20 4 0 16 3 1 8 0 52 7 0 2 16 2 48 2 48 1 17 5 16 4 16 5 52 64 0 2 5 2 32 64 0 16 0 1 65 0 52 1 0 2 33 38 0 20 3 0 20 4 0 16 3 52 5 0 1 16 2 48 2 48 1 17 4 16 4 52 61 0 1 6 34 5 0 5 52 34 0 0 32 14 0 20 3 0 20 4 0 16 1 16 2 48 2 49 1 50)} "eval-case-aser" {:upvalue-count 0 :arity 3 :constants ("<" "len" 2 "first" "nth" 1 "=" "type-of" "keyword" "keyword-name" "else" "symbol" "symbol-name" ":else" "aser" "trampoline" "eval-expr" "eval-case-aser" "slice") :bytecode (16 1 52 1 0 1 1 2 0 52 0 0 2 33 4 0 2 32 175 0 16 1 52 3 0 1 17 3 16 1 1 5 0 52 4 0 2 17 4 16 3 52 7 0 1 1 8 0 52 6 0 2 6 33 15 0 5 20 9 0 16 3 48 1 1 10 0 52 6 0 2 6 34 52 0 5 16 3 52 7 0 1 1 11 0 52 6 0 2 6 33 34 0 5 20 12 0 16 3 48 1 1 13 0 52 6 0 2 6 34 15 0 5 20 12 0 16 3 48 1 1 10 0 52 6 0 2 33 12 0 20 14 0 16 4 16 2 49 2 32 53 0 16 0 20 15 0 20 16 0 16 3 16 2 48 2 48 1 52 6 0 2 33 12 0 20 14 0 16 4 16 2 49 2 32 18 0 20 17 0 16 0 16 1 1 2 0 52 18 0 2 16 2 49 3 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 1 16 0 1 17 0 1 18 0 1 19 0 1 20 0 1 21 0 1 22 0 1 23 0 1 24 0 1 25 0 1 26 0 1 27 0 1 28 0 1 29 0 1 30 0 1 31 0 1 32 0 1 33 0 1 34 0 1 35 0 1 36 0 1 37 0 1 38 0 1 39 0 1 40 0 1 41 0 1 42 0 1 43 0 1 44 0 1 45 0 1 46 0 1 47 0 1 48 0 1 49 0 1 50 0 52 15 0 35 128 14 0 5 1 52 0 1 53 0 1 54 0 1 55 0 1 56 0 1 57 0 1 58 0 52 15 0 7 128 51 0 5 51 60 0 128 59 0 5 51 62 0 128 61 0 5 51 64 0 128 63 0 5 51 66 0 128 65 0 50))) diff --git a/shared/static/wasm/sx/boot-helpers.sx b/shared/static/wasm/sx/boot-helpers.sx index ed761a98..211f5a1d 100644 --- a/shared/static/wasm/sx/boot-helpers.sx +++ b/shared/static/wasm/sx/boot-helpers.sx @@ -508,18 +508,17 @@ boost-el (let ((attr (dom-get-attr boost-el "sx-boost"))) - (if (and attr (not (= attr "true"))) attr "#main-panel")) - "#main-panel"))) + (if (and attr (not (= attr "true"))) attr "#sx-content")) + "#sx-content"))) (if (try-client-route (url-pathname href) target-sel) (do (browser-push-state nil "" href) (browser-scroll-to 0 0)) (do - (when - (not (dom-has-attr? link "sx-get")) - (dom-set-attr link "sx-get" href)) - (when - (not (dom-has-attr? link "sx-push-url")) - (dom-set-attr link "sx-push-url" "true")) + (log-info (str "sx:route server fetch " href)) + (dom-set-attr link "sx-get" href) + (dom-set-attr link "sx-target" target-sel) + (dom-set-attr link "sx-select" target-sel) + (dom-set-attr link "sx-push-url" "true") (execute-request link nil nil))))))))) (define sw-post-message (fn (msg) nil)) @@ -604,7 +603,7 @@ (fn (expr) (let - ((result (render-to-dom expr (get-render-env nil) nil))) + ((result (try-catch (fn () (render-to-dom expr (get-render-env nil) nil)) (fn (err) (log-error (str "sx-render: " err)) (let ((el (dom-create-element "div" nil))) (dom-set-attr el "class" "sx-render-error") (dom-set-attr el "style" "color:red;font-size:0.875rem;padding:0.5rem;border:1px solid red;border-radius:4px;margin:0.25rem 0;") (dom-set-text-content el (str "Render error: " err)) el))))) (when result (dom-append frag result)))) exprs) (scope-pop! "sx-render-markers") @@ -630,7 +629,15 @@ (and text (> (len text) 0)) (let ((exprs (sx-parse text))) - (for-each (fn (expr) (cek-eval expr)) exprs)))))) + (for-each + (fn + (expr) + (try-catch + (fn () (cek-eval expr)) + (fn + (err) + (log-error (str "sx-process-scripts: " err))))) + exprs)))))) scripts)))) (define @@ -641,7 +648,10 @@ selector (let ((selected (dom-query container selector))) - (if selected selected (children-to-fragment container))) + (if + selected + (children-to-fragment selected) + (children-to-fragment container))) (children-to-fragment container)))) (define diff --git a/shared/static/wasm/sx/boot-helpers.sxbc b/shared/static/wasm/sx/boot-helpers.sxbc index cc884c06..9b057f5d 100644 --- a/shared/static/wasm/sx/boot-helpers.sxbc +++ b/shared/static/wasm/sx/boot-helpers.sxbc @@ -1,3 +1,3 @@ -(sxbc 1 "8a9c612ae986efc4" +(sxbc 1 "caa7735c3363e49c" (code - :constants ("_sx-bound-prefix" "_sxBound" "mark-processed!" {:upvalue-count 0 :arity 2 :constants ("host-set!" "str" "_sx-bound-prefix") :bytecode (20 0 0 16 0 20 2 0 16 1 52 1 0 2 3 49 3 50)} "is-processed?" {:upvalue-count 0 :arity 2 :constants ("host-get" "str" "_sx-bound-prefix") :bytecode (20 0 0 16 0 20 2 0 16 1 52 1 0 2 48 2 17 2 16 2 33 4 0 3 32 1 0 4 50)} "clear-processed!" {:upvalue-count 0 :arity 2 :constants ("host-set!" "str" "_sx-bound-prefix") :bytecode (20 0 0 16 0 20 2 0 16 1 52 1 0 2 2 49 3 50)} "callable?" {:upvalue-count 0 :arity 1 :constants ("type-of" "=" "lambda" "native-fn" "continuation") :bytecode (16 0 52 0 0 1 17 1 16 1 1 2 0 52 1 0 2 6 34 24 0 5 16 1 1 3 0 52 1 0 2 6 34 10 0 5 16 1 1 4 0 52 1 0 2 50)} "to-kebab" {:upvalue-count 0 :arity 1 :constants ("Convert camelCase to kebab-case." "list" 0 {:upvalue-count 3 :arity 1 :constants ("<" "len" "nth" ">=" "A" "<=" "Z" ">" 0 "append!" "-" "lower" "+" 1) :bytecode (16 0 18 0 52 1 0 1 52 0 0 2 33 105 0 18 0 16 0 52 2 0 2 17 1 16 1 1 4 0 52 3 0 2 6 33 10 0 5 16 1 1 6 0 52 5 0 2 33 43 0 16 0 1 8 0 52 7 0 2 33 13 0 20 9 0 18 1 1 10 0 48 2 32 1 0 2 5 20 9 0 18 1 16 1 52 11 0 1 48 2 32 9 0 20 9 0 18 1 16 1 48 2 5 18 2 16 0 1 13 0 52 12 0 2 49 1 32 1 0 2 50)} "join" "") :bytecode (1 0 0 5 52 1 0 0 17 1 1 2 0 17 2 2 17 3 51 3 0 1 0 1 1 1 3 17 3 16 3 1 2 0 48 1 5 1 5 0 16 1 52 4 0 2 50)} "sx-load-components" {:upvalue-count 0 :arity 1 :constants ("Parse and evaluate component definitions from text." ">" "len" 0 "sx-parse" "for-each" {:upvalue-count 0 :arity 1 :constants ("cek-eval") :bytecode (20 0 0 16 0 49 1 50)}) :bytecode (1 0 0 5 16 0 6 33 14 0 5 16 0 52 2 0 1 1 3 0 52 1 0 2 33 21 0 20 4 0 16 0 48 1 17 1 51 6 0 16 1 52 5 0 2 32 1 0 2 50)} "call-expr" {:upvalue-count 0 :arity 2 :constants ("Parse and evaluate an SX expression string." "sx-parse" "not" "empty?" "cek-eval" "first") :bytecode (1 0 0 5 20 1 0 16 0 48 1 17 2 16 2 52 3 0 1 52 2 0 1 33 14 0 20 4 0 16 2 52 5 0 1 49 1 32 1 0 2 50)} "base-env" {:upvalue-count 0 :arity 0 :constants ("Return the current global environment." "global-env") :bytecode (1 0 0 5 20 1 0 49 0 50)} "get-render-env" {:upvalue-count 0 :arity 1 :constants ("Get the rendering environment (global env, optionally merged with extra)." "base-env" "not" "nil?" "env-merge") :bytecode (1 0 0 5 20 1 0 48 0 17 1 16 0 6 33 11 0 5 16 0 52 3 0 1 52 2 0 1 33 12 0 20 4 0 16 1 16 0 49 2 32 2 0 16 1 50)} "merge-envs" {:upvalue-count 0 :arity 2 :constants ("Merge two environments." "env-merge" "global-env") :bytecode (1 0 0 5 16 0 6 33 3 0 5 16 1 33 12 0 20 1 0 16 0 16 1 49 2 32 19 0 16 0 6 34 13 0 5 16 1 6 34 6 0 5 20 2 0 49 0 50)} "sx-render-with-env" {:upvalue-count 0 :arity 2 :constants ("Parse SX source and render to DOM fragment." "host-global" "document" "host-call" "createDocumentFragment" "sx-parse" "for-each" {:upvalue-count 2 :arity 1 :constants ("render-to-html" ">" "len" 0 "host-call" "createElement" "template" "host-set!" "innerHTML" "appendChild" "host-get" "content") :bytecode (20 0 0 16 0 48 1 17 1 16 1 6 33 14 0 5 16 1 52 2 0 1 1 3 0 52 1 0 2 33 51 0 20 4 0 18 0 1 5 0 1 6 0 48 3 17 2 20 7 0 16 2 1 8 0 16 1 48 3 5 20 4 0 18 1 1 9 0 20 10 0 16 2 1 11 0 48 2 49 3 32 1 0 2 50)}) :bytecode (1 0 0 5 20 1 0 1 2 0 48 1 17 2 20 3 0 16 2 1 4 0 48 2 17 3 20 5 0 16 0 48 1 17 4 51 7 0 1 2 1 3 16 4 52 6 0 2 5 16 3 50)} "parse-env-attr" {:upvalue-count 0 :arity 1 :constants ("Parse data-sx-env attribute (JSON key-value pairs).") :bytecode (1 0 0 5 2 50)} "store-env-attr" {:upvalue-count 0 :arity 3 :constants () :bytecode (2 50)} "resolve-mount-target" {:upvalue-count 0 :arity 1 :constants ("Resolve a CSS selector string to a DOM element." "string?" "dom-query") :bytecode (1 0 0 5 16 0 52 1 0 1 33 10 0 20 2 0 16 0 49 1 32 2 0 16 0 50)} "remove-head-element" {:upvalue-count 0 :arity 1 :constants ("Remove a element matching selector." "dom-query" "dom-remove") :bytecode (1 0 0 5 20 1 0 16 0 48 1 17 1 16 1 33 10 0 20 2 0 16 1 49 1 32 1 0 2 50)} "set-sx-comp-cookie" {:upvalue-count 0 :arity 1 :constants ("set-cookie" "sx-components") :bytecode (1 1 0 16 0 52 0 0 2 50)} "clear-sx-comp-cookie" {:upvalue-count 0 :arity 0 :constants ("set-cookie" "sx-components" "") :bytecode (1 1 0 1 2 0 52 0 0 2 50)} "log-parse-error" {:upvalue-count 0 :arity 3 :constants ("log-error" "str" "Parse error in " ": ") :bytecode (20 0 0 1 2 0 16 0 1 3 0 16 2 52 1 0 4 49 1 50)} "loaded-component-names" {:upvalue-count 0 :arity 0 :constants ("dom-query-all" "dom-body" "script[data-components]" "list" "for-each" {:upvalue-count 1 :arity 1 :constants ("dom-get-attr" "data-components" "" ">" "len" 0 "for-each" {:upvalue-count 1 :arity 1 :constants (">" "len" "trim" 0 "append!") :bytecode (16 0 52 2 0 1 52 1 0 1 1 3 0 52 0 0 2 33 16 0 20 4 0 18 0 16 0 52 2 0 1 49 2 32 1 0 2 50)} "split" ",") :bytecode (20 0 0 16 0 1 1 0 48 2 6 34 4 0 5 1 2 0 17 1 16 1 52 4 0 1 1 5 0 52 3 0 2 33 21 0 51 7 0 0 0 16 1 1 9 0 52 8 0 2 52 6 0 2 32 1 0 2 50)}) :bytecode (20 0 0 20 1 0 48 0 1 2 0 48 2 17 0 52 3 0 0 17 1 51 5 0 1 1 16 0 52 4 0 2 5 16 1 50)} "csrf-token" {:upvalue-count 0 :arity 0 :constants ("dom-query" "meta[name=\"csrf-token\"]" "dom-get-attr" "content") :bytecode (20 0 0 1 1 0 48 1 17 0 16 0 33 13 0 20 2 0 16 0 1 3 0 49 2 32 1 0 2 50)} "validate-for-request" {:upvalue-count 0 :arity 1 :constants () :bytecode (3 50)} "build-request-body" {:upvalue-count 0 :arity 3 :constants ("upper" "=" "GET" "HEAD" "dom-tag-name" "" "FORM" "host-new" "FormData" "URLSearchParams" "host-call" "toString" "dict" "url" ">" "len" 0 "str" "contains?" "?" "&" "body" "content-type" "dom-get-attr" "enctype" "application/x-www-form-urlencoded" "multipart/form-data") :bytecode (16 1 52 0 0 1 17 3 16 3 1 2 0 52 1 0 2 6 34 10 0 5 16 3 1 3 0 52 1 0 2 33 167 0 16 0 6 33 27 0 5 20 4 0 16 0 48 1 6 34 4 0 5 1 5 0 52 0 0 1 1 6 0 52 1 0 2 33 111 0 20 7 0 1 8 0 16 0 48 2 17 4 20 7 0 1 9 0 16 4 48 2 17 5 20 10 0 16 5 1 11 0 48 2 17 6 1 13 0 16 6 6 33 14 0 5 16 6 52 15 0 1 1 16 0 52 14 0 2 33 32 0 16 2 16 2 1 19 0 52 18 0 2 33 6 0 1 20 0 32 3 0 1 19 0 16 6 52 17 0 3 32 2 0 16 2 1 21 0 2 1 22 0 2 52 12 0 6 32 17 0 1 13 0 16 2 1 21 0 2 1 22 0 2 52 12 0 6 32 173 0 16 0 6 33 27 0 5 20 4 0 16 0 48 1 6 34 4 0 5 1 5 0 52 0 0 1 1 6 0 52 1 0 2 33 120 0 20 23 0 16 0 1 24 0 48 2 6 34 4 0 5 1 25 0 17 4 16 4 1 26 0 52 1 0 2 33 33 0 20 7 0 1 8 0 16 0 48 2 17 5 1 13 0 16 2 1 21 0 16 5 1 22 0 2 52 12 0 6 32 52 0 20 7 0 1 8 0 16 0 48 2 17 5 20 7 0 1 9 0 16 5 48 2 17 6 1 13 0 16 2 1 21 0 20 10 0 16 6 1 11 0 48 2 1 22 0 1 25 0 52 12 0 6 32 17 0 1 13 0 16 2 1 21 0 2 1 22 0 2 52 12 0 6 50)} "abort-previous-target" {:upvalue-count 0 :arity 1 :constants () :bytecode (2 50)} "abort-previous" "track-controller" {:upvalue-count 0 :arity 2 :constants () :bytecode (2 50)} "track-controller-target" "new-abort-controller" {:upvalue-count 0 :arity 0 :constants ("host-new" "AbortController") :bytecode (20 0 0 1 1 0 49 1 50)} "abort-signal" {:upvalue-count 0 :arity 1 :constants ("host-get" "signal") :bytecode (20 0 0 16 0 1 1 0 49 2 50)} "apply-optimistic" "revert-optimistic" "dom-has-attr?" {:upvalue-count 0 :arity 2 :constants ("host-call" "hasAttribute") :bytecode (20 0 0 16 0 1 1 0 16 1 49 3 50)} "show-indicator" {:upvalue-count 0 :arity 1 :constants ("dom-get-attr" "sx-indicator" "dom-query" "dom-remove-class" "hidden" "dom-add-class" "sx-indicator-visible") :bytecode (20 0 0 16 0 1 1 0 48 2 17 1 16 1 33 42 0 20 2 0 16 1 48 1 17 2 16 2 33 24 0 20 3 0 16 2 1 4 0 48 2 5 20 5 0 16 2 1 6 0 48 2 32 1 0 2 32 1 0 2 5 16 1 50)} "disable-elements" {:upvalue-count 0 :arity 1 :constants ("dom-get-attr" "sx-disabled-elt" "dom-query-all" "dom-body" "for-each" {:upvalue-count 0 :arity 1 :constants ("dom-set-attr" "disabled" "") :bytecode (20 0 0 16 0 1 1 0 1 2 0 49 3 50)} "list") :bytecode (20 0 0 16 0 1 1 0 48 2 17 1 16 1 33 29 0 20 2 0 20 3 0 48 0 16 1 48 2 17 2 51 5 0 16 2 52 4 0 2 5 16 2 32 4 0 52 6 0 0 50)} "clear-loading-state" {:upvalue-count 0 :arity 3 :constants ("dom-remove-class" "sx-request" "dom-remove-attr" "aria-busy" "dom-query" "dom-add-class" "hidden" "sx-indicator-visible" "for-each" {:upvalue-count 0 :arity 1 :constants ("dom-remove-attr" "disabled") :bytecode (20 0 0 16 0 1 1 0 49 2 50)}) :bytecode (20 0 0 16 0 1 1 0 48 2 5 20 2 0 16 0 1 3 0 48 2 5 16 1 33 42 0 20 4 0 16 1 48 1 17 3 16 3 33 24 0 20 5 0 16 3 1 6 0 48 2 5 20 0 0 16 3 1 7 0 48 2 32 1 0 2 32 1 0 2 5 16 2 33 12 0 51 9 0 16 2 52 8 0 2 32 1 0 2 50)} "abort-error?" {:upvalue-count 0 :arity 1 :constants ("=" "host-get" "name" "AbortError") :bytecode (20 1 0 16 0 1 2 0 48 2 1 3 0 52 0 0 2 50)} "promise-catch" {:upvalue-count 0 :arity 2 :constants ("host-callback" "host-call" "catch") :bytecode (20 0 0 16 1 48 1 17 2 20 1 0 16 0 1 2 0 16 2 49 3 50)} "fetch-request" {:upvalue-count 0 :arity 3 :constants ("get" "url" "method" "GET" "headers" "dict" "body" "signal" "preloaded" 200 {:upvalue-count 0 :arity 1 :constants () :bytecode (2 50)} "host-new" "Headers" "Object" "for-each" {:upvalue-count 2 :arity 1 :constants ("host-call" "set" "get") :bytecode (20 0 0 18 0 1 1 0 16 0 18 1 16 0 52 2 0 2 49 4 50)} "keys" "host-set!" "promise-then" "host-call" "dom-window" "fetch" {:upvalue-count 2 :arity 1 :constants ("host-get" "ok" "status" {:upvalue-count 1 :arity 1 :constants ("host-call" "host-get" "headers" "get") :bytecode (20 0 0 20 1 0 18 0 1 2 0 48 2 1 3 0 16 0 49 3 50)} "promise-then" "host-call" "text" {:upvalue-count 4 :arity 1 :constants () :bytecode (18 0 18 1 18 2 18 3 16 0 49 4 50)}) :bytecode (20 0 0 16 0 1 1 0 48 2 17 1 20 0 0 16 0 1 2 0 48 2 17 2 51 3 0 1 0 17 3 20 4 0 20 5 0 16 0 1 6 0 48 2 51 7 0 0 0 1 1 1 2 1 3 18 1 49 3 50)}) :bytecode (16 0 1 1 0 52 0 0 2 17 3 16 0 1 2 0 52 0 0 2 6 34 4 0 5 1 3 0 17 4 16 0 1 4 0 52 0 0 2 6 34 5 0 5 52 5 0 0 17 5 16 0 1 6 0 52 0 0 2 17 6 16 0 1 7 0 52 0 0 2 17 7 16 0 1 8 0 52 0 0 2 17 8 16 8 33 16 0 16 1 3 1 9 0 51 10 0 16 8 49 4 32 139 0 20 11 0 1 12 0 48 1 17 9 20 11 0 1 13 0 48 1 17 10 51 15 0 1 9 1 5 16 5 52 16 0 1 52 14 0 2 5 20 17 0 16 10 1 2 0 16 4 48 3 5 20 17 0 16 10 1 4 0 16 9 48 3 5 16 6 33 15 0 20 17 0 16 10 1 6 0 16 6 48 3 32 1 0 2 5 16 7 33 15 0 20 17 0 16 10 1 7 0 16 7 48 3 32 1 0 2 5 20 18 0 20 19 0 20 20 0 48 0 1 21 0 16 3 16 10 48 4 51 22 0 1 1 1 2 16 2 49 3 50)} "fetch-location" {:upvalue-count 0 :arity 1 :constants ("dom-query" "[sx-boost]" "#main-panel" "browser-navigate") :bytecode (20 0 0 1 1 0 48 1 6 34 9 0 5 20 0 0 1 2 0 48 1 17 1 16 1 33 10 0 20 3 0 16 0 49 1 32 1 0 2 50)} "fetch-and-restore" {:upvalue-count 0 :arity 4 :constants ("fetch-request" "dict" "url" "method" "GET" "headers" "body" "signal" {:upvalue-count 2 :arity 4 :constants ("dom-set-inner-html" "post-swap" "host-call" "dom-window" "scrollTo" 0) :bytecode (16 0 33 39 0 20 0 0 18 0 16 3 48 2 5 20 1 0 18 0 48 1 5 20 2 0 20 3 0 48 0 1 4 0 1 5 0 18 1 49 4 32 1 0 2 50)} {:upvalue-count 0 :arity 1 :constants ("log-warn" "str" "fetch-and-restore error: ") :bytecode (20 0 0 1 2 0 16 0 52 1 0 2 49 1 50)}) :bytecode (20 0 0 1 2 0 16 1 1 3 0 1 4 0 1 5 0 16 2 1 6 0 2 1 7 0 2 52 1 0 10 51 8 0 1 0 1 3 51 9 0 49 3 50)} "fetch-preload" {:upvalue-count 0 :arity 3 :constants ("fetch-request" "dict" "url" "method" "GET" "headers" "body" "signal" {:upvalue-count 2 :arity 4 :constants ("preload-cache-set") :bytecode (16 0 33 14 0 20 0 0 18 0 18 1 16 3 49 3 32 1 0 2 50)} {:upvalue-count 0 :arity 1 :constants () :bytecode (2 50)}) :bytecode (20 0 0 1 2 0 16 0 1 3 0 1 4 0 1 5 0 16 1 1 6 0 2 1 7 0 2 52 1 0 10 51 8 0 1 2 1 0 51 9 0 49 3 50)} "fetch-streaming" {:upvalue-count 0 :arity 4 :constants ("fetch-and-restore" 0) :bytecode (20 0 0 16 0 16 1 16 2 1 1 0 49 4 50)} "dom-parse-html-document" {:upvalue-count 0 :arity 1 :constants ("host-new" "DOMParser" "host-call" "parseFromString" "text/html") :bytecode (20 0 0 1 1 0 48 1 17 1 20 2 0 16 1 1 3 0 16 0 1 4 0 49 4 50)} "dom-body-inner-html" {:upvalue-count 0 :arity 1 :constants ("host-get" "body" "innerHTML") :bytecode (20 0 0 20 0 0 16 0 1 1 0 48 2 1 2 0 49 2 50)} "create-script-clone" {:upvalue-count 0 :arity 1 :constants ("host-global" "document" "host-call" "createElement" "script" "host-get" "attributes" {:upvalue-count 3 :arity 1 :constants ("<" "host-get" "length" "host-call" "item" "setAttribute" "name" "value" "+" 1) :bytecode (16 0 20 1 0 18 0 1 2 0 48 2 52 0 0 2 33 61 0 20 3 0 18 0 1 4 0 16 0 48 3 17 1 20 3 0 18 1 1 5 0 20 1 0 16 1 1 6 0 48 2 20 1 0 16 1 1 7 0 48 2 48 4 5 18 2 16 0 1 9 0 52 8 0 2 49 1 32 1 0 2 50)} 0 "host-set!" "textContent") :bytecode (20 0 0 1 1 0 48 1 17 1 20 2 0 16 1 1 3 0 1 4 0 48 3 17 2 20 5 0 16 0 1 6 0 48 2 17 3 2 17 4 51 7 0 1 3 1 2 1 4 17 4 16 4 1 8 0 48 1 5 20 9 0 16 2 1 10 0 20 5 0 16 0 1 10 0 48 2 48 3 5 16 2 50)} "cross-origin?" {:upvalue-count 0 :arity 1 :constants ("starts-with?" "http://" "https://" "not" "browser-location-origin") :bytecode (16 0 1 1 0 52 0 0 2 6 34 10 0 5 16 0 1 2 0 52 0 0 2 33 18 0 16 0 20 4 0 48 0 52 0 0 2 52 3 0 1 32 1 0 4 50)} "browser-scroll-to" {:upvalue-count 0 :arity 2 :constants ("host-call" "dom-window" "scrollTo") :bytecode (20 0 0 20 1 0 48 0 1 2 0 16 0 16 1 49 4 50)} "with-transition" {:upvalue-count 0 :arity 2 :constants ("host-get" "host-global" "document" "startViewTransition" "host-call" "host-callback") :bytecode (16 0 6 33 17 0 5 20 0 0 20 1 0 1 2 0 48 1 1 3 0 48 2 33 26 0 20 4 0 20 1 0 1 2 0 48 1 1 3 0 20 5 0 16 1 48 1 49 3 32 4 0 16 1 49 0 50)} "observe-intersection" {:upvalue-count 0 :arity 4 :constants ("host-callback" {:upvalue-count 4 :arity 1 :constants ("for-each" {:upvalue-count 4 :arity 1 :constants ("host-get" "isIntersecting" "set-timeout" {:upvalue-count 2 :arity 0 :constants () :bytecode (18 0 18 1 49 1 50)} "host-call" "observer" "unobserve") :bytecode (20 0 0 16 0 1 1 0 48 2 33 54 0 18 0 33 17 0 20 2 0 51 3 0 0 1 1 0 18 0 48 2 32 6 0 18 1 16 0 48 1 5 18 2 33 16 0 20 4 0 20 5 0 1 6 0 18 3 49 3 32 1 0 2 32 1 0 2 50)} "host-call" "forEach" "host-callback" {:upvalue-count 0 :arity 1 :constants () :bytecode (16 0 50)}) :bytecode (51 1 0 0 0 0 1 0 2 0 3 20 2 0 16 0 1 3 0 20 4 0 51 5 0 48 1 48 3 52 0 0 2 50)} "host-new" "IntersectionObserver" {:upvalue-count 5 :arity 1 :constants ("host-get" "length" {:upvalue-count 8 :arity 1 :constants ("<" "host-call" "item" "host-get" "isIntersecting" "set-timeout" {:upvalue-count 2 :arity 0 :constants () :bytecode (18 0 18 1 49 1 50)} "unobserve" "+" 1) :bytecode (16 0 18 0 52 0 0 2 33 105 0 20 1 0 18 1 1 2 0 16 0 48 3 17 1 16 1 6 33 11 0 5 20 3 0 16 1 1 4 0 48 2 33 53 0 18 2 33 17 0 20 5 0 51 6 0 0 3 1 1 18 2 48 2 32 6 0 18 3 16 1 48 1 5 18 4 33 15 0 20 1 0 18 5 1 7 0 18 6 48 3 32 1 0 2 32 1 0 2 5 18 7 16 0 1 9 0 52 8 0 2 49 1 32 1 0 2 50)} 0) :bytecode (20 0 0 16 0 1 1 0 48 2 17 1 2 17 2 51 2 0 1 1 1 0 0 0 0 1 0 2 0 3 0 4 1 2 17 2 16 2 1 3 0 49 1 50)} "host-call" "observe") :bytecode (20 0 0 51 1 0 1 3 1 1 1 2 1 0 48 1 17 4 20 2 0 1 3 0 20 0 0 51 4 0 1 3 1 1 1 2 1 5 1 0 48 1 48 2 17 5 20 5 0 16 5 1 6 0 16 0 48 3 5 16 5 50)} "event-source-connect" {:upvalue-count 0 :arity 2 :constants ("host-new" "EventSource" "host-set!" "_sxElement") :bytecode (20 0 0 1 1 0 16 0 48 2 17 2 20 2 0 16 2 1 3 0 16 1 48 3 5 16 2 50)} "event-source-listen" {:upvalue-count 0 :arity 3 :constants ("host-call" "addEventListener" "host-callback" {:upvalue-count 1 :arity 1 :constants () :bytecode (18 0 16 0 49 1 50)}) :bytecode (20 0 0 16 0 1 1 0 16 1 20 2 0 51 3 0 1 2 48 1 49 4 50)} "bind-boost-link" {:upvalue-count 0 :arity 2 :constants ("dom-listen" "click" {:upvalue-count 2 :arity 1 :constants ("not" "event-modifier-key?" "prevent-default" "dom-has-attr?" "sx-get" "dom-set-attr" "sx-push-url" "true" "execute-request") :bytecode (20 1 0 16 0 48 1 52 0 0 1 33 89 0 20 2 0 16 0 48 1 5 20 3 0 18 0 1 4 0 48 2 52 0 0 1 33 15 0 20 5 0 18 0 1 4 0 18 1 48 3 32 1 0 2 5 20 3 0 18 0 1 6 0 48 2 52 0 0 1 33 16 0 20 5 0 18 0 1 6 0 1 7 0 48 3 32 1 0 2 5 20 8 0 18 0 2 2 49 3 32 1 0 2 50)}) :bytecode (20 0 0 16 0 1 1 0 51 2 0 1 0 1 1 49 3 50)} "bind-boost-form" {:upvalue-count 0 :arity 3 :constants ("dom-listen" "submit" {:upvalue-count 1 :arity 1 :constants ("prevent-default" "execute-request") :bytecode (20 0 0 16 0 48 1 5 20 1 0 18 0 2 2 49 3 50)}) :bytecode (20 0 0 16 0 1 1 0 51 2 0 1 0 49 3 50)} "bind-client-route-click" {:upvalue-count 0 :arity 3 :constants ("dom-listen" "click" {:upvalue-count 2 :arity 1 :constants ("not" "event-modifier-key?" "prevent-default" "dom-query" "[sx-boost]" "dom-get-attr" "sx-boost" "=" "true" "#main-panel" "try-client-route" "url-pathname" "browser-push-state" "" "browser-scroll-to" 0 "dom-has-attr?" "sx-get" "dom-set-attr" "sx-push-url" "execute-request") :bytecode (20 1 0 16 0 48 1 52 0 0 1 33 198 0 20 2 0 16 0 48 1 5 20 3 0 1 4 0 48 1 17 1 16 1 33 46 0 20 5 0 16 1 1 6 0 48 2 17 3 16 3 6 33 14 0 5 16 3 1 8 0 52 7 0 2 52 0 0 1 33 5 0 16 3 32 3 0 1 9 0 32 3 0 1 9 0 17 2 20 10 0 20 11 0 18 0 48 1 16 2 48 2 33 26 0 20 12 0 2 1 13 0 18 0 48 3 5 20 14 0 1 15 0 1 15 0 49 2 32 78 0 20 16 0 18 1 1 17 0 48 2 52 0 0 1 33 15 0 20 18 0 18 1 1 17 0 18 0 48 3 32 1 0 2 5 20 16 0 18 1 1 19 0 48 2 52 0 0 1 33 16 0 20 18 0 18 1 1 19 0 1 8 0 48 3 32 1 0 2 5 20 20 0 18 1 2 2 49 3 32 1 0 2 50)}) :bytecode (20 0 0 16 0 1 1 0 51 2 0 1 1 1 0 49 3 50)} "sw-post-message" "try-parse-json" {:upvalue-count 0 :arity 1 :constants ("json-parse") :bytecode (20 0 0 16 0 49 1 50)} "strip-component-scripts" {:upvalue-count 0 :arity 1 :constants ("