1
Fork 0
mirror of git://git.sv.gnu.org/emacs.git synced 2025-12-06 22:41:06 -08:00

cl-types: The big renaming to "derived types"

`cl-defstruct` also defines a type and is also in CL, so
"cl-type" is not precise enough to talk about those types
defined with `cl-deftype`.  Use the term "derived type" to be
more clear, as is done in the HyperSpec.

* doc/misc/cl.texi (Derived types): Move `cl-deftype` to this
new subsection.  Document the use of derived types as method specializers.

* lisp/emacs-lisp/cl-extra.el (cl--types-of-memo): Rename from
`cl--type-unique`.
(cl--derived-type-dispatch-list): Rename from `cl--type-dispatch-list`.
(cl--derived-type-generalizer): Rename from `cl--type-generalizer`.
(cl--derived-type-generalizers): Rename from `cl--type-generalizers`.

* lisp/emacs-lisp/cl-lib.el (cl-generic-generalizers) <derived-types>:
Rename from <cl-types-of>.  Catch but don't hide errors when a derived
type cannot be used as an atomic type specifier.

* lisp/emacs-lisp/cl-preloaded.el (cl--derived-type-list): Rename from
`cl--type-list`.
(cl-derived-type-class): Rename from `cl-type-class`.
(cl--derived-type-class-make): Rename from `cl--type-class-make`.
(cl--define-derived-type): Rename from `cl--type-deftype`.
This commit is contained in:
Stefan Monnier 2025-05-07 13:24:07 -04:00
parent f6f35644b7
commit b13044dae3
5 changed files with 73 additions and 49 deletions

View file

@ -3785,7 +3785,7 @@ macro that returns its `&whole' argument."
;;;###autoload
(defmacro cl-deftype (name arglist &rest body)
"Define NAME as a new data type.
"Define NAME as a new, so-called derived type.
The type NAME can then be used in `cl-typecase', `cl-check-type',
etc., and to some extent, as method specializer.
@ -3816,20 +3816,15 @@ If PARENTS is non-nil, ARGLIST must be nil."
(cl-callf (lambda (x) (delq declares x)) decls)))
(and parents arglist
(error "Parents specified, but arglist not empty"))
`(eval-and-compile ;;cl-eval-when (compile load eval)
;; FIXME: Where should `cl--type-deftype' go? Currently, code
;; using `cl-deftype' can use (eval-when-compile (require
;; 'cl-lib)), so `cl--type-deftype' needs to go either to
;; `cl-preloaded.el' or it should be autoloaded even when
;; `cl-lib' is not loaded.
(cl--type-deftype ',name ',parents ',arglist ,docstring)
`(eval-and-compile
(cl--define-derived-type ',name ',parents ',arglist ,docstring)
(define-symbol-prop ',name 'cl-deftype-handler
(cl-function
(lambda (&cl-defs ('*) ,@arglist)
,@decls
,@forms))))))
(static-if (not (fboundp 'cl--type-deftype))
(static-if (not (fboundp 'cl--define-derived-type))
nil ;; Can't define it yet!
(cl-deftype extended-char () '(and character (not base-char))))