Change multiple-value return to be slighly closer to correct.
authorChris Hanson <org/chris-hanson/cph>
Mon, 8 Jul 2019 19:34:09 +0000 (15:34 -0400)
committerChris Hanson <org/chris-hanson/cph>
Mon, 8 Jul 2019 19:35:23 +0000 (15:35 -0400)
It's never going to be correct, but this at least permits mixing single values
and multiple values a bit.

src/runtime/global.scm

index ba9a00374dbbff9f5ccd4df9759b08a579de61e6..e9a6675d45595f33ced4bae9a4f001eec3e73bc9 100644 (file)
@@ -129,12 +129,22 @@ USA.
 (define bind-cell-contents!
   (object-component-binder cell-contents set-cell-contents!))
 
+(define-record-type <multi-values>
+    (make-multi-values list)
+    multi-values?
+  (list multi-values-list))
+
 (define (values . objects)
-  (lambda (receiver)
-    (apply receiver objects)))
+  (if (and (pair? objects)
+          (null? (cdr objects)))
+      (car objects)
+      (make-multi-values objects)))
 
 (define (call-with-values thunk receiver)
-  ((thunk) receiver))
+  (let ((v (thunk)))
+    (if (multi-values? v)
+       (apply receiver (multi-values-list v))
+       (receiver v))))
 
 (define (write-to-string object #!optional max)
   (if (or (default-object? max) (not max))