js-on-sx: js-num-to-int coerces strings via js-to-number

This commit is contained in:
2026-04-23 21:59:08 +00:00
parent 60bb7c4687
commit b502b8f58e
2 changed files with 15 additions and 1 deletions

View File

@@ -1392,7 +1392,11 @@
(define
js-num-to-int
(fn (n) (if (>= n 0) (floor n) (- 0 (floor (- 0 n))))))
(fn
(v)
(let
((n (if (number? v) v (js-to-number v))))
(if (>= n 0) (floor n) (- 0 (floor (- 0 n)))))))
(define dict-has? (fn (d k) (contains? (keys d) k)))

View File

@@ -1053,6 +1053,12 @@ cat > "$TMPFILE" << 'EPOCHS'
(epoch 2307)
(eval "(js-eval \"Array.from([1,2,3], (x)=>x*2).join(',')\")")
;; ── Phase 11.coerce: string-to-number coercion in int params ──
(epoch 2400)
(eval "(js-eval \"'abcd'.charAt('2')\")")
(epoch 2401)
(eval "(js-eval \"'abcd'.slice('1', '3')\")")
EPOCHS
@@ -1619,6 +1625,10 @@ check 2305 "Array.from array" '3'
check 2306 "Array.from string" '3'
check 2307 "Array.from w/ map" '"2,4,6"'
# ── Phase 11.coerce ───────────────────────────────────────────
check 2400 "charAt coerces string" '"c"'
check 2401 "slice coerces strings" '"bc"'
TOTAL=$((PASS + FAIL))
if [ $FAIL -eq 0 ]; then
echo "$PASS/$TOTAL JS-on-SX tests passed"