error in terms of case-lambda
authorAndy Wingo <wingo@pobox.com>
Fri, 11 Jun 2010 09:17:44 +0000 (11:17 +0200)
committerAndy Wingo <wingo@pobox.com>
Fri, 11 Jun 2010 14:58:31 +0000 (16:58 +0200)
* module/ice-9/boot-9.scm (error): Redefine using case-lambda.

module/ice-9/boot-9.scm

index dae879a..56c7d73 100644 (file)
@@ -845,16 +845,15 @@ If there is no handler at all, Guile prints an error and then exits."
 ;;; {Error Handling}
 ;;;
 
-(define (error . args)
-  (save-stack)
-  (if (null? args)
-      (scm-error 'misc-error #f "?" #f #f)
-      (let loop ((msg "~A")
-                 (rest (cdr args)))
-        (if (not (null? rest))
-            (loop (string-append msg " ~S")
-                  (cdr rest))
-            (scm-error 'misc-error #f msg args #f)))))
+(define error
+  (case-lambda
+    (()
+     (save-stack)
+     (scm-error 'misc-error #f "?" #f #f))
+    ((message . args)
+     (save-stack)
+     (let ((msg (string-join (cons "~A" (make-list (length args) "~S")))))
+       (scm-error 'misc-error #f msg (cons message args) #f)))))
 
 ;; bad-throw is the hook that is called upon a throw to a an unhandled
 ;; key (unless the throw has four arguments, in which case