lua: break via guard+raise sentinel; auto-first multi in arith/concat +4 tests
Some checks failed
Test, Build, and Deploy / test-build-deploy (push) Has been cancelled

This commit is contained in:
2026-04-24 22:03:14 +00:00
parent 68b0a279f8
commit bac3471a1f
6 changed files with 126 additions and 94 deletions

View File

@@ -1,3 +1,17 @@
(define
lua-tx-loop-guard
(fn (body-sx)
(list
(make-symbol "guard")
(list (make-symbol "e")
(list
(list (make-symbol "lua-break-sentinel?") (make-symbol "e"))
nil)
(list
(make-symbol "else")
(list (make-symbol "raise") (make-symbol "e"))))
body-sx)))
(define
lua-tx
(fn
@@ -36,7 +50,7 @@
((= tag (quote lua-for-num)) (lua-tx-for-num node))
((= tag (quote lua-for-in)) (lua-tx-for-in node))
((= tag (quote lua-do)) (lua-tx-do node))
((= tag (quote lua-break)) (quote lua-break-marker))
((= tag (quote lua-break)) (list (make-symbol "raise") (list (make-symbol "list") (list (make-symbol "quote") (make-symbol "lua-brk")))))
((= tag (quote lua-return)) (lua-tx-return node))
((= tag (quote lua-call-stmt)) (lua-tx (nth node 1)))
((= tag (quote lua-local-function)) (lua-tx-local-function node))
@@ -392,7 +406,7 @@
(make-symbol "begin")
body
(list (make-symbol "_while_loop"))))))
(list (make-symbol "_while_loop"))))))
(lua-tx-loop-guard (list (make-symbol "_while_loop")))))))
(define
lua-tx-repeat
@@ -418,7 +432,7 @@
(make-symbol "not")
(list (make-symbol "lua-truthy?") cnd))
(list (make-symbol "_repeat_loop"))))))
(list (make-symbol "_repeat_loop"))))))
(lua-tx-loop-guard (list (make-symbol "_repeat_loop")))))))
(define
lua-tx-for-num
@@ -462,7 +476,7 @@
(make-symbol name)
(make-symbol "_for_step")))
(list (make-symbol "_for_loop"))))))
(list (make-symbol "_for_loop")))))))
(lua-tx-loop-guard (list (make-symbol "_for_loop"))))))))
(define lua-tx-do (fn (node) (list (make-symbol "let") (list) (lua-tx (nth node 1)))))
@@ -704,4 +718,4 @@
(make-symbol "fn")
(list)
(lua-tx-for-in-loop-body names body f-sym s-sym v-sym rets-sym loop-sym first-name)))
(list loop-sym))))))))))
(lua-tx-loop-guard (list loop-sym)))))))))))