]> git.eshelyaron.com Git - emacs.git/commit
Simplify type hierarchy operations
authorStefan Monnier <monnier@iro.umontreal.ca>
Fri, 8 Mar 2024 06:48:59 +0000 (01:48 -0500)
committerEshel Yaron <me@eshelyaron.com>
Mon, 11 Mar 2024 09:17:13 +0000 (10:17 +0100)
commit2e9532cf3304ba6fb2767d2a6743e3668e67b7af
tree718e103ac0e4f3d1e6f7f851c8265ca7177268d0
parentfe63c3481e8ab6d2e98c328ff308d8a3328ebd8e
Simplify type hierarchy operations

Now that built-in types have classes that describe their
relationships exactly like struct/eieio/oclosure classes,
we can the code that navigates that DAG.

* lisp/emacs-lisp/cl-generic.el (cl--generic-struct-tag): Move to
`eieio-core.el`.
(cl--generic-type-specializers): Rename from
`cl--generic-struct-specializers`.  Make it work for any class.
(cl--generic-typeof-generalizer, cl--generic-oclosure-generalizer): Use it.
(cl--generic-struct-generalizer): Delete generalizer.
(cl-generic-generalizers :extra "cl-struct"): Delete method.
(prefill 0 cl--generic-generalizer): Move to after the typeof.
(cl-generic-generalizers :extra "typeof"): Rewrite to use
classes rather than `cl--all-builtin-types`.
(cl-generic--oclosure-specializers): Delete function.

* lisp/emacs-lisp/cl-preloaded.el (cl--direct-supertypes-of-type)
(cl--typeof-types, cl--all-builtin-types): Delete constants.

* lisp/emacs-lisp/comp-cstr.el (comp--typeof-builtin-types):
Delete constant.
(comp--cl-class-hierarchy): Simplify.
(comp--compute-typeof-types): Simplify now that
`comp--cl-class-hierarchy` and `comp--all-classes` work for built-in
types as well.
(comp--direct-supertypes): Just use `cl--class-parents`.
(comp-supertypes): Simplify since typeof-types should now be complete.

* lisp/emacs-lisp/eieio-core.el (eieio-defclass-autoload):
Use `superclasses` argument, so we can find parents before it's loaded.
(eieio--class-precedence-c3, eieio--class-precedence-dfs):
Don't add a `eieio-default-superclass` parent any more.
(eieio--class/struct-parents): Delete function.
(eieio--class-precedence-bfs): Use `eieio--class-parents` instead.
Don't stop when reaching `eieio-default-superclass`.
(cl--generic-struct-tag): Move from `cl-generic.el`.

(cherry picked from commit bd017175d4571e24ef1fdf84676136af1d36002d)
lisp/emacs-lisp/cl-generic.el
lisp/emacs-lisp/cl-preloaded.el
lisp/emacs-lisp/comp-cstr.el
lisp/emacs-lisp/eieio-core.el