aboutsummaryrefslogtreecommitdiffstats
path: root/src/eval.c
diff options
context:
space:
mode:
authorPaul Eggert2016-12-06 21:38:32 -0800
committerPaul Eggert2016-12-06 21:40:38 -0800
commitf0870da2bb5eee848a5561fb58b2ec3a63861052 (patch)
tree04e35afb3918dd711508b706520dedf342e929e7 /src/eval.c
parent2a3420d94206a97f094580e06c25af91d5949516 (diff)
downloademacs-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.c31
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
2641bool
2642FUNCTIONP (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
2641DEFUN ("funcall", Ffuncall, Sfuncall, 1, MANY, 0, 2672DEFUN ("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.
2643Return the value that function returns. 2674Return the value that function returns.