summaryrefslogtreecommitdiff
path: root/src/lisp.h
diff options
context:
space:
mode:
authorStefan Monnier <monnier@iro.umontreal.ca>2022-04-26 10:36:52 -0400
committerStefan Monnier <monnier@iro.umontreal.ca>2022-04-26 10:36:52 -0400
commitbffc4cb39dc7b83fc4a1bffd23eeed2774b79444 (patch)
tree103b22b517aafd70b16fe2d1dea06cb4673668f5 /src/lisp.h
parent756b7cf5d9a817503437b3e8a9e8d912b7ee6c75 (diff)
downloademacs-bffc4cb39dc7b83fc4a1bffd23eeed2774b79444.tar.gz
emacs-bffc4cb39dc7b83fc4a1bffd23eeed2774b79444.tar.bz2
emacs-bffc4cb39dc7b83fc4a1bffd23eeed2774b79444.zip
New generic function `oclosure-interactive-form`
It's used by `interactive-form` when it encounters an OClosure. This lets one compute the `interactive-form` of OClosures dynamically by adding appropriate methods. This does not include support for `command-modes` for Oclosures. * lisp/simple.el (oclosure-interactive-form): New generic function. * src/data.c (Finteractive_form): Delegate to `oclosure-interactive-form` if the arg is an OClosure. (syms_of_data): New symbol `Qoclosure_interactive_form`. * src/eval.c (Fcommandp): Delegate to `interactive-form` if the arg is an OClosure. * src/lisp.h (VALID_DOCSTRING_P): New function, extracted from `store_function_docstring`. * src/doc.c (store_function_docstring): Use it. * lisp/kmacro.el (kmacro): Don't carry any interactive form. (oclosure-interactive-form) <kmacro>: New method, instead. * test/lisp/emacs-lisp/oclosure-tests.el (oclosure-interactive-form) <oclosure-test>: New method. (oclosure-test-interactive-form): New test. * doc/lispref/commands.texi (Using Interactive): Document `oclosure-interactive-form`.
Diffstat (limited to 'src/lisp.h')
-rw-r--r--src/lisp.h10
1 files changed, 10 insertions, 0 deletions
diff --git a/src/lisp.h b/src/lisp.h
index 75f369f5245..1ad89fc4689 100644
--- a/src/lisp.h
+++ b/src/lisp.h
@@ -2185,6 +2185,16 @@ XSUBR (Lisp_Object a)
return &XUNTAG (a, Lisp_Vectorlike, union Aligned_Lisp_Subr)->s;
}
+/* Return whether a value might be a valid docstring.
+ Used to distinguish the presence of non-docstring in the docstring slot,
+ as in the case of OClosures. */
+INLINE bool
+VALID_DOCSTRING_P (Lisp_Object doc)
+{
+ return FIXNUMP (doc) || STRINGP (doc)
+ || (CONSP (doc) && STRINGP (XCAR (doc)) && FIXNUMP (XCDR (doc)));
+}
+
enum char_table_specials
{
/* This is the number of slots that every char table must have. This