* module/ice-9/futures.scm (process-future!): Use `call-with-values'
when invoking `(future-thunk future)'.
* test-suite/tests/future.test ("futures")["multiple values"]: New test.
(set-future-result! future
(catch #t
(lambda ()
- (let ((result ((future-thunk future))))
- (lambda ()
- result)))
+ (call-with-values (future-thunk future)
+ (lambda results
+ (lambda ()
+ (apply values results)))))
(lambda args
(lambda ()
(apply throw args)))))
(iota 123)))))))
(reduce + 0 (iota 123))))
+ (pass-if "multiple values"
+ (let ((lst (iota 123)))
+ (equal? (zip lst lst)
+ (map (lambda (f)
+ (call-with-values (cut touch f) list))
+ (map (lambda (i)
+ (future (values i i)))
+ lst)))))
+
(pass-if "no exception"
(future? (future (throw 'foo 'bar))))