Make for/fold/derived check the values in the body in the last clause.

Closes PR 13285.
This commit is contained in:
Eric Dobson 2015-03-09 00:19:26 -07:00 committed by Matthew Flatt
parent acd1fe7f8d
commit 9c014b61e6
2 changed files with 10 additions and 1 deletions

View File

@ -435,4 +435,11 @@
(err/rt-test (for/fold () ([x '(1 2)]) x) exn:fail:contract:arity?) (err/rt-test (for/fold () ([x '(1 2)]) x) exn:fail:contract:arity?)
(err/rt-test (for*/fold () ([x '(1 2)]) x) exn:fail:contract:arity?) (err/rt-test (for*/fold () ([x '(1 2)]) x) exn:fail:contract:arity?)
;; for/fold result-arity checking:
(err/rt-test (begin (for/fold () ([i (in-range 10)]) 1) 1) #rx".*expected number of values not received.*")
(err/rt-test (begin (for/fold () () 1) 1) #rx".*expected number of values not received.*")
(err/rt-test (begin (for/fold ([x 1]) () (values 1 2)) 1) #rx".*expected number of values not received.*")
(err/rt-test (begin (for/fold ([x 1] [y 2]) ([i (in-range 10)]) 1) 1) #rx".*expected number of values not received.*")
(test 1 'one (begin (for/fold () () (values)) 1))
(report-errs) (report-errs)

View File

@ -1240,7 +1240,9 @@
;; Done case (no more clauses, and no generated clauses to emit): ;; Done case (no more clauses, and no generated clauses to emit):
[(_ [orig-stx nested? emit? ()] ([fold-var fold-init] ...) () [(_ [orig-stx nested? emit? ()] ([fold-var fold-init] ...) ()
expr1 expr ...) expr1 expr ...)
#`(let ([fold-var fold-init] ...) (let () expr1 expr ...))] #`(let ([fold-var fold-init] ...)
(let-values ([(fold-var ...) (let () expr1 expr ...)])
(values fold-var ...)))]
;; Switch-to-emit case (no more clauses to generate): ;; Switch-to-emit case (no more clauses to generate):
[(_ [orig-stx nested? #f binds] ([fold-var fold-init] ...) () . body) [(_ [orig-stx nested? #f binds] ([fold-var fold-init] ...) () . body)
#`(for/foldX/derived [orig-stx nested? #t binds] #`(for/foldX/derived [orig-stx nested? #t binds]