mirror of
https://git.savannah.gnu.org/git/guile.git
synced 2025-06-10 22:10:21 +02:00
Report the faulty keyword in errors raised by `scm_c_bind_keyword_arguments'.
Reported by Mark H. Weaver. * libguile/keywords.c (scm_c_bind_keyword_arguments): Use `scm_error_scm' instead of `scm_error'. Pass the faulty keyword enclosed in a list as the last argument. * test-suite/tests/optargs.test ("scm_c_bind_keyword_arguments"): New test prefix.
This commit is contained in:
parent
4af0d97ee6
commit
79a9a2c271
2 changed files with 28 additions and 8 deletions
|
@ -1,5 +1,6 @@
|
|||
/* Copyright (C) 1995,1996,1997,1998,1999,2000,2001, 2003, 2004, 2006, 2008, 2009 Free Software Foundation, Inc.
|
||||
*
|
||||
/* Copyright (C) 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004,
|
||||
* 2006, 2008, 2009, 2013 Free Software Foundation, Inc.
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Lesser General Public License
|
||||
* as published by the Free Software Foundation; either version 3 of
|
||||
|
@ -157,9 +158,11 @@ scm_c_bind_keyword_arguments (const char *subr, SCM rest,
|
|||
{
|
||||
/* KW_OR_ARG is not in the list of expected keywords. */
|
||||
if (!(flags & SCM_ALLOW_OTHER_KEYS))
|
||||
scm_error (scm_keyword_argument_error,
|
||||
subr, "Unrecognized keyword",
|
||||
SCM_EOL, SCM_BOOL_F);
|
||||
scm_error_scm (scm_keyword_argument_error,
|
||||
scm_from_locale_string (subr),
|
||||
scm_from_latin1_string
|
||||
("Unrecognized keyword"),
|
||||
SCM_EOL, scm_list_1 (kw_or_arg));
|
||||
break;
|
||||
}
|
||||
arg_p = va_arg (va, SCM *);
|
||||
|
@ -181,9 +184,10 @@ scm_c_bind_keyword_arguments (const char *subr, SCM rest,
|
|||
/* The next argument is not a keyword, or is a singleton
|
||||
keyword at the end of REST. */
|
||||
if (!(flags & SCM_ALLOW_NON_KEYWORD_ARGUMENTS))
|
||||
scm_error (scm_keyword_argument_error,
|
||||
subr, "Invalid keyword",
|
||||
SCM_EOL, SCM_BOOL_F);
|
||||
scm_error_scm (scm_keyword_argument_error,
|
||||
scm_from_locale_string (subr),
|
||||
scm_from_latin1_string ("Invalid keyword"),
|
||||
SCM_EOL, scm_list_1 (kw_or_arg));
|
||||
|
||||
/* Advance REST. */
|
||||
rest = tail;
|
||||
|
|
|
@ -169,6 +169,22 @@
|
|||
(equal? (f 1 2 3 #:x 'x #:z 'z)
|
||||
'(x #f z (1 2 3 #:x x #:z z))))))
|
||||
|
||||
(with-test-prefix "scm_c_bind_keyword_arguments"
|
||||
|
||||
(pass-if-equal "unrecognized keyword" '(#:y)
|
||||
(catch 'keyword-argument-error
|
||||
(lambda ()
|
||||
(open-file "/dev/null" "r" #:y 'not-recognized))
|
||||
(lambda (key proc fmt args data)
|
||||
data)))
|
||||
|
||||
(pass-if-equal "invalid keyword" '(not-a-keyword)
|
||||
(catch 'keyword-argument-error
|
||||
(lambda ()
|
||||
(open-file "/dev/null" "r" 'not-a-keyword 'something))
|
||||
(lambda (key proc fmt args data)
|
||||
data))))
|
||||
|
||||
(with-test-prefix/c&e "lambda* inits"
|
||||
(pass-if "can bind lexicals within inits"
|
||||
(begin
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue