Files
rose-ash/shared/static/wasm/sx/core-signals.sxbc.json
giles 8d3ab040ef Fix WASM browser: broken links (&rest bytecode) + broken reactive counter (ListRef mutation)
Two bugs fixed:

1. Links: bytecode compiler doesn't handle &rest params — treats them as
   positional, so (first rest) gets a raw string instead of a list.
   Replaced &rest with explicit optional params in all bytecode-compiled
   web SX files (dom-query, dom-add-listener, browser-push-state, etc.).
   The VM already pads missing args with Nil.

2. Reactive counter: signal-remove-sub! used (filter ...) which returns
   immutable List, but signal-add-sub! uses (append!) which only mutates
   ListRef. Subscribers silently vanished after first effect re-run.
   Fixed by adding remove! primitive that mutates ListRef in-place.

Also:
- Added evalVM API to WASM kernel (compile + run through bytecode VM)
- Added scope tracing (scope-push!/pop!/peek/context instrumentation)
- Added Playwright reactive mode for debugging island signal/DOM state
- Replaced cek-call with direct calls in core-signals.sx effect/computed
- Recompiled all 23 bytecode modules

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-27 14:08:49 +00:00

1 line
9.1 KiB
JSON

{"magic":"SXBC","version":1,"hash":"59a3141f26d62fda","module":{"bytecode":[51,1,0,128,0,0,5,51,3,0,128,2,0,5,51,5,0,128,4,0,5,51,7,0,128,6,0,5,51,9,0,128,8,0,5,51,11,0,128,10,0,5,51,13,0,128,12,0,5,51,15,0,128,14,0,5,51,17,0,128,16,0,5,51,19,0,128,18,0,5,51,21,0,128,20,0,5,51,23,0,128,22,0,5,51,25,0,128,24,0,5,51,27,0,128,26,0,5,51,29,0,128,28,0,5,1,31,0,128,30,0,5,52,33,0,0,128,32,0,5,51,35,0,128,34,0,5,51,37,0,128,36,0,5,51,39,0,128,38,0,5,51,41,0,128,40,0,5,51,43,0,128,42,0,5,51,45,0,128,44,0,50],"constants":[{"t":"s","v":"make-signal"},{"t":"code","v":{"bytecode":[1,1,0,3,1,2,0,16,0,1,3,0,52,4,0,0,1,5,0,52,4,0,0,52,0,0,8,50],"constants":[{"t":"s","v":"dict"},{"t":"s","v":"__signal"},{"t":"s","v":"value"},{"t":"s","v":"subscribers"},{"t":"s","v":"list"},{"t":"s","v":"deps"}],"arity":1}},{"t":"s","v":"signal?"},{"t":"code","v":{"bytecode":[16,0,52,0,0,1,6,33,10,0,5,16,0,1,2,0,52,1,0,2,50],"constants":[{"t":"s","v":"dict?"},{"t":"s","v":"has-key?"},{"t":"s","v":"__signal"}],"arity":1}},{"t":"s","v":"signal-value"},{"t":"code","v":{"bytecode":[16,0,1,1,0,52,0,0,2,50],"constants":[{"t":"s","v":"get"},{"t":"s","v":"value"}],"arity":1}},{"t":"s","v":"signal-set-value!"},{"t":"code","v":{"bytecode":[16,0,1,1,0,16,1,52,0,0,3,50],"constants":[{"t":"s","v":"dict-set!"},{"t":"s","v":"value"}],"arity":2}},{"t":"s","v":"signal-subscribers"},{"t":"code","v":{"bytecode":[16,0,1,1,0,52,0,0,2,50],"constants":[{"t":"s","v":"get"},{"t":"s","v":"subscribers"}],"arity":1}},{"t":"s","v":"signal-add-sub!"},{"t":"code","v":{"bytecode":[16,0,1,3,0,52,2,0,2,16,1,52,1,0,2,52,0,0,1,33,19,0,20,4,0,16,0,1,3,0,52,2,0,2,16,1,49,2,32,1,0,2,50],"constants":[{"t":"s","v":"not"},{"t":"s","v":"contains?"},{"t":"s","v":"get"},{"t":"s","v":"subscribers"},{"t":"s","v":"append!"}],"arity":2}},{"t":"s","v":"signal-remove-sub!"},{"t":"code","v":{"bytecode":[16,0,1,1,0,52,0,0,2,17,2,20,2,0,16,2,16,1,49,2,50],"constants":[{"t":"s","v":"get"},{"t":"s","v":"subscribers"},{"t":"s","v":"remove!"}],"arity":2}},{"t":"s","v":"signal-deps"},{"t":"code","v":{"bytecode":[16,0,1,1,0,52,0,0,2,50],"constants":[{"t":"s","v":"get"},{"t":"s","v":"deps"}],"arity":1}},{"t":"s","v":"signal-set-deps!"},{"t":"code","v":{"bytecode":[16,0,1,1,0,16,1,52,0,0,3,50],"constants":[{"t":"s","v":"dict-set!"},{"t":"s","v":"deps"}],"arity":2}},{"t":"s","v":"signal"},{"t":"code","v":{"bytecode":[20,0,0,16,0,49,1,50],"constants":[{"t":"s","v":"make-signal"}],"arity":1}},{"t":"s","v":"deref"},{"t":"code","v":{"bytecode":[20,1,0,16,0,48,1,52,0,0,1,33,5,0,16,0,32,87,0,1,3,0,2,52,2,0,2,17,1,16,1,33,63,0,16,1,1,5,0,52,4,0,2,17,2,16,1,1,6,0,52,4,0,2,17,3,16,2,16,0,52,7,0,2,52,0,0,1,33,22,0,20,8,0,16,2,16,0,48,2,5,20,9,0,16,0,16,3,48,2,32,1,0,2,32,1,0,2,5,20,10,0,16,0,49,1,50],"constants":[{"t":"s","v":"not"},{"t":"s","v":"signal?"},{"t":"s","v":"context"},{"t":"s","v":"sx-reactive"},{"t":"s","v":"get"},{"t":"s","v":"deps"},{"t":"s","v":"notify"},{"t":"s","v":"contains?"},{"t":"s","v":"append!"},{"t":"s","v":"signal-add-sub!"},{"t":"s","v":"signal-value"}],"arity":1}},{"t":"s","v":"reset!"},{"t":"code","v":{"bytecode":[20,0,0,16,0,48,1,33,48,0,20,1,0,16,0,48,1,17,2,16,2,16,1,52,3,0,2,52,2,0,1,33,20,0,20,4,0,16,0,16,1,48,2,5,20,5,0,16,0,49,1,32,1,0,2,32,1,0,2,50],"constants":[{"t":"s","v":"signal?"},{"t":"s","v":"signal-value"},{"t":"s","v":"not"},{"t":"s","v":"identical?"},{"t":"s","v":"signal-set-value!"},{"t":"s","v":"notify-subscribers"}],"arity":2}},{"t":"s","v":"swap!"},{"t":"code","v":{"bytecode":[20,0,0,16,0,48,1,33,69,0,20,1,0,16,0,48,1,17,3,20,2,0,16,1,16,3,16,2,52,4,0,2,52,3,0,2,48,1,17,4,16,3,16,4,52,6,0,2,52,5,0,1,33,20,0,20,7,0,16,0,16,4,48,2,5,20,8,0,16,0,49,1,32,1,0,2,32,1,0,2,50],"constants":[{"t":"s","v":"signal?"},{"t":"s","v":"signal-value"},{"t":"s","v":"trampoline"},{"t":"s","v":"apply"},{"t":"s","v":"cons"},{"t":"s","v":"not"},{"t":"s","v":"identical?"},{"t":"s","v":"signal-set-value!"},{"t":"s","v":"notify-subscribers"}],"arity":3}},{"t":"s","v":"computed"},{"t":"code","v":{"bytecode":[20,0,0,2,48,1,17,1,52,1,0,0,17,2,2,17,3,51,2,0,1,4,1,1,1,0,17,4,16,4,48,0,5,20,3,0,51,4,0,1,1,48,1,5,16,1,50],"constants":[{"t":"s","v":"make-signal"},{"t":"s","v":"list"},{"t":"code","v":{"bytecode":[51,1,0,0,0,20,2,0,18,1,48,1,52,0,0,2,5,20,3,0,18,1,52,4,0,0,48,2,5,1,6,0,52,4,0,0,1,7,0,18,0,52,5,0,4,17,0,1,9,0,16,0,52,8,0,2,5,18,2,48,0,17,1,1,9,0,52,10,0,1,5,20,3,0,18,1,16,0,1,6,0,52,11,0,2,48,2,5,20,12,0,18,1,48,1,17,2,20,13,0,18,1,16,1,48,2,5,16,2,16,1,52,15,0,2,52,14,0,1,33,10,0,20,16,0,18,1,49,1,32,1,0,2,50],"constants":[{"t":"s","v":"for-each"},{"t":"code","v":{"bytecode":[20,0,0,16,0,18,0,49,2,50],"constants":[{"t":"s","v":"signal-remove-sub!"}],"arity":1,"upvalue-count":1}},{"t":"s","v":"signal-deps"},{"t":"s","v":"signal-set-deps!"},{"t":"s","v":"list"},{"t":"s","v":"dict"},{"t":"s","v":"deps"},{"t":"s","v":"notify"},{"t":"s","v":"scope-push!"},{"t":"s","v":"sx-reactive"},{"t":"s","v":"scope-pop!"},{"t":"s","v":"get"},{"t":"s","v":"signal-value"},{"t":"s","v":"signal-set-value!"},{"t":"s","v":"not"},{"t":"s","v":"identical?"},{"t":"s","v":"notify-subscribers"}],"upvalue-count":3}},{"t":"s","v":"register-in-scope"},{"t":"code","v":{"bytecode":[20,0,0,18,0,49,1,50],"constants":[{"t":"s","v":"dispose-computed"}],"upvalue-count":1}}],"arity":1}},{"t":"s","v":"effect"},{"t":"code","v":{"bytecode":[52,0,0,0,17,1,4,17,2,2,17,3,51,1,0,1,2,1,3,1,4,1,1,1,0,17,4,16,4,48,0,5,51,2,0,1,2,1,3,1,4,1,1,17,5,20,3,0,16,5,48,1,5,16,5,50],"constants":[{"t":"s","v":"list"},{"t":"code","v":{"bytecode":[18,0,52,0,0,1,33,108,0,18,1,33,7,0,18,1,48,0,32,1,0,2,5,51,2,0,0,2,18,3,52,1,0,2,5,52,3,0,0,19,3,5,1,5,0,52,3,0,0,1,6,0,18,2,52,4,0,4,17,0,1,8,0,16,0,52,7,0,2,5,18,4,48,0,17,1,1,8,0,52,9,0,1,5,16,0,1,5,0,52,10,0,2,19,3,5,20,11,0,16,1,48,1,33,7,0,16,1,19,1,32,1,0,2,32,1,0,2,50],"constants":[{"t":"s","v":"not"},{"t":"s","v":"for-each"},{"t":"code","v":{"bytecode":[20,0,0,16,0,18,0,49,2,50],"constants":[{"t":"s","v":"signal-remove-sub!"}],"arity":1,"upvalue-count":1}},{"t":"s","v":"list"},{"t":"s","v":"dict"},{"t":"s","v":"deps"},{"t":"s","v":"notify"},{"t":"s","v":"scope-push!"},{"t":"s","v":"sx-reactive"},{"t":"s","v":"scope-pop!"},{"t":"s","v":"get"},{"t":"s","v":"callable?"}],"upvalue-count":5}},{"t":"code","v":{"bytecode":[3,19,0,5,18,1,33,7,0,18,1,48,0,32,1,0,2,5,51,1,0,0,2,18,3,52,0,0,2,5,52,2,0,0,19,3,50],"constants":[{"t":"s","v":"for-each"},{"t":"code","v":{"bytecode":[20,0,0,16,0,18,0,49,2,50],"constants":[{"t":"s","v":"signal-remove-sub!"}],"arity":1,"upvalue-count":1}},{"t":"s","v":"list"}],"upvalue-count":4}},{"t":"s","v":"register-in-scope"}],"arity":1}},{"t":"s","v":"*batch-depth*"},{"t":"n","v":0},{"t":"s","v":"*batch-queue*"},{"t":"s","v":"list"},{"t":"s","v":"batch"},{"t":"code","v":{"bytecode":[20,1,0,1,2,0,52,0,0,2,21,1,0,5,16,0,48,0,5,20,1,0,1,2,0,52,3,0,2,21,1,0,5,20,1,0,1,5,0,52,4,0,2,33,51,0,20,6,0,17,1,52,7,0,0,21,6,0,5,52,7,0,0,17,2,52,7,0,0,17,3,51,9,0,1,2,1,3,16,1,52,8,0,2,5,51,10,0,16,3,52,8,0,2,32,1,0,2,50],"constants":[{"t":"s","v":"+"},{"t":"s","v":"*batch-depth*"},{"t":"n","v":1},{"t":"s","v":"-"},{"t":"s","v":"="},{"t":"n","v":0},{"t":"s","v":"*batch-queue*"},{"t":"s","v":"list"},{"t":"s","v":"for-each"},{"t":"code","v":{"bytecode":[51,1,0,0,0,0,1,20,2,0,16,0,48,1,52,0,0,2,50],"constants":[{"t":"s","v":"for-each"},{"t":"code","v":{"bytecode":[18,0,16,0,52,1,0,2,52,0,0,1,33,22,0,20,2,0,18,0,16,0,48,2,5,20,2,0,18,1,16,0,49,2,32,1,0,2,50],"constants":[{"t":"s","v":"not"},{"t":"s","v":"contains?"},{"t":"s","v":"append!"}],"arity":1,"upvalue-count":2}},{"t":"s","v":"signal-subscribers"}],"arity":1,"upvalue-count":2}},{"t":"code","v":{"bytecode":[16,0,49,0,50],"constants":[],"arity":1}}],"arity":1}},{"t":"s","v":"notify-subscribers"},{"t":"code","v":{"bytecode":[20,1,0,1,2,0,52,0,0,2,33,33,0,20,5,0,16,0,52,4,0,2,52,3,0,1,33,13,0,20,6,0,20,5,0,16,0,49,2,32,1,0,2,32,7,0,20,7,0,16,0,49,1,50],"constants":[{"t":"s","v":">"},{"t":"s","v":"*batch-depth*"},{"t":"n","v":0},{"t":"s","v":"not"},{"t":"s","v":"contains?"},{"t":"s","v":"*batch-queue*"},{"t":"s","v":"append!"},{"t":"s","v":"flush-subscribers"}],"arity":1}},{"t":"s","v":"flush-subscribers"},{"t":"code","v":{"bytecode":[51,1,0,20,2,0,16,0,48,1,52,0,0,2,50],"constants":[{"t":"s","v":"for-each"},{"t":"code","v":{"bytecode":[16,0,49,0,50],"constants":[],"arity":1}},{"t":"s","v":"signal-subscribers"}],"arity":1}},{"t":"s","v":"dispose-computed"},{"t":"code","v":{"bytecode":[20,0,0,16,0,48,1,33,29,0,51,2,0,20,3,0,16,0,48,1,52,1,0,2,5,20,4,0,16,0,52,5,0,0,49,2,32,1,0,2,50],"constants":[{"t":"s","v":"signal?"},{"t":"s","v":"for-each"},{"t":"code","v":{"bytecode":[20,0,0,16,0,2,49,2,50],"constants":[{"t":"s","v":"signal-remove-sub!"}],"arity":1}},{"t":"s","v":"signal-deps"},{"t":"s","v":"signal-set-deps!"},{"t":"s","v":"list"}],"arity":1}},{"t":"s","v":"with-island-scope"},{"t":"code","v":{"bytecode":[1,1,0,16,0,52,0,0,2,5,16,1,48,0,17,2,1,1,0,52,2,0,1,5,16,2,50],"constants":[{"t":"s","v":"scope-push!"},{"t":"s","v":"sx-island-scope"},{"t":"s","v":"scope-pop!"}],"arity":2}},{"t":"s","v":"register-in-scope"},{"t":"code","v":{"bytecode":[1,1,0,52,0,0,1,17,1,16,1,33,16,0,20,2,0,16,1,16,0,52,3,0,1,49,2,32,1,0,2,50],"constants":[{"t":"s","v":"scope-peek"},{"t":"s","v":"sx-island-scope"},{"t":"s","v":"cek-call"},{"t":"s","v":"list"}],"arity":1}}]}}