Fix isomorphic SSR: revert inline opcodes, add named let compilation, fix cookie decode
Three bugs broke island SSR rendering of the home stepper widget: 1. Inline VM opcodes (OP_ADD..OP_DEC) broke JIT-compiled functions. The compiler emitted single-byte opcodes for first/rest/len/= etc. that produced wrong results in complex recursive code (sx-parse returned nil, split-tag produced 1 step instead of 16). Reverted compiler to use CALL_PRIM for all primitives. VM opcode handlers kept for future use. 2. Named let (let loop ((x init)) body) had no compiler support — silently produced broken bytecode. Added desugaring to letrec. 3. URL-encoded cookie values not decoded server-side. Client set-cookie uses encodeURIComponent but Werkzeug doesn't decode cookie values. Added unquote() in bridge cookie injection. Also: call-lambda used eval_expr which copies Dict values (signals), breaking mutations through aser lambda calls. Switched to cek_call. Also: stepper preview now includes ~cssx/tw spreads for SSR styling. Tests: 1317 JS, 1114 OCaml, 26 integration (2 pre-existing failures) Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -116,10 +116,10 @@
|
||||
(dict-set! pos "i" (+ (get pos "i") 1))
|
||||
(let ((tag (get step "tag"))
|
||||
(attrs (or (get step "attrs") (list)))
|
||||
(spreads (or (get step "spreads") (list)))
|
||||
(inner (build-children)))
|
||||
;; Skip spreads (~cssx/tw) — just structure + text
|
||||
(append! children
|
||||
(concat (list (make-symbol tag)) attrs inner)))
|
||||
(concat (list (make-symbol tag)) spreads attrs inner)))
|
||||
(loop))
|
||||
(= stype "close")
|
||||
(do (dict-set! pos "i" (+ (get pos "i") 1))
|
||||
|
||||
Reference in New Issue
Block a user