All checks were successful
Build and Deploy / build-and-deploy (push) Successful in 23m17s
- wasm_of_ocaml compiles OCaml SX engine to WASM (722/722 spec tests) - js_of_ocaml fallback also working (722/722 spec tests) - Thin JS platform layer (sx-platform.js) with ~80 DOM/browser natives - Lambda callback bridge: SX lambdas callable from JS via handle table - Side-channel pattern bypasses js_of_ocaml return-value property stripping - Web adapters (signals, deps, router, adapter-html) load as SX source - Render mode dispatch: HTML tags + fragments route to OCaml renderer - Island/component accessors handle both Component and Island types - Dict-based signal support (signals.sx creates dicts, not native Signal) - Scope stack implementation (collect!/collected/emit!/emitted/context) - Bundle script embeds web adapters + WASM loader + platform layer - SX_USE_WASM env var toggles WASM engine in dev/production - Bootstrap extended: --web flag transpiles web adapters, :effects stripping Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
37 lines
1.4 KiB
OCaml
37 lines
1.4 KiB
OCaml
module T = Sx_types
|
|
module P = Sx_parser
|
|
module R = Sx_ref
|
|
open T
|
|
|
|
let () =
|
|
let env = T.make_env () in
|
|
let eval src =
|
|
let exprs = P.parse_all src in
|
|
let result = ref Nil in
|
|
List.iter (fun e -> result := R.eval_expr e (Env env)) exprs;
|
|
!result
|
|
in
|
|
(* Test 1: basic set! in closure *)
|
|
let r = eval "(let ((x 0)) (set! x 42) x)" in
|
|
Printf.printf "basic set!: %s (expect 42)\n%!" (T.inspect r);
|
|
|
|
(* Test 2: set! through lambda call *)
|
|
let r = eval "(let ((x 0)) (let ((f (fn () (set! x 99)))) (f) x))" in
|
|
Printf.printf "set! via lambda: %s (expect 99)\n%!" (T.inspect r);
|
|
|
|
(* Test 3: counter pattern *)
|
|
let r = eval "(do (define make-counter (fn () (let ((c 0)) (fn () (set! c (+ c 1)) c)))) (let ((counter (make-counter))) (counter) (counter) (counter)))" in
|
|
Printf.printf "counter: %s (expect 3)\n%!" (T.inspect r);
|
|
|
|
(* Test 4: set! in for-each *)
|
|
let r = eval "(let ((total 0)) (for-each (fn (n) (set! total (+ total n))) (list 1 2 3 4 5)) total)" in
|
|
Printf.printf "set! in for-each: %s (expect 15)\n%!" (T.inspect r);
|
|
|
|
(* Test 5: append! in for-each *)
|
|
ignore (T.env_bind env "append!" (NativeFn ("append!", fun args ->
|
|
match args with
|
|
| [List items; v] -> List (items @ [v])
|
|
| _ -> raise (Eval_error "append!: expected list and value"))));
|
|
let r = eval "(let ((log (list))) (for-each (fn (x) (append! log x)) (list 1 2 3)) log)" in
|
|
Printf.printf "append! in for-each: %s (expect (1 2 3))\n%!" (T.inspect r)
|