emacs-diffs
[Top][All Lists]
Advanced

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

[Emacs-diffs] master bc9cc21: func-arity minor improvements


From: Paul Eggert
Subject: [Emacs-diffs] master bc9cc21: func-arity minor improvements
Date: Sun, 27 Mar 2016 02:24:50 +0000

branch: master
commit bc9cc21d34ae71dc38bd20f224c4b3ac073bcb50
Author: Paul Eggert <address@hidden>
Commit: Paul Eggert <address@hidden>

    func-arity minor improvements
    
    * src/bytecode.c (get_byte_code_arity): Omit unnecessary
    runtime test for integer argument, unless debugging.
    Use EMACS_INT for Emacs integers.
    * src/eval.c (Ffunc_arity): Omit unused locals.
    Avoid side effects in ‘if’ expr.
    (lambda_arity): Use bool for boolean, and EMACS_INT for Emacs ints.
---
 src/bytecode.c |   20 ++++++++------------
 src/eval.c     |   22 +++++++++++-----------
 2 files changed, 19 insertions(+), 23 deletions(-)

diff --git a/src/bytecode.c b/src/bytecode.c
index 4ff15d2..fb9f617 100644
--- a/src/bytecode.c
+++ b/src/bytecode.c
@@ -1991,18 +1991,14 @@ exec_byte_code (Lisp_Object bytestr, Lisp_Object 
vector, Lisp_Object maxdepth,
 Lisp_Object
 get_byte_code_arity (Lisp_Object args_template)
 {
-  if (INTEGERP (args_template))
-    {
-      ptrdiff_t at = XINT (args_template);
-      bool rest = (at & 128) != 0;
-      int mandatory = at & 127;
-      ptrdiff_t nonrest = at >> 8;
-
-      return Fcons (make_number (mandatory),
-                   rest ? Qmany : make_number (nonrest));
-    }
-  else
-    error ("Unknown args template!");
+  eassert (NATNUMP (args_template));
+  EMACS_INT at = XINT (args_template);
+  bool rest = (at & 128) != 0;
+  int mandatory = at & 127;
+  EMACS_INT nonrest = at >> 8;
+
+  return Fcons (make_number (mandatory),
+               rest ? Qmany : make_number (nonrest));
 }
 
 void
diff --git a/src/eval.c b/src/eval.c
index 64a6655..e90b077 100644
--- a/src/eval.c
+++ b/src/eval.c
@@ -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,12 @@ 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 (SUBRP (function))
     result = Fsubr_arity (function);
@@ -2989,9 +2991,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 +3018,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 +3044,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.  */)



reply via email to

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