changeset 82112:dd8905ab6eaa

(Finteractive_form): Check for the presence of an `interactive-form' symbol property more thoroughly.
author Stefan Monnier <monnier@iro.umontreal.ca>
date Wed, 25 Jul 2007 21:03:24 +0000
parents 63aefab8fbc3
children 76ba0f031e99
files src/ChangeLog src/data.c
diffstat 2 files changed, 24 insertions(+), 10 deletions(-) [+]
line wrap: on
line diff
--- a/src/ChangeLog	Wed Jul 25 19:37:21 2007 +0000
+++ b/src/ChangeLog	Wed Jul 25 21:03:24 2007 +0000
@@ -1,6 +1,11 @@
 2007-07-25  Stefan Monnier  <monnier@iro.umontreal.ca>
 
-	* data.c (Finteractive_form): Use a `interactive-form' property if
+	* eval.c (Fcommandp): Pay attention to the `interactive-form' property.
+
+	* data.c (Finteractive_form): Check for the presence of an
+	`interactive-form' symbol property more thoroughly.
+
+	* data.c (Finteractive_form): Use an `interactive-form' property if
 	present, analogous to the function-documentation property.
 
 2007-07-22  Nick Roberts  <nickrob@snap.net.nz>
--- a/src/data.c	Wed Jul 25 19:37:21 2007 +0000
+++ b/src/data.c	Wed Jul 25 21:03:24 2007 +0000
@@ -750,15 +750,24 @@
      (cmd)
      Lisp_Object cmd;
 {
-  Lisp_Object fun = indirect_function (cmd);
-  Lisp_Object tmp;
-
-  if (SYMBOLP (cmd)
-      /* Use an `interactive-form' property if present, analogous to the
-	 function-documentation property. */
-      && (tmp = Fget (cmd, intern ("interactive-form")), !NILP (tmp)))
-    return tmp;
-  else if (SUBRP (fun))
+  Lisp_Object fun = indirect_function (cmd); /* Check cycles.  */
+  
+  if (NILP (fun) || EQ (fun, Qunbound))
+    return Qnil;
+
+  /* Use an `interactive-form' property if present, analogous to the
+     function-documentation property. */
+  fun = cmd;
+  while (SYMBOLP (fun))
+    {
+      Lisp_Object tmp = Fget (fun, intern ("interactive-form"));
+      if (!NILP (tmp))
+	return tmp;
+      else
+	fun = Fsymbol_function (fun);
+    }
+
+  if (SUBRP (fun))
     {
       if (XSUBR (fun)->prompt)
 	return list2 (Qinteractive, build_string (XSUBR (fun)->prompt));