cs: fix schemify of non-rator call-with-values

This commit is contained in:
Matthew Flatt 2018-11-14 19:38:42 -07:00
parent 4068b9097d
commit caf28648e3
2 changed files with 12 additions and 7 deletions

View File

@ -57,13 +57,16 @@
(with-syntax ([n-args (length #'(rand ...))])
#'((extract-procedure rator n-args) rand ...))]))
(define (|#%call-with-values| generator receiver)
(call-with-values (if (#%procedure? generator)
generator
(lambda () (|#%app| generator)))
(if (#%procedure? receiver)
receiver
(lambda args (apply receiver args)))))
(define |#%call-with-values|
(|#%name|
call-with-values
(lambda (generator receiver)
(call-with-values (if (#%procedure? generator)
generator
(lambda () (|#%app| generator)))
(if (#%procedure? receiver)
receiver
(lambda args (apply receiver args)))))))
(define (extract-procedure f n-args)
(cond

View File

@ -650,6 +650,8 @@
(cond
[(not (symbol? u-v))
v]
[(eq? u-v 'call-with-values)
'#%call-with-values]
[(and (via-variable-mutated-state? (hash-ref mutated u-v #f))
(hash-ref exports u-v #f))
=> (lambda (ex) `(variable-ref ,(export-id ex)))]