HS: block literals callable as zero-arg lambdas (+4 tests)
Some checks failed
Test, Build, and Deploy / test-build-deploy (push) Failing after 17s
Some checks failed
Test, Build, and Deploy / test-build-deploy (push) Failing after 17s
Fix compiler: (block-literal () body) was emitting bare body instead of (fn () body). Now always wraps in fn regardless of param count. Generator: MANUAL_TEST_BODIES for all 4 blockLiteral tests using apply and SX map rather than JS array.map. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -1078,10 +1078,7 @@
|
|||||||
(let
|
(let
|
||||||
((params (map make-symbol (nth ast 1)))
|
((params (map make-symbol (nth ast 1)))
|
||||||
(body (hs-to-sx (nth ast 2))))
|
(body (hs-to-sx (nth ast 2))))
|
||||||
(if
|
(list (quote fn) params body)))
|
||||||
(= (len params) 0)
|
|
||||||
body
|
|
||||||
(list (quote fn) params body))))
|
|
||||||
((= head (quote me)) (quote me))
|
((= head (quote me)) (quote me))
|
||||||
((= head (quote beingTold)) (quote beingTold))
|
((= head (quote beingTold)) (quote beingTold))
|
||||||
((= head (quote it)) (quote it))
|
((= head (quote it)) (quote it))
|
||||||
|
|||||||
@@ -1078,10 +1078,7 @@
|
|||||||
(let
|
(let
|
||||||
((params (map make-symbol (nth ast 1)))
|
((params (map make-symbol (nth ast 1)))
|
||||||
(body (hs-to-sx (nth ast 2))))
|
(body (hs-to-sx (nth ast 2))))
|
||||||
(if
|
(list (quote fn) params body)))
|
||||||
(= (len params) 0)
|
|
||||||
body
|
|
||||||
(list (quote fn) params body))))
|
|
||||||
((= head (quote me)) (quote me))
|
((= head (quote me)) (quote me))
|
||||||
((= head (quote beingTold)) (quote beingTold))
|
((= head (quote beingTold)) (quote beingTold))
|
||||||
((= head (quote it)) (quote it))
|
((= head (quote it)) (quote it))
|
||||||
|
|||||||
@@ -3984,13 +3984,17 @@
|
|||||||
;; ── expressions/blockLiteral (4 tests) ──
|
;; ── expressions/blockLiteral (4 tests) ──
|
||||||
(defsuite "hs-upstream-expressions/blockLiteral"
|
(defsuite "hs-upstream-expressions/blockLiteral"
|
||||||
(deftest "basic block literals work"
|
(deftest "basic block literals work"
|
||||||
(error "SKIP (untranslated): basic block literals work"))
|
(assert= (apply (eval-expr-cek (hs-to-sx (hs-compile "\\ -> true"))) (list)) true)
|
||||||
|
)
|
||||||
(deftest "basic identity works"
|
(deftest "basic identity works"
|
||||||
(error "SKIP (untranslated): basic identity works"))
|
(assert= (apply (eval-expr-cek (hs-to-sx (hs-compile "\\ x -> x"))) (list true)) true)
|
||||||
|
)
|
||||||
(deftest "basic two arg identity works"
|
(deftest "basic two arg identity works"
|
||||||
(error "SKIP (untranslated): basic two arg identity works"))
|
(assert= (apply (eval-expr-cek (hs-to-sx (hs-compile "\\ x, y -> y"))) (list false true)) true)
|
||||||
|
)
|
||||||
(deftest "can map an array"
|
(deftest "can map an array"
|
||||||
(error "SKIP (untranslated): can map an array"))
|
(assert= (map (eval-expr-cek (hs-to-sx (hs-compile "\\ s -> s.length"))) (list "a" "ab" "abc")) (list 1 2 3))
|
||||||
|
)
|
||||||
)
|
)
|
||||||
|
|
||||||
;; ── expressions/boolean (2 tests) ──
|
;; ── expressions/boolean (2 tests) ──
|
||||||
|
|||||||
@@ -164,6 +164,19 @@ MANUAL_TEST_BODIES = {
|
|||||||
' (assert (string-contains? caught "worker plugin"))',
|
' (assert (string-contains? caught "worker plugin"))',
|
||||||
' (assert (string-contains? caught "hyperscript.org/features/worker")))',
|
' (assert (string-contains? caught "hyperscript.org/features/worker")))',
|
||||||
],
|
],
|
||||||
|
# blockLiteral: block literals compile to SX lambdas, callable via apply
|
||||||
|
"basic block literals work": [
|
||||||
|
' (assert= (apply (eval-expr-cek (hs-to-sx (hs-compile "\\\\ -> true"))) (list)) true)',
|
||||||
|
],
|
||||||
|
"basic identity works": [
|
||||||
|
' (assert= (apply (eval-expr-cek (hs-to-sx (hs-compile "\\\\ x -> x"))) (list true)) true)',
|
||||||
|
],
|
||||||
|
"basic two arg identity works": [
|
||||||
|
' (assert= (apply (eval-expr-cek (hs-to-sx (hs-compile "\\\\ x, y -> y"))) (list false true)) true)',
|
||||||
|
],
|
||||||
|
"can map an array": [
|
||||||
|
' (assert= (map (eval-expr-cek (hs-to-sx (hs-compile "\\\\ s -> s.length"))) (list "a" "ab" "abc")) (list 1 2 3))',
|
||||||
|
],
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user