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>
(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));