diff options
author | Stefan Monnier <monnier@iro.umontreal.ca> | 2022-04-26 10:36:52 -0400 |
---|---|---|
committer | Stefan Monnier <monnier@iro.umontreal.ca> | 2022-04-26 10:36:52 -0400 |
commit | bffc4cb39dc7b83fc4a1bffd23eeed2774b79444 (patch) | |
tree | 103b22b517aafd70b16fe2d1dea06cb4673668f5 /src/lisp.h | |
parent | 756b7cf5d9a817503437b3e8a9e8d912b7ee6c75 (diff) | |
download | emacs-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.h | 10 |
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 |