diff options
Diffstat (limited to 'libguile/error.c')
-rw-r--r-- | libguile/error.c | 32 |
1 files changed, 28 insertions, 4 deletions
diff --git a/libguile/error.c b/libguile/error.c index 4790df734..69f680ee5 100644 --- a/libguile/error.c +++ b/libguile/error.c @@ -116,10 +116,34 @@ SCM_DEFINE (scm_error_scm, "scm-error", 5, 0, 0, { char *szSubr; char *szMessage; - SCM_VALIDATE_SYMBOL (1,key); - SCM_VALIDATE_NULLORROSTRING_COPY (2,subr,szSubr); - SCM_VALIDATE_NULLORROSTRING_COPY (3,message,szMessage); - SCM_COERCE_SUBSTR (message); + + SCM_VALIDATE_SYMBOL (1, key); + + if (SCM_FALSEP (subr)) + { + szSubr = NULL; + } + else if (SCM_SYMBOLP (subr)) + { + szSubr = SCM_SYMBOL_CHARS (subr); + } + else + { + SCM_VALIDATE_STRING (2, subr); + SCM_STRING_COERCE_0TERMINATION_X (subr); + szSubr = SCM_STRING_CHARS (subr); + } + + if (SCM_FALSEP (message)) + { + szMessage = NULL; + } + else + { + SCM_VALIDATE_STRING (2, message); + SCM_STRING_COERCE_0TERMINATION_X (message); + szMessage = SCM_STRING_CHARS (message); + } scm_error (key, szSubr, szMessage, args, rest); /* not reached. */ |