mirror of
https://git.savannah.gnu.org/git/guile.git
synced 2025-07-06 01:30:22 +02:00
Better errors for odd-length keyword args
* libguile/vm-i-system.c (bind-kwargs): * libguile/vm.c (vm_error_kwargs_missing_value): * libguile/eval.c (error_missing_value) (prepare_boot_closure_env_for_apply): Adapt to mirror VM behavior. * libguile/keywords.c (scm_c_bind_keyword_arguments): Likewise. * module/ice-9/eval.scm (primitive-eval): Update to error on (foo #:kw) with a "Keyword argument has no value" instead of the horrible "odd argument list length". Also adapts to the expected args format for the keyword-argument-error exception printer in all cases. Matches 1.8 optargs behavior also. * test-suite/standalone/test-scm-c-bind-keyword-arguments.c (test_missing_value): (missing_value_error_handler): Update test. * test-suite/tests/optargs.test: Add tests.
This commit is contained in:
parent
f428e93ee7
commit
89ececea95
8 changed files with 142 additions and 91 deletions
|
@ -384,7 +384,7 @@ static void vm_error_unbound_fluid (SCM proc, SCM fluid) SCM_NORETURN;
|
|||
static void vm_error_not_a_variable (const char *func_name, SCM x) SCM_NORETURN;
|
||||
static void vm_error_not_a_thunk (const char *func_name, SCM x) SCM_NORETURN;
|
||||
static void vm_error_apply_to_non_list (SCM x) SCM_NORETURN;
|
||||
static void vm_error_kwargs_length_not_even (SCM proc) SCM_NORETURN;
|
||||
static void vm_error_kwargs_missing_value (SCM proc, SCM kw) SCM_NORETURN;
|
||||
static void vm_error_kwargs_invalid_keyword (SCM proc, SCM obj) SCM_NORETURN;
|
||||
static void vm_error_kwargs_unrecognized_keyword (SCM proc, SCM kw) SCM_NORETURN;
|
||||
static void vm_error_too_many_args (int nargs) SCM_NORETURN;
|
||||
|
@ -462,11 +462,11 @@ vm_error_apply_to_non_list (SCM x)
|
|||
}
|
||||
|
||||
static void
|
||||
vm_error_kwargs_length_not_even (SCM proc)
|
||||
vm_error_kwargs_missing_value (SCM proc, SCM kw)
|
||||
{
|
||||
scm_error_scm (sym_keyword_argument_error, proc,
|
||||
scm_from_latin1_string ("Odd length of keyword argument list"),
|
||||
SCM_EOL, SCM_BOOL_F);
|
||||
scm_from_latin1_string ("Keyword argument has no value"),
|
||||
SCM_EOL, scm_list_1 (kw));
|
||||
}
|
||||
|
||||
static void
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue