emacs-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

master 629f980fad: Enhance safe_run_hooks_1 and safe_run_hook_funcall to


From: Alan Mackenzie
Subject: master 629f980fad: Enhance safe_run_hooks_1 and safe_run_hook_funcall to handle more arguments
Date: Mon, 15 Aug 2022 08:19:39 -0400 (EDT)

branch: master
commit 629f980fad0bee97ff63c5f684b472cc71061eea
Author: Alan Mackenzie <acm@muc.de>
Commit: Alan Mackenzie <acm@muc.de>

    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.
---
 src/keyboard.c | 36 ++++++++++++++++++++++++++++++------
 1 file changed, 30 insertions(+), 6 deletions(-)

diff --git a/src/keyboard.c b/src/keyboard.c
index 8a2b7d58c4..1d7125a0a3 100644
--- a/src/keyboard.c
+++ b/src/keyboard.c
@@ -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;
 }
 



reply via email to

[Prev in Thread] Current Thread [Next in Thread]