summaryrefslogtreecommitdiff
path: root/lisp/emacs-lisp
diff options
context:
space:
mode:
authorStefan Monnier <monnier@iro.umontreal.ca>2024-03-04 23:12:29 -0500
committerStefan Monnier <monnier@iro.umontreal.ca>2024-03-04 23:12:29 -0500
commit418ad866bf846a6a3328d91df28c958be75337be (patch)
treed87514f075d15a63fd7340d1bf9a815f9a3d31da /lisp/emacs-lisp
parent1a35eb86b8cb75ce390525dd3394a52376b622a6 (diff)
downloademacs-418ad866bf846a6a3328d91df28c958be75337be.tar.gz
emacs-418ad866bf846a6a3328d91df28c958be75337be.tar.bz2
emacs-418ad866bf846a6a3328d91df28c958be75337be.zip
cl-preloaded.el: Further fine-tuning
* lisp/emacs-lisp/cl-preloaded.el (cl--direct-supertypes-of-type): Fix some left over issues: - Remove redundant `number-or-marker` from `marker`s parents. - Add `function` to the types, since it was missing. (cl--typeof-types): Add a warning for missing type info. * admin/syncdoc-type-hierarchy.el (syncdoc-hierarchy): Fix parent of `oclosure`. * doc/lispref/type_hierarchy.txt: * doc/lispref/type_hierarchy.jpg: Update.
Diffstat (limited to 'lisp/emacs-lisp')
-rw-r--r--lisp/emacs-lisp/cl-preloaded.el21
1 files changed, 18 insertions, 3 deletions
diff --git a/lisp/emacs-lisp/cl-preloaded.el b/lisp/emacs-lisp/cl-preloaded.el
index a4ddc55b257..ea08d35ecec 100644
--- a/lisp/emacs-lisp/cl-preloaded.el
+++ b/lisp/emacs-lisp/cl-preloaded.el
@@ -51,14 +51,25 @@
(signal 'cl-assertion-failed `(,form ,@sargs)))))
(defconst cl--direct-supertypes-of-type
+ ;; Please run `sycdoc-update-type-hierarchy' in
+ ;; `admin/syncdoc-type-hierarchy.el' each time this is modified to
+ ;; reflect the change in the documentation.
(let ((table (make-hash-table :test #'eq)))
+ ;; FIXME: Our type DAG has various quirks:
+ ;; - `subr' says it's a `compiled-function' but that's not true
+ ;; for those subrs that are special forms!
+ ;; - Some `keyword's are also `symbol-with-pos' but that's not reflected
+ ;; in the DAG.
+ ;; - An OClosure can be an interpreted function or a `byte-code-function',
+ ;; so the DAG of OClosure types is "orthogonal" to the distinction
+ ;; between interpreted and compiled functions.
(dolist (x '((sequence t)
(atom t)
(list sequence)
(array sequence atom)
(float number)
(integer number integer-or-marker)
- (marker integer-or-marker number-or-marker)
+ (marker integer-or-marker)
(integer-or-marker number-or-marker)
(number number-or-marker)
(bignum integer)
@@ -73,10 +84,11 @@
;; FIXME: This results in `atom' coming before `list' :-(
(null boolean list)
(cons list)
+ (function atom)
(byte-code-function compiled-function)
(subr compiled-function)
- (module-function function atom)
- (compiled-function function atom)
+ (module-function function)
+ (compiled-function function)
(subr-native-elisp subr)
(subr-primitive subr)))
(puthash (car x) (cdr x) table))
@@ -100,8 +112,11 @@
(lambda (type)
;; FIXME: copy&pasted from `cl--class-allparents'.
(let ((parents (gethash type cl--direct-supertypes-of-type)))
+ (unless parents
+ (message "Warning: Type without parent: %S!" type))
(cons type
(merge-ordered-lists
+ ;; FIXME: Can't remember why `t' is excluded.
(mapcar allparents (remq t parents))))))))
(maphash (lambda (type _)
(push (funcall allparents type) alist))