emacs-diffs
[Top][All Lists]
Advanced

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

[Emacs-diffs] /srv/bzr/emacs/trunk r109776: * src/lisp.h (functionp): Ne


From: Stefan Monnier
Subject: [Emacs-diffs] /srv/bzr/emacs/trunk r109776: * src/lisp.h (functionp): New function (extracted from Ffunctionp).
Date: Sat, 25 Aug 2012 23:30:56 -0400
User-agent: Bazaar (2.5.0)

------------------------------------------------------------
revno: 109776
author: Barry OReilly <address@hidden>
committer: Stefan Monnier <address@hidden>
branch nick: trunk
timestamp: Sat 2012-08-25 23:30:56 -0400
message:
  * src/lisp.h (functionp): New function (extracted from Ffunctionp).
  (FUNCTIONP): Use it.
  * src/eval.c (Ffunctionp): Use it.
modified:
  src/ChangeLog
  src/eval.c
  src/lisp.h
=== modified file 'src/ChangeLog'
--- a/src/ChangeLog     2012-08-25 20:31:04 +0000
+++ b/src/ChangeLog     2012-08-26 03:30:56 +0000
@@ -1,3 +1,9 @@
+2012-08-26  Barry OReilly  <address@hidden>  (tiny change)
+
+       * lisp.h (functionp): New function (extracted from Ffunctionp).
+       (FUNCTIONP): Use it.
+       * eval.c (Ffunctionp): Use it.
+
 2012-08-25  Paul Eggert  <address@hidden>
 
        * xgselect.c (xg_select): Use auto storage for the GPollFD buffer
@@ -160,8 +166,8 @@
        * w32uniscribe.c (uniscribe_shape): Fix producing gstring
        components for RTL text (Bug#11860).  Adjust X-OFFSET of each
        non-base glyph for the width of the base character, according to
-       what x_draw_composite_glyph_string_foreground expects.  Generate
-       WADJUST value according to composition_gstring_width's
+       what x_draw_composite_glyph_string_foreground expects.
+       Generate WADJUST value according to composition_gstring_width's
        expectations, to produce correct width of the composed character.
        Reverse the sign of the DU offset produced by ScriptPlace.
 

=== modified file 'src/eval.c'
--- a/src/eval.c        2012-08-20 09:39:57 +0000
+++ b/src/eval.c        2012-08-26 03:30:56 +0000
@@ -2722,33 +2722,9 @@
        doc: /* Non-nil if OBJECT is a function.  */)
      (Lisp_Object object)
 {
-  if (SYMBOLP (object) && !NILP (Ffboundp (object)))
-    {
-      object = Findirect_function (object, Qt);
-
-      if (CONSP (object) && EQ (XCAR (object), Qautoload))
-       {
-         /* Autoloaded symbols are functions, except if they load
-            macros or keymaps.  */
-         int i;
-         for (i = 0; i < 4 && CONSP (object); i++)
-           object = XCDR (object);
-
-         return (CONSP (object) && !NILP (XCAR (object))) ? Qnil : Qt;
-       }
-    }
-
-  if (SUBRP (object))
-    return (XSUBR (object)->max_args != UNEVALLED) ? Qt : Qnil;
-  else if (COMPILEDP (object))
+  if (FUNCTIONP (object))
     return Qt;
-  else if (CONSP (object))
-    {
-      Lisp_Object car = XCAR (object);
-      return (EQ (car, Qlambda) || EQ (car, Qclosure)) ? Qt : Qnil;
-    }
-  else
-    return Qnil;
+  return Qnil;
 }
 
 DEFUN ("funcall", Ffuncall, Sfuncall, 1, MANY, 0,

=== modified file 'src/lisp.h'
--- a/src/lisp.h        2012-08-25 03:11:12 +0000
+++ b/src/lisp.h        2012-08-26 03:30:56 +0000
@@ -1906,11 +1906,7 @@
                         Lisp_Object, Lisp_Object, Lisp_Object, Lisp_Object)
 
 /* Non-zero if OBJ is a Lisp function.  */
-#define FUNCTIONP(OBJ)                                 \
-     ((CONSP (OBJ) && EQ (XCAR (OBJ), Qlambda))                \
-      || (SYMBOLP (OBJ) && !NILP (Ffboundp (OBJ)))     \
-      || COMPILEDP (OBJ)                               \
-      || SUBRP (OBJ))
+#define FUNCTIONP(OBJ) functionp(OBJ)
 
 /* defsubr (Sname);
    is how we define the symbol for function `name' at start-up time.  */
@@ -3656,6 +3652,38 @@
     Fgarbage_collect ();
 }
 
+LISP_INLINE int
+functionp (Lisp_Object object)
+{
+  if (SYMBOLP (object) && !NILP (Ffboundp (object)))
+    {
+      object = Findirect_function (object, Qt);
+
+      if (CONSP (object) && EQ (XCAR (object), Qautoload))
+       {
+         /* Autoloaded symbols are functions, except if they load
+            macros or keymaps.  */
+         int i;
+         for (i = 0; i < 4 && CONSP (object); i++)
+           object = XCDR (object);
+
+         return ! (CONSP (object) && !NILP (XCAR (object)));
+       }
+    }
+
+  if (SUBRP (object))
+    return XSUBR (object)->max_args != UNEVALLED;
+  else if (COMPILEDP (object))
+    return 1;
+  else if (CONSP (object))
+    {
+      Lisp_Object car = XCAR (object);
+      return EQ (car, Qlambda) || EQ (car, Qclosure);
+    }
+  else
+    return 0;
+}
+
 INLINE_HEADER_END
 
 #endif /* EMACS_LISP_H */


reply via email to

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