kernel+bundle: fix nil-bytecode .sxbc (compile-blob serializer dropped Integer)
Some checks failed
Test, Build, and Deploy / test-build-deploy (push) Failing after 46s
Some checks failed
Test, Build, and Deploy / test-build-deploy (push) Failing after 46s
Every .sxbc shipped with `:bytecode (nil nil ...)` and `:arity nil`, so the WASM
kernel's vm.sx hit "VM: unknown opcode 0" on every module and fell back to .sx
source (slower, noisy console). Root cause: `raw_serialize` in the `compile-blob`
command (sx_server.ml) handles `Number` but not `Integer`, and bytecode opcodes +
arity/upvalue-count are `Integer`s — so they fell through to the `_ -> "nil"`
catch-all and serialized as nil. Same class of bug as the value_to_js Integer gap
(689dae7d). It went unnoticed because source-fallback masks it. Add the Integer
case and regenerate: the web stack now loads entirely from bytecode (0 unknown-
opcode warnings, 0 source fallbacks), boost + SPA unchanged. compiler.sx in the
bundle was also stale — re-synced to the canonical lib/compiler.sx.
Verified: native host conformance 271/271; chromium boots with 0 unknown-opcode
warnings + 0 source-fallback loads; spa-check still passes (boost 6/6, fragment
swap). Prereq for content-addressing the assets (caching real bytecode, not nil).
This commit is contained in:
@@ -1,3 +1,3 @@
|
||||
(sxbc 1 "232c1519553b1d5f"
|
||||
(code
|
||||
:constants ("with-marsh-scope" {:upvalue-count nil :arity nil :constants ("list" "with-island-scope" {:upvalue-count nil :arity nil :constants ("append!") :bytecode (nil nil nil nil nil nil nil nil nil)} "dom-set-data" "sx-marsh-disposers") :bytecode (nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil)} "dispose-marsh-scope" {:upvalue-count nil :arity nil :constants ("dom-get-data" "sx-marsh-disposers" "for-each" {:upvalue-count nil :arity nil :constants ("cek-call") :bytecode (nil nil nil nil nil nil nil nil)} "dom-set-data") :bytecode (nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil)} "emit-event" {:upvalue-count nil :arity nil :constants ("dom-dispatch") :bytecode (nil nil nil nil nil nil nil nil nil nil nil nil)} "on-event" {:upvalue-count nil :arity nil :constants ("dom-on") :bytecode (nil nil nil nil nil nil nil nil nil nil nil nil)} "bridge-event" {:upvalue-count nil :arity nil :constants ("effect" {:upvalue-count nil :arity nil :constants ("dom-on" {:upvalue-count nil :arity nil :constants ("event-detail" "cek-call" "list" "reset!") :bytecode (nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil)}) :bytecode (nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil)}) :bytecode (nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil)} "resource" {:upvalue-count nil :arity nil :constants ("signal" "dict" "loading" "data" "error" "promise-then" "cek-call" {:upvalue-count nil :arity nil :constants ("reset!" "dict" "loading" "data" "error") :bytecode (nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil)} {:upvalue-count nil :arity nil :constants ("reset!" "dict" "loading" "data" "error") :bytecode (nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil)}) :bytecode (nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil)} {:library (sx signals-web) :op "import"}) :bytecode (nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil nil)))
|
||||
:constants ("with-marsh-scope" {:upvalue-count 0 :arity 2 :constants ("list" "with-island-scope" {:upvalue-count 1 :arity 1 :constants ("append!") :bytecode (18 0 16 0 52 0 0 2 50)} "dom-set-data" "sx-marsh-disposers") :bytecode (52 0 0 0 17 2 20 1 0 51 2 0 1 2 16 1 48 2 5 20 3 0 16 0 1 4 0 16 2 49 3 50)} "dispose-marsh-scope" {:upvalue-count 0 :arity 1 :constants ("dom-get-data" "sx-marsh-disposers" {:upvalue-count 0 :arity 1 :constants ("cek-call") :bytecode (16 0 2 52 0 0 2 50)} "for-each" "dom-set-data") :bytecode (20 0 0 16 0 1 1 0 48 2 17 1 16 1 33 24 0 51 2 0 16 1 52 3 0 2 5 20 4 0 16 0 1 1 0 2 49 3 32 1 0 2 50)} "emit-event" {:upvalue-count 0 :arity 3 :constants ("dom-dispatch") :bytecode (20 0 0 16 0 16 1 16 2 49 3 50)} "on-event" {:upvalue-count 0 :arity 3 :constants ("dom-on") :bytecode (20 0 0 16 0 16 1 16 2 49 3 50)} "bridge-event" {:upvalue-count 0 :arity 4 :constants ("effect" {:upvalue-count 4 :arity 0 :constants ("dom-on" {:upvalue-count 2 :arity 1 :constants ("event-detail" "list" "cek-call" "reset!") :bytecode (20 0 0 16 0 48 1 17 1 18 0 33 15 0 18 0 16 1 52 1 0 1 52 2 0 2 32 2 0 16 1 17 2 20 3 0 18 1 16 2 49 2 50)}) :bytecode (20 0 0 18 0 18 1 51 1 0 0 2 0 3 48 3 17 0 16 0 50)}) :bytecode (20 0 0 51 1 0 1 0 1 1 1 3 1 2 49 1 50)} "resource" {:upvalue-count 0 :arity 1 :constants ("signal" "loading" "data" "error" "dict" "promise-then" "cek-call" {:upvalue-count 1 :arity 1 :constants ("reset!" "loading" "data" "error" "dict") :bytecode (20 0 0 18 0 1 1 0 4 1 2 0 16 0 1 3 0 2 52 4 0 6 49 2 50)} {:upvalue-count 1 :arity 1 :constants ("reset!" "loading" "data" "error" "dict") :bytecode (20 0 0 18 0 1 1 0 4 1 2 0 2 1 3 0 16 0 52 4 0 6 49 2 50)}) :bytecode (20 0 0 1 1 0 3 1 2 0 2 1 3 0 2 52 4 0 6 48 1 17 1 20 5 0 16 0 2 52 6 0 2 51 7 0 1 1 51 8 0 1 1 48 3 5 16 1 50)} {:library (sx signals-web) :op "import"}) :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 1 12 0 112 50)))
|
||||
|
||||
Reference in New Issue
Block a user