fixed let(*)-values when no bindings are given

This commit is contained in:
Marc Nieper-Wißkirchen 2017-01-10 22:59:00 +01:00
parent 6e99306ccd
commit 7197accf1f
2 changed files with 12 additions and 3 deletions

View file

@ -6,7 +6,7 @@
(define-syntax let*-values (define-syntax let*-values
(syntax-rules () (syntax-rules ()
((let*-values () . body) ((let*-values () . body)
(begin . body)) (let () . body))
((let*-values (((a) expr) . rest) . body) ((let*-values (((a) expr) . rest) . body)
(let ((a expr)) (let*-values rest . body))) (let ((a expr)) (let*-values rest . body)))
((let*-values ((params expr) . rest) . body) ((let*-values ((params expr) . rest) . body)
@ -14,6 +14,8 @@
(lambda params (let*-values rest . body)))))) (lambda params (let*-values rest . body))))))
(define-syntax let-values (define-syntax let-values
(syntax-rules () (syntax-rules ()
((let-values () . body)
(let () . body))
((let-values ("step") (binds ...) bind expr maps () () . body) ((let-values ("step") (binds ...) bind expr maps () () . body)
(let*-values (binds ... (bind expr)) (let maps . body))) (let*-values (binds ... (bind expr)) (let maps . body)))
((let-values ("step") (binds ...) bind old-expr maps () ((params expr) . rest) . body) ((let-values ("step") (binds ...) bind old-expr maps () ((params expr) . rest) . body)
@ -23,5 +25,4 @@
((let-values ("step") binds (bind ...) expr (maps ...) x rest . body) ((let-values ("step") binds (bind ...) expr (maps ...) x rest . body)
(let-values ("step") binds (bind ... . tmp) expr (maps ... (x tmp)) () rest . body)) (let-values ("step") binds (bind ... . tmp) expr (maps ... (x tmp)) () rest . body))
((let-values ((params expr) . rest) . body) ((let-values ((params expr) . rest) . body)
(let-values ("step") () () expr () params rest . body)) (let-values ("step") () () expr () params rest . body))))))
))))

View file

@ -237,6 +237,14 @@
((x y) (values a b))) ((x y) (values a b)))
(list a b x y)))) (list a b x y))))
(test 'ok (let-values () 'ok))
(test 1 (let ((x 1))
(let*-values ()
(define x 2)
#f)
x))
(let () (let ()
(define x 0) (define x 0)
(set! x 5) (set! x 5)