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.
This commit is contained in:
parent
1a35eb86b8
commit
418ad866bf
4 changed files with 46 additions and 26 deletions
|
@ -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))
|
||||
|
|
Binary file not shown.
Before Width: | Height: | Size: 218 KiB After Width: | Height: | Size: 232 KiB |
|
@ -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 |
|
||||
|
|
|
@ -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))
|
||||
|
|
Loading…
Add table
Reference in a new issue