diff options
| author | Paul Eggert | 2016-03-26 19:24:25 -0700 |
|---|---|---|
| committer | Paul Eggert | 2016-03-26 19:24:46 -0700 |
| commit | bc9cc21d34ae71dc38bd20f224c4b3ac073bcb50 (patch) | |
| tree | 259f54589caf61669955e0708b6800101db465b2 /src | |
| parent | efb1883244f551cfb43fa9d85e3df8cc334fb232 (diff) | |
| download | emacs-bc9cc21d34ae71dc38bd20f224c4b3ac073bcb50.tar.gz emacs-bc9cc21d34ae71dc38bd20f224c4b3ac073bcb50.zip | |
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.
Diffstat (limited to 'src')
| -rw-r--r-- | src/bytecode.c | 20 | ||||
| -rw-r--r-- | src/eval.c | 22 |
2 files changed, 19 insertions, 23 deletions
diff --git a/src/bytecode.c b/src/bytecode.c index 4ff15d2912a..fb9f617b514 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, | |||
| 1991 | Lisp_Object | 1991 | Lisp_Object |
| 1992 | get_byte_code_arity (Lisp_Object args_template) | 1992 | get_byte_code_arity (Lisp_Object args_template) |
| 1993 | { | 1993 | { |
| 1994 | if (INTEGERP (args_template)) | 1994 | eassert (NATNUMP (args_template)); |
| 1995 | { | 1995 | EMACS_INT at = XINT (args_template); |
| 1996 | ptrdiff_t at = XINT (args_template); | 1996 | bool rest = (at & 128) != 0; |
| 1997 | bool rest = (at & 128) != 0; | 1997 | int mandatory = at & 127; |
| 1998 | int mandatory = at & 127; | 1998 | EMACS_INT nonrest = at >> 8; |
| 1999 | ptrdiff_t nonrest = at >> 8; | 1999 | |
| 2000 | 2000 | return Fcons (make_number (mandatory), | |
| 2001 | return Fcons (make_number (mandatory), | 2001 | rest ? Qmany : make_number (nonrest)); |
| 2002 | rest ? Qmany : make_number (nonrest)); | ||
| 2003 | } | ||
| 2004 | else | ||
| 2005 | error ("Unknown args template!"); | ||
| 2006 | } | 2002 | } |
| 2007 | 2003 | ||
| 2008 | void | 2004 | void |
diff --git a/src/eval.c b/src/eval.c index 64a6655684c..e90b077bfb6 100644 --- a/src/eval.c +++ b/src/eval.c | |||
| @@ -2946,7 +2946,6 @@ function with `&rest' args, or `unevalled' for a special form. */) | |||
| 2946 | Lisp_Object original; | 2946 | Lisp_Object original; |
| 2947 | Lisp_Object funcar; | 2947 | Lisp_Object funcar; |
| 2948 | Lisp_Object result; | 2948 | Lisp_Object result; |
| 2949 | short minargs, maxargs; | ||
| 2950 | 2949 | ||
| 2951 | original = function; | 2950 | original = function; |
| 2952 | 2951 | ||
| @@ -2954,9 +2953,12 @@ function with `&rest' args, or `unevalled' for a special form. */) | |||
| 2954 | 2953 | ||
| 2955 | /* Optimize for no indirection. */ | 2954 | /* Optimize for no indirection. */ |
| 2956 | function = original; | 2955 | function = original; |
| 2957 | if (SYMBOLP (function) && !NILP (function) | 2956 | if (SYMBOLP (function) && !NILP (function)) |
| 2958 | && (function = XSYMBOL (function)->function, SYMBOLP (function))) | 2957 | { |
| 2959 | function = indirect_function (function); | 2958 | function = XSYMBOL (function)->function; |
| 2959 | if (SYMBOLP (function)) | ||
| 2960 | function = indirect_function (function); | ||
| 2961 | } | ||
| 2960 | 2962 | ||
| 2961 | if (SUBRP (function)) | 2963 | if (SUBRP (function)) |
| 2962 | result = Fsubr_arity (function); | 2964 | result = Fsubr_arity (function); |
| @@ -2989,9 +2991,7 @@ function with `&rest' args, or `unevalled' for a special form. */) | |||
| 2989 | static Lisp_Object | 2991 | static Lisp_Object |
| 2990 | lambda_arity (Lisp_Object fun) | 2992 | lambda_arity (Lisp_Object fun) |
| 2991 | { | 2993 | { |
| 2992 | Lisp_Object val, syms_left, next; | 2994 | Lisp_Object syms_left; |
| 2993 | ptrdiff_t minargs, maxargs; | ||
| 2994 | bool optional; | ||
| 2995 | 2995 | ||
| 2996 | if (CONSP (fun)) | 2996 | if (CONSP (fun)) |
| 2997 | { | 2997 | { |
| @@ -3018,17 +3018,18 @@ lambda_arity (Lisp_Object fun) | |||
| 3018 | else | 3018 | else |
| 3019 | emacs_abort (); | 3019 | emacs_abort (); |
| 3020 | 3020 | ||
| 3021 | minargs = maxargs = optional = 0; | 3021 | EMACS_INT minargs = 0, maxargs = 0; |
| 3022 | bool optional = false; | ||
| 3022 | for (; CONSP (syms_left); syms_left = XCDR (syms_left)) | 3023 | for (; CONSP (syms_left); syms_left = XCDR (syms_left)) |
| 3023 | { | 3024 | { |
| 3024 | next = XCAR (syms_left); | 3025 | Lisp_Object next = XCAR (syms_left); |
| 3025 | if (!SYMBOLP (next)) | 3026 | if (!SYMBOLP (next)) |
| 3026 | xsignal1 (Qinvalid_function, fun); | 3027 | xsignal1 (Qinvalid_function, fun); |
| 3027 | 3028 | ||
| 3028 | if (EQ (next, Qand_rest)) | 3029 | if (EQ (next, Qand_rest)) |
| 3029 | return Fcons (make_number (minargs), Qmany); | 3030 | return Fcons (make_number (minargs), Qmany); |
| 3030 | else if (EQ (next, Qand_optional)) | 3031 | else if (EQ (next, Qand_optional)) |
| 3031 | optional = 1; | 3032 | optional = true; |
| 3032 | else | 3033 | else |
| 3033 | { | 3034 | { |
| 3034 | if (!optional) | 3035 | if (!optional) |
| @@ -3043,7 +3044,6 @@ lambda_arity (Lisp_Object fun) | |||
| 3043 | return Fcons (make_number (minargs), make_number (maxargs)); | 3044 | return Fcons (make_number (minargs), make_number (maxargs)); |
| 3044 | } | 3045 | } |
| 3045 | 3046 | ||
| 3046 | |||
| 3047 | DEFUN ("fetch-bytecode", Ffetch_bytecode, Sfetch_bytecode, | 3047 | DEFUN ("fetch-bytecode", Ffetch_bytecode, Sfetch_bytecode, |
| 3048 | 1, 1, 0, | 3048 | 1, 1, 0, |
| 3049 | doc: /* If byte-compiled OBJECT is lazy-loaded, fetch it now. */) | 3049 | doc: /* If byte-compiled OBJECT is lazy-loaded, fetch it now. */) |