lua: proper early-return via guard+raise sentinel; fixes if-then-return-end-rest +3 tests
Some checks failed
Test, Build, and Deploy / test-build-deploy (push) Has been cancelled
Some checks failed
Test, Build, and Deploy / test-build-deploy (push) Has been cancelled
This commit is contained in:
@@ -187,6 +187,17 @@
|
||||
(make-symbol "arg")
|
||||
(list (make-symbol "lua-varargs-arg-table") (make-symbol "__args") n))))
|
||||
|
||||
(define
|
||||
lua-tx-function-guard
|
||||
(fn (body-sx)
|
||||
(list
|
||||
(make-symbol "guard")
|
||||
(list (make-symbol "e")
|
||||
(list
|
||||
(list (make-symbol "lua-return-sentinel?") (make-symbol "e"))
|
||||
(list (make-symbol "lua-return-value") (make-symbol "e"))))
|
||||
body-sx)))
|
||||
|
||||
(define
|
||||
lua-tx-function
|
||||
(fn
|
||||
@@ -200,7 +211,7 @@
|
||||
(list
|
||||
(make-symbol "fn")
|
||||
(list (make-symbol "&rest") (make-symbol "__args"))
|
||||
(lua-tx body)))
|
||||
(lua-tx-function-guard (lua-tx body))))
|
||||
(else
|
||||
(let
|
||||
((bindings (lua-tx-function-bindings params 0)))
|
||||
@@ -215,10 +226,11 @@
|
||||
(list
|
||||
(make-symbol "fn")
|
||||
(list (make-symbol "&rest") (make-symbol "__args"))
|
||||
(list
|
||||
(make-symbol "let")
|
||||
all-bindings
|
||||
(lua-tx body))))))))))
|
||||
(lua-tx-function-guard
|
||||
(list
|
||||
(make-symbol "let")
|
||||
all-bindings
|
||||
(lua-tx body)))))))))))
|
||||
|
||||
(define
|
||||
lua-tx-block
|
||||
@@ -460,13 +472,18 @@
|
||||
(node)
|
||||
(let
|
||||
((exps (nth node 1)))
|
||||
(cond
|
||||
((= (len exps) 0) nil)
|
||||
((= (len exps) 1) (lua-tx (first exps)))
|
||||
(else
|
||||
(list
|
||||
(make-symbol "lua-pack-return")
|
||||
(cons (make-symbol "list") (lua-tx-multi-args exps 0))))))))
|
||||
(let
|
||||
((val
|
||||
(cond
|
||||
((= (len exps) 0) nil)
|
||||
((= (len exps) 1) (lua-tx (first exps)))
|
||||
(else
|
||||
(list
|
||||
(make-symbol "lua-pack-return")
|
||||
(cons (make-symbol "list") (lua-tx-multi-args exps 0)))))))
|
||||
(list
|
||||
(make-symbol "raise")
|
||||
(list (make-symbol "list") (list (make-symbol "quote") (make-symbol "lua-ret")) val))))))
|
||||
|
||||
(define
|
||||
lua-tx-local-function
|
||||
@@ -500,7 +517,9 @@
|
||||
|
||||
(define
|
||||
lua-eval-ast
|
||||
(fn (src) (let ((sx (lua-transpile src))) (eval-expr sx))))
|
||||
(fn (src)
|
||||
(let ((sx (lua-transpile src)))
|
||||
(eval-expr (lua-tx-function-guard sx)))))
|
||||
|
||||
(define
|
||||
lua-tx-multi-args
|
||||
|
||||
Reference in New Issue
Block a user