diff --git a/goof.scm b/goof.scm index 77a1530..35a0e97 100644 --- a/goof.scm +++ b/goof.scm @@ -466,6 +466,17 @@ (syntax-case stx () ((a ...) #'(a ...)))) +(define-syntax inner-recur + (syntax-rules () + ((_ loop-name final-fun () ((v s) ...)) + (loop-name s ...)) + ((_ loop-name final-fun (user-finals ...) ((v s) ...)) + (let ((v s) ...) + (if (or user-finals ...) + final-fun + (loop-name v ...)))))) + + (define-syntax let-kw-form (syntax-rules () ((_ macro-name final-fun (user-finals ...) (loop-name (var step) ...) . body) @@ -476,10 +487,9 @@ (params (list #'(var step) ...))) (if (null? lst) (with-syntax ((((v s) :::) params)) - #'(let ((v s) :::) - (if (or user-finals ...) - final-fun - (loop-name v :::)))) + #'(inner-recur loop-name final-fun + (user-finals ...) + ((v s) :::))) (syntax-case (car lst) (=>) ((=> name val) (loop (cdr lst) (update-name params #'name #'val)))