mirror of
git://git.sv.gnu.org/emacs.git
synced 2025-12-28 08:11:05 -08:00
Enhance safe_run_hooks_1 and safe_run_hook_funcall to handle more arguments
This fixes bug #57179. * src/keyboard.c (safe_run_hooks_1, safe_run_hook_funcall): Enhance these functions so that nargs == 3 or 4 is handled as well as nargs == 2. This allows them to be used to call hooks with 1 or 2 arguments.
This commit is contained in:
parent
d5ee49c25c
commit
629f980fad
1 changed files with 30 additions and 6 deletions
|
|
@ -1832,8 +1832,16 @@ adjust_point_for_property (ptrdiff_t last_pt, bool modified)
|
|||
static Lisp_Object
|
||||
safe_run_hooks_1 (ptrdiff_t nargs, Lisp_Object *args)
|
||||
{
|
||||
eassert (nargs == 2);
|
||||
return call0 (args[1]);
|
||||
eassert (nargs >= 2 && nargs <= 4);
|
||||
switch (nargs)
|
||||
{
|
||||
case 2:
|
||||
return call0 (args[1]);
|
||||
case 3:
|
||||
return call1 (args[1], args[2]);
|
||||
default:
|
||||
return call2 (args[1], args[2], args[3]);
|
||||
}
|
||||
}
|
||||
|
||||
/* Subroutine for safe_run_hooks: handle an error by clearing out the function
|
||||
|
|
@ -1878,11 +1886,27 @@ safe_run_hooks_error (Lisp_Object error, ptrdiff_t nargs, Lisp_Object *args)
|
|||
static Lisp_Object
|
||||
safe_run_hook_funcall (ptrdiff_t nargs, Lisp_Object *args)
|
||||
{
|
||||
eassert (nargs == 2);
|
||||
eassert (nargs >= 2 && nargs <= 4);
|
||||
/* Yes, run_hook_with_args works with args in the other order. */
|
||||
internal_condition_case_n (safe_run_hooks_1,
|
||||
2, ((Lisp_Object []) {args[1], args[0]}),
|
||||
Qt, safe_run_hooks_error);
|
||||
switch (nargs)
|
||||
{
|
||||
case 2:
|
||||
internal_condition_case_n (safe_run_hooks_1,
|
||||
2, ((Lisp_Object []) {args[1], args[0]}),
|
||||
Qt, safe_run_hooks_error);
|
||||
break;
|
||||
case 3:
|
||||
internal_condition_case_n (safe_run_hooks_1,
|
||||
3, ((Lisp_Object []) {args[1], args[0], args[2]}),
|
||||
Qt, safe_run_hooks_error);
|
||||
break;
|
||||
default:
|
||||
internal_condition_case_n (safe_run_hooks_1,
|
||||
4, ((Lisp_Object [])
|
||||
{args[1], args[0], args[2], args[3]}),
|
||||
Qt, safe_run_hooks_error);
|
||||
break;
|
||||
}
|
||||
return Qnil;
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue