summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--admin/syncdoc-type-hierarchy.el2
-rw-r--r--doc/lispref/type_hierarchy.jpgbin223501 -> 237291 bytes
-rw-r--r--doc/lispref/type_hierarchy.txt49
-rw-r--r--lisp/emacs-lisp/cl-preloaded.el21
4 files changed, 46 insertions, 26 deletions
diff --git a/admin/syncdoc-type-hierarchy.el b/admin/syncdoc-type-hierarchy.el
index cb4df63a312..6448369625b 100644
--- a/admin/syncdoc-type-hierarchy.el
+++ b/admin/syncdoc-type-hierarchy.el
@@ -69,7 +69,7 @@
(not (eq type 'eieio-default-superclass)))
'(eieio-default-superclass))
;; OClosures can still be lists :-(
- ((eq 'oclosure type) '(t))
+ ((eq 'oclosure type) '(function))
(t '(atom)))
ht)))))
ht))
diff --git a/doc/lispref/type_hierarchy.jpg b/doc/lispref/type_hierarchy.jpg
index b7eba7d1cf7..6b9be985817 100644
--- a/doc/lispref/type_hierarchy.jpg
+++ b/doc/lispref/type_hierarchy.jpg
Binary files differ
diff --git a/doc/lispref/type_hierarchy.txt b/doc/lispref/type_hierarchy.txt
index c74bc45635b..6827bbbc580 100644
--- a/doc/lispref/type_hierarchy.txt
+++ b/doc/lispref/type_hierarchy.txt
@@ -1,22 +1,27 @@
-| Type | Derived Types |
-|-------------------+----------------------------------------------------------|
-| t | sequence atom |
-| sequence | list array |
-| atom | class structure tree-sitter-compiled-query |
-| | tree-sitter-node tree-sitter-parser user-ptr font-object |
-| | font-entity font-spec condvar mutex thread terminal |
-| | hash-table frame buffer function window process |
-| | window-configuration overlay integer-or-marker |
-| | number-or-marker symbol array obarray |
-| number | float integer |
-| number-or-marker | marker number |
-| integer | bignum fixnum |
-| symbol | keyword boolean symbol-with-pos |
-| array | vector bool-vector char-table string |
-| list | null cons |
-| integer-or-marker | integer marker |
-| compiled-function | byte-code-function |
-| function | subr module-function compiled-function |
-| boolean | null |
-| subr | subr-native-elisp subr-primitive |
-| symbol-with-pos | keyword |
+| Type | Derived Types |
+|--------------------------+------------------------------------------------------------|
+| t | sequence atom |
+| sequence | list array |
+| atom | array function tree-sitter-compiled-query tree-sitter-node |
+| | tree-sitter-parser user-ptr font-object font-entity |
+| | font-spec condvar mutex thread terminal hash-table frame |
+| | buffer window process window-configuration overlay |
+| | number-or-marker symbol obarray native-comp-unit |
+| | cl-structure-object eieio-default-superclass |
+| number | float integer |
+| integer-or-marker | integer marker |
+| number-or-marker | integer-or-marker number |
+| integer | bignum fixnum |
+| symbol | keyword boolean symbol-with-pos |
+| array | vector bool-vector char-table string |
+| boolean | null |
+| list | null cons |
+| compiled-function | byte-code-function subr |
+| function | module-function compiled-function oclosure |
+| subr | subr-native-elisp subr-primitive |
+| oclosure | advice kmacro |
+| cl--class | oclosure--class cl-structure-class eieio--class |
+| cl-structure-object | cl--class xref-elisp-location frameset-register |
+| eieio-default-superclass | eieio-named transient-child |
+| transient-suffix | transient-infix |
+| transient-child | transient-suffix |
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))