emacs-diffs
[Top][All Lists]
Advanced

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

master 4af491605c: ; * src/eval.c (funcall_subr): Fix last change


From: Mattias Engdegård
Subject: master 4af491605c: ; * src/eval.c (funcall_subr): Fix last change
Date: Tue, 1 Feb 2022 14:45:51 -0500 (EST)

branch: master
commit 4af491605c58a4033116f17be15977e9b885fdee
Author: Mattias Engdegård <mattiase@acm.org>
Commit: Mattias Engdegård <mattiase@acm.org>

    ; * src/eval.c (funcall_subr): Fix last change
---
 src/eval.c | 98 ++++++++++++++++++++++++++++++++------------------------------
 1 file changed, 51 insertions(+), 47 deletions(-)

diff --git a/src/eval.c b/src/eval.c
index 4f1c907751..3e648ed621 100644
--- a/src/eval.c
+++ b/src/eval.c
@@ -3105,60 +3105,64 @@ Lisp_Object
 funcall_subr (struct Lisp_Subr *subr, ptrdiff_t numargs, Lisp_Object *args)
 {
   eassume (numargs >= 0);
-  /* Conforming call to finite-arity subr.  */
-  if (numargs >= subr->min_args && numargs <= subr->max_args)
+  if (numargs >= subr->min_args)
     {
-      Lisp_Object argbuf[8];
-      Lisp_Object *a;
-      if (numargs < subr->max_args)
-        {
-          eassume (subr->max_args <= ARRAYELTS (argbuf));
-          a = argbuf;
-          memcpy (a, args, numargs * word_size);
-          memclear (a + numargs, (subr->max_args - numargs) * word_size);
-        }
-      else
-        a = args;
-      switch (subr->max_args)
-        {
-        case 0:
-          return subr->function.a0 ();
-        case 1:
-          return subr->function.a1 (a[0]);
-        case 2:
-          return subr->function.a2 (a[0], a[1]);
-        case 3:
-          return subr->function.a3 (a[0], a[1], a[2]);
-        case 4:
-          return subr->function.a4 (a[0], a[1], a[2], a[3]);
-        case 5:
-          return subr->function.a5 (a[0], a[1], a[2], a[3], a[4]);
-        case 6:
-          return subr->function.a6 (a[0], a[1], a[2], a[3], a[4], a[5]);
-        case 7:
-          return subr->function.a7 (a[0], a[1], a[2], a[3], a[4], a[5], a[6]);
-        case 8:
-          return subr->function.a8 (a[0], a[1], a[2], a[3], a[4], a[5], a[6],
-                                   a[7]);
-        default:
-          /* If a subr takes more than 8 arguments without using MANY
-             or UNEVALLED, we need to extend this function to support it.
-             Until this is done, there is no way to call the function.  */
-          emacs_abort ();
-        }
-    }
+      /* Conforming call to finite-arity subr.  */
+      if (numargs <= subr->max_args)
+       {
+         Lisp_Object argbuf[8];
+         Lisp_Object *a;
+         if (numargs < subr->max_args)
+           {
+             eassume (subr->max_args <= ARRAYELTS (argbuf));
+             a = argbuf;
+             memcpy (a, args, numargs * word_size);
+             memclear (a + numargs, (subr->max_args - numargs) * word_size);
+           }
+         else
+           a = args;
+         switch (subr->max_args)
+           {
+           case 0:
+             return subr->function.a0 ();
+           case 1:
+             return subr->function.a1 (a[0]);
+           case 2:
+             return subr->function.a2 (a[0], a[1]);
+           case 3:
+             return subr->function.a3 (a[0], a[1], a[2]);
+           case 4:
+             return subr->function.a4 (a[0], a[1], a[2], a[3]);
+           case 5:
+             return subr->function.a5 (a[0], a[1], a[2], a[3], a[4]);
+           case 6:
+             return subr->function.a6 (a[0], a[1], a[2], a[3], a[4], a[5]);
+           case 7:
+             return subr->function.a7 (a[0], a[1], a[2], a[3], a[4], a[5],
+                                       a[6]);
+           case 8:
+             return subr->function.a8 (a[0], a[1], a[2], a[3], a[4], a[5],
+                                       a[6], a[7]);
+           default:
+             /* If a subr takes more than 8 arguments without using MANY
+                or UNEVALLED, we need to extend this function to support it.
+                Until this is done, there is no way to call the function.  */
+             emacs_abort ();
+           }
+       }
 
-  /* Call to n-adic subr.  */
-  if (subr->max_args == MANY)
-    return subr->function.aMANY (numargs, args);
+      /* Call to n-adic subr.  */
+      if (subr->max_args == MANY)
+       return subr->function.aMANY (numargs, args);
+    }
 
   /* Anything else is an error.  */
   Lisp_Object fun;
   XSETSUBR (fun, subr);
-  if (subr->max_args >= 0)
-    xsignal2 (Qwrong_number_of_arguments, fun, make_fixnum (numargs));
-  else
+  if (subr->max_args == UNEVALLED)
     xsignal1 (Qinvalid_function, fun);
+  else
+    xsignal2 (Qwrong_number_of_arguments, fun, make_fixnum (numargs));
 }
 
 /* Call the compiled Lisp function FUN.  If we have not yet read FUN's



reply via email to

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