]> code.delx.au - gnu-emacs/blobdiff - src/eval.c
Ibuffer change marks
[gnu-emacs] / src / eval.c
index 64a6655684c1b514b13ee06001a74548587a7fb1..72facd5db64c8452f1edba23074438291306b9a6 100644 (file)
@@ -2946,7 +2946,6 @@ function with `&rest' args, or `unevalled' for a special form.  */)
   Lisp_Object original;
   Lisp_Object funcar;
   Lisp_Object result;
-  short minargs, maxargs;
 
   original = function;
 
@@ -2954,9 +2953,15 @@ function with `&rest' args, or `unevalled' for a special form.  */)
 
   /* Optimize for no indirection.  */
   function = original;
-  if (SYMBOLP (function) && !NILP (function)
-      && (function = XSYMBOL (function)->function, SYMBOLP (function)))
-    function = indirect_function (function);
+  if (SYMBOLP (function) && !NILP (function))
+    {
+      function = XSYMBOL (function)->function;
+      if (SYMBOLP (function))
+       function = indirect_function (function);
+    }
+
+  if (CONSP (function) && EQ (XCAR (function), Qmacro))
+    function = XCDR (function);
 
   if (SUBRP (function))
     result = Fsubr_arity (function);
@@ -2989,9 +2994,7 @@ function with `&rest' args, or `unevalled' for a special form.  */)
 static Lisp_Object
 lambda_arity (Lisp_Object fun)
 {
-  Lisp_Object val, syms_left, next;
-  ptrdiff_t minargs, maxargs;
-  bool optional;
+  Lisp_Object syms_left;
 
   if (CONSP (fun))
     {
@@ -3018,17 +3021,18 @@ lambda_arity (Lisp_Object fun)
   else
     emacs_abort ();
 
-  minargs = maxargs = optional = 0;
+  EMACS_INT minargs = 0, maxargs = 0;
+  bool optional = false;
   for (; CONSP (syms_left); syms_left = XCDR (syms_left))
     {
-      next = XCAR (syms_left);
+      Lisp_Object next = XCAR (syms_left);
       if (!SYMBOLP (next))
        xsignal1 (Qinvalid_function, fun);
 
       if (EQ (next, Qand_rest))
        return Fcons (make_number (minargs), Qmany);
       else if (EQ (next, Qand_optional))
-       optional = 1;
+       optional = true;
       else
        {
           if (!optional)
@@ -3043,7 +3047,6 @@ lambda_arity (Lisp_Object fun)
   return Fcons (make_number (minargs), make_number (maxargs));
 }
 
-
 DEFUN ("fetch-bytecode", Ffetch_bytecode, Sfetch_bytecode,
        1, 1, 0,
        doc: /* If byte-compiled OBJECT is lazy-loaded, fetch it now.  */)