all messages for Emacs-related lists mirrored at yhetil.org
 help / color / mirror / code / Atom feed
From: Barry OReilly <gundaetiapo@gmail.com>
To: emacs-devel@gnu.org
Subject: [PATCH] Refactor Ffunctionp into inline function
Date: Sat, 25 Aug 2012 09:37:05 -0400	[thread overview]
Message-ID: <CAFM41H1_18YwihcwsTfr4t1n8kpDYP5HhSKjuyhr6RUhy8uLZg@mail.gmail.com> (raw)


[-- Attachment #1.1: Type: text/plain, Size: 321 bytes --]

> Yes.  The bulk of Ffunctionp should probably be moved to lisp.h into
> a "functionp" inlinable function, then make FUNCTIONP an alias
> for functionp and make Ffunctionp use functionp.

Is this what you have in mind?  This patch allows my Key Translation with
lambda test case to work with and without lexical binding.

[-- Attachment #1.2: Type: text/html, Size: 371 bytes --]

[-- Attachment #2: functionpRefactor01.txt --]
[-- Type: text/plain, Size: 4931 bytes --]

# Bazaar merge directive format 2 (Bazaar 0.90)
# revision_id: gundaetiapo@gmail.com-20120825132244-a1d8m35g9tvqvzsy
# target_branch: file:///home/epich/bzr/emacs/trunk/
# testament_sha1: 107dfbdd23adeb1928e07603ece9df09558d8649
# timestamp: 2012-08-25 09:22:55 -0400
# base_revision_id: michael.albinus@gmx.de-20120824125540-\
#   o73xp777zwrmy52s
# 
# Begin patch
=== modified file 'src/eval.c'
--- src/eval.c	2012-08-20 09:39:57 +0000
+++ src/eval.c	2012-08-25 13:22:44 +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'
--- src/lisp.h	2012-08-24 04:37:57 +0000
+++ src/lisp.h	2012-08-25 13:22:44 +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 */

# Begin bundle
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

             reply	other threads:[~2012-08-25 13:37 UTC|newest]

Thread overview: 2+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2012-08-25 13:37 Barry OReilly [this message]
2012-08-26  3:31 ` [PATCH] Refactor Ffunctionp into inline function Stefan Monnier

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=CAFM41H1_18YwihcwsTfr4t1n8kpDYP5HhSKjuyhr6RUhy8uLZg@mail.gmail.com \
    --to=gundaetiapo@gmail.com \
    --cc=emacs-devel@gnu.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
Code repositories for project(s) associated with this external index

	https://git.savannah.gnu.org/cgit/emacs.git
	https://git.savannah.gnu.org/cgit/emacs/org-mode.git

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.