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>
Wed, 17 Jul 2019 23:13:37 +0000 (19:13 -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 9f6f4f779cfe53f44ebfd7b632b48b69acecf06e..8297620b86ea6496229c06bca1de8534303888c6 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))