summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--src/guile/skribilo/condition.scm32
1 files changed, 25 insertions, 7 deletions
diff --git a/src/guile/skribilo/condition.scm b/src/guile/skribilo/condition.scm
index 280f547..97c97b1 100644
--- a/src/guile/skribilo/condition.scm
+++ b/src/guile/skribilo/condition.scm
@@ -1,7 +1,7 @@
 ;;; condition.scm  --  Skribilo SRFI-35 error condition hierarchy.
 ;;; -*- coding: iso-8859-1 -*-
 ;;;
-;;; Copyright 2006, 2007, 2008  Ludovic Courtès  <ludo@gnu.org>
+;;; Copyright 2006, 2007, 2008, 2015 Ludovic Courtès <ludo@gnu.org>
 ;;;
 ;;;
 ;;; This file is part of Skribilo.
@@ -21,12 +21,15 @@
 
 (define-module (skribilo condition)
   :autoload   (srfi srfi-1)  (find)
-  :autoload   (srfi srfi-34) (with-exception-handler)
+  :use-module (srfi srfi-34)
   :use-module (srfi srfi-35)
   :use-module (srfi srfi-39)
+  :use-module (ice-9 optargs)
   :autoload   (skribilo parameters)   (*destination-file*)
   :autoload   (skribilo utils syntax) (_ N_)
   :export     (&skribilo-error skribilo-error?
+
+               invalid-argument-error
 	       &invalid-argument-error invalid-argument-error?
 	       &too-few-arguments-error too-few-arguments-error?
 
@@ -66,13 +69,21 @@
 (define-condition-type &invalid-argument-error &skribilo-error
   invalid-argument-error?
   (proc-name invalid-argument-error:proc-name)
-  (argument  invalid-argument-error:argument))
+  (argument  invalid-argument-error:argument)
+  (name      invalid-argument-error:name))     ;#f | symbol, for kw arguments
 
 (define-condition-type &too-few-arguments-error &skribilo-error
   too-few-arguments-error?
   (proc-name too-few-arguments-error:proc-name)
   (arguments too-few-arguments-error:arguments))
 
+(define* (invalid-argument-error proc argument #:optional name)
+  "Raise an '&invalid-argument-error'."
+  (raise (condition
+          (&invalid-argument-error
+           (proc-name 'proc)
+           (argument argument)
+           (name name)))))
 
 ;;;
 ;;; File errors.
@@ -146,10 +157,17 @@
   (with-exception-handler
    (lambda (c)
      (cond  ((invalid-argument-error? c)
-	     (format (current-error-port)
-                     (_ "in '~a': invalid argument: ~S~%")
-		     (invalid-argument-error:proc-name c)
-		     (invalid-argument-error:argument c))
+             (let ((name (invalid-argument-error:name c)))
+               (if name
+                   (format (current-error-port)
+                           (_ "in '~a': invalid argument '~a': ~S~%")
+                           (invalid-argument-error:proc-name c)
+                           name
+                           (invalid-argument-error:argument c))
+                   (format (current-error-port)
+                           (_ "in '~a': invalid argument: ~S~%")
+                           (invalid-argument-error:proc-name c)
+                           (invalid-argument-error:argument c))))
 	     (abort exit-val))
 
 	    ((too-few-arguments-error? c)