Fix 73 JS test failures: match transpiler, sxEq, deref frame, signals, stepper lib
Evaluator fixes (from broken match refactor in 8bba02f):
- Deref frame: use CEK state `value`, not `(get frame "value")`
- Deref frame: restore `(context "sx-reactive" nil)` (was undefined `get-tracking-context`)
- Scope-acc frame: restore missing `(get frame "value")` arg to make-scope-acc-frame
- Add missing `thread-insert-arg` helper for thread-first non-HO branch
Transpiler (hosts/javascript/transpiler.sx):
- Add `match` special form handler (IIFE with chained if/return, `_` wildcard)
- Replace `=`/`!=` infix `==` with `sxEq()` function call for proper symbol equality
JS platform (hosts/javascript/platform.py):
- Add `sxEq` for structural symbol/keyword comparison
- Add `componentFile`, `sort`, `defStore`/`useStore`/`clearStores` primitives
- Add `length`/`map`/`for-each`/`reduce` as VM-compatible HOF primitives
- Fix `SYM` → `makeSymbol` references
New files:
- sx/sx/stepper-lib.sx: extracted split-tag, build-code-tokens, steps-to-preview
JS tests: 0 → 1582/1585 passing (3 remaining are VM closure interop)
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -42,6 +42,17 @@
|
||||
|
||||
(define make-thread-frame (fn (remaining env) {:env env :type "thread" :remaining remaining}))
|
||||
|
||||
(define
|
||||
thread-insert-arg
|
||||
(fn
|
||||
(form value fenv)
|
||||
(if
|
||||
(= (type-of form) "list")
|
||||
(eval-expr
|
||||
(cons (first form) (cons (list (quote quote) value) (rest form)))
|
||||
fenv)
|
||||
(eval-expr (list form (list (quote quote) value)) fenv))))
|
||||
|
||||
(define make-map-frame (fn (f remaining results env) {:indexed false :env env :results results :type "map" :f f :remaining remaining}))
|
||||
|
||||
(define make-map-indexed-frame (fn (f remaining results env) {:indexed true :env env :results results :type "map" :f f :remaining remaining}))
|
||||
@@ -2161,7 +2172,7 @@
|
||||
("reset" (make-cek-value value env rest-k))
|
||||
("deref"
|
||||
(let
|
||||
((val (get frame "value")) (fenv (get frame "env")))
|
||||
((val value) (fenv (get frame "env")))
|
||||
(if
|
||||
(not (signal? val))
|
||||
(make-cek-value val fenv rest-k)
|
||||
@@ -2170,7 +2181,7 @@
|
||||
(reactive-shift-deref val fenv rest-k)
|
||||
(do
|
||||
(let
|
||||
((ctx (get-tracking-context)))
|
||||
((ctx (context "sx-reactive" nil)))
|
||||
(when
|
||||
ctx
|
||||
(let
|
||||
@@ -2232,7 +2243,7 @@
|
||||
fenv
|
||||
(kont-push
|
||||
(let
|
||||
((new-frame (make-scope-acc-frame (get frame "name") (rest remaining) fenv)))
|
||||
((new-frame (make-scope-acc-frame (get frame "name") (get frame "value") (rest remaining) fenv)))
|
||||
(dict-set! new-frame "emitted" (get frame "emitted"))
|
||||
new-frame)
|
||||
rest-k)))))
|
||||
|
||||
Reference in New Issue
Block a user