]> git.eshelyaron.com Git - emacs.git/commitdiff
; * src/eval.c (funcall_subr): Fix last change
authorMattias Engdegård <mattiase@acm.org>
Tue, 1 Feb 2022 19:43:15 +0000 (20:43 +0100)
committerMattias Engdegård <mattiase@acm.org>
Tue, 1 Feb 2022 19:45:36 +0000 (20:45 +0100)
src/eval.c

index 4f1c9077511b8bc34a6667c680a0a283e822a6f5..3e648ed6216eb872db86b2f6432846c40664ce36 100644 (file)
@@ -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