GNU bug report logs -
#77725
31.0.50; Add support for types accepted by `cl-typep' to cl-generic?
Previous Next
Full log
View this message in rfc822 format
> (cl-defmethod cl-generic-generalizers :extra "derived-types" (type)
> "Support for dispatch on derived types, i.e. defined with `cl-deftype'."
> (if (and (symbolp type) (cl-derived-type-class-p (cl--find-class type))
> ;; Make sure this derived type can be used without arguments.
> (let ((expander (get type 'cl-deftype-handler)))
> (and expander (with-demoted-errors "%S" (funcall expander)))))
> (cl--derived-type-generalizers type)
> (cl-call-next-method)))
>
> Could now be simplified like this:
>
> (cl-defmethod cl-generic-generalizers :extra "derived-types" (type)
> "Support for dispatch on derived types, i.e. defined with `cl-deftype'."
> (if (and (symbolp type) (cl-derived-type-class-p (cl--find-class type))
> ;; Make sure this derived type can be used without arguments.
> (memq type cl--derived-type-list)) ;; <<<<<<<<<<<<<<<<<<<
> (cl--derived-type-generalizers type)
> (cl-call-next-method)))
Yes, or we could check (get type 'cl-deftype-satisfies), but I think
here if (funcall expander) signals an error we want the user to know,
because when (cl-derived-type-class-p (cl--find-class type)) is true, it
means *we* are the generalizer that should be in charge and an expander
error means there's an error elsewhere, most likely in TYPE itself.
That's also why I changed the `ignore-errors` to `with-demoted-errors`.
Actually, I think this expander test should be moved to
`cl--derived-type-generalizers` so we don't keep trying with
other generalizers.
Stefan
This bug report was last modified 10 days ago.
Previous Next
GNU bug tracking system
Copyright (C) 1999 Darren O. Benham,
1997,2003 nCipher Corporation Ltd,
1994-97 Ian Jackson.