diff options
| author | Paul Eggert | 2016-12-06 21:38:32 -0800 |
|---|---|---|
| committer | Paul Eggert | 2016-12-06 21:40:38 -0800 |
| commit | f0870da2bb5eee848a5561fb58b2ec3a63861052 (patch) | |
| tree | 04e35afb3918dd711508b706520dedf342e929e7 /src/eval.c | |
| parent | 2a3420d94206a97f094580e06c25af91d5949516 (diff) | |
| download | emacs-f0870da2bb5eee848a5561fb58b2ec3a63861052.tar.gz emacs-f0870da2bb5eee848a5561fb58b2ec3a63861052.zip | |
Simplify FUNCTIONP implementation
* src/bytecode.c (exec_byte_code):
* src/image.c (parse_image_spec):
Prefer FUNCTIONP (x) to !NILP (Ffunctionp (x)).
* src/eval.c (FUNCTIONP): Move here ...
* src/lisp.h: ... from here. No longer inline, as that
bloats the text and does not help speed (at least on my platform).
(functionp): Remove this name, since callers use FUNCTIONP.
Diffstat (limited to 'src/eval.c')
| -rw-r--r-- | src/eval.c | 31 |
1 files changed, 31 insertions, 0 deletions
diff --git a/src/eval.c b/src/eval.c index 724f0018a58..8ad06dded80 100644 --- a/src/eval.c +++ b/src/eval.c | |||
| @@ -2638,6 +2638,37 @@ DEFUN ("functionp", Ffunctionp, Sfunctionp, 1, 1, 0, | |||
| 2638 | return Qnil; | 2638 | return Qnil; |
| 2639 | } | 2639 | } |
| 2640 | 2640 | ||
| 2641 | bool | ||
| 2642 | FUNCTIONP (Lisp_Object object) | ||
| 2643 | { | ||
| 2644 | if (SYMBOLP (object) && !NILP (Ffboundp (object))) | ||
| 2645 | { | ||
| 2646 | object = Findirect_function (object, Qt); | ||
| 2647 | |||
| 2648 | if (CONSP (object) && EQ (XCAR (object), Qautoload)) | ||
| 2649 | { | ||
| 2650 | /* Autoloaded symbols are functions, except if they load | ||
| 2651 | macros or keymaps. */ | ||
| 2652 | for (int i = 0; i < 4 && CONSP (object); i++) | ||
| 2653 | object = XCDR (object); | ||
| 2654 | |||
| 2655 | return ! (CONSP (object) && !NILP (XCAR (object))); | ||
| 2656 | } | ||
| 2657 | } | ||
| 2658 | |||
| 2659 | if (SUBRP (object)) | ||
| 2660 | return XSUBR (object)->max_args != UNEVALLED; | ||
| 2661 | else if (COMPILEDP (object)) | ||
| 2662 | return true; | ||
| 2663 | else if (CONSP (object)) | ||
| 2664 | { | ||
| 2665 | Lisp_Object car = XCAR (object); | ||
| 2666 | return EQ (car, Qlambda) || EQ (car, Qclosure); | ||
| 2667 | } | ||
| 2668 | else | ||
| 2669 | return false; | ||
| 2670 | } | ||
| 2671 | |||
| 2641 | DEFUN ("funcall", Ffuncall, Sfuncall, 1, MANY, 0, | 2672 | DEFUN ("funcall", Ffuncall, Sfuncall, 1, MANY, 0, |
| 2642 | doc: /* Call first argument as a function, passing remaining arguments to it. | 2673 | doc: /* Call first argument as a function, passing remaining arguments to it. |
| 2643 | Return the value that function returns. | 2674 | Return the value that function returns. |