GNU bug report logs - #77725
31.0.50; Add support for types accepted by `cl-typep' to cl-generic?

Previous Next

Package: emacs;

Reported by: David Ponce <da_vid <at> orange.fr>

Date: Fri, 11 Apr 2025 07:16:01 UTC

Severity: normal

Found in version 31.0.50

Full log


Message #212 received at 77725 <at> debbugs.gnu.org (full text, mbox):

From: Stefan Monnier <monnier <at> iro.umontreal.ca>
To: David Ponce <da_vid <at> orange.fr>
Cc: 77725 <at> debbugs.gnu.org, Eli Zaretskii <eliz <at> gnu.org>
Subject: Re: bug#77725: 31.0.50; Add support for types accepted by
 `cl-typep' to cl-generic?
Date: Thu, 08 May 2025 10:56:16 -0400
>   (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.