From: Andrea Corallo <acorallo@gnu.org>
To: Stefan Monnier <monnier@iro.umontreal.ca>
Cc: emacs-devel@gnu.org
Subject: Re: feature/type-hierarchy 8a63e50036f 1/5: * Define 'cl--type-hierarchy' and compute 'cl--typeof-types' from it
Date: Sun, 03 Mar 2024 13:05:27 -0500 [thread overview]
Message-ID: <yp1msrfyyvs.fsf@fencepost.gnu.org> (raw)
In-Reply-To: <jwvmsrfcjri.fsf-monnier+emacs@gnu.org> (Stefan Monnier's message of "Sun, 03 Mar 2024 12:31:22 -0500")
Stefan Monnier <monnier@iro.umontreal.ca> writes:
>> Looks to me better now, this is the content on my Emacs after having
>> pushed 8d11b7e4275, please have a look:
>
> looks OK, thanks (modulo structure/class because I don't know what these mean).
Cool, I'll comeback on the structure/class subject.
>> Also is not clear to me if 'cl--typeof-types' should include all types
>> or only leaf ones.
>
> The intention was to include only leaf types, i.e. the types that
> `type-of` can return, since the main purpose was to find the (ordered)
> list of parents in:
>
> (cl-generic-define-generalizer cl--generic-typeof-generalizer
> ;; FIXME: We could also change `type-of' to return `null' for nil.
> 10 (lambda (name &rest _) `(if ,name (type-of ,name) 'null))
> (lambda (tag &rest _)
> (and (symbolp tag) (assq tag cl--typeof-types))))
>
>> The original was inconsistent on this,
>
> Maybe that was an oversight.
> Do you remember which inconsistency you had noticed in this respect?
I remember (symbol-with-pos symbol atom) (symbol atom), there might have
been others.
>> this version evidently includes all types but should be easy to
>> generate only based on the leaf ones if necessary.
>
> Having extra types doesn't bring any benefit that I can see but is
> fairly harmless (it may just slow down ever so slightly a few method
> dispatches, when we have a miss in the method cache).
Mmmmh, I tried:
=======
--- a/lisp/emacs-lisp/cl-preloaded.el
+++ b/lisp/emacs-lisp/cl-preloaded.el
@@ -117,8 +117,12 @@ cl--supertypes-for-typeof-types
(cl--supertypes-for-typeof-types-rec type)
(merge-ordered-lists cl--supertypes-lanes-res)))
+(defun cl--type-leaf-p (type)
+ (null (assq type cl--type-hierarchy)))
+
(maphash (lambda (type _)
- (push (cl--supertypes-for-typeof-types type) cl--typeof-types))
+ (when (cl--type-leaf-p type)
+ (push (cl--supertypes-for-typeof-types type) cl--typeof-types)))
cl--direct-supertypes-of-type)
(defconst cl--all-builtin-types
======
This generates as 'cl--typeof-types':
((subr-primitive subr function atom)
(subr-native-elisp subr function atom)
(module-function function atom)
(byte-code-function compiled-function function atom)
(cons list sequence)
(null list sequence boolean symbol atom)
(string array sequence atom)
(char-table array sequence atom)
(bool-vector array sequence atom)
(vector array sequence atom)
(keyword symbol-with-pos symbol atom)
(fixnum integer number number-or-marker integer-or-marker atom)
(bignum integer number number-or-marker integer-or-marker atom)
(marker number-or-marker integer-or-marker atom)
(float number number-or-marker atom)
(obarray atom)
(overlay atom)
(window-configuration atom)
(process atom)
(window atom)
(buffer atom)
(frame atom)
(hash-table atom)
(terminal atom)
(thread atom)
(mutex atom)
(condvar atom)
(font-spec atom)
(font-entity atom)
(font-object atom)
(user-ptr atom)
(tree-sitter-parser atom)
(tree-sitter-node atom)
(tree-sitter-compiled-query atom)
(structure atom)
(class atom))
Which looks okay to me at a first glance, but make check explodes 🤷...
I might be doing something wrong.
Andrea
next prev parent reply other threads:[~2024-03-03 18:05 UTC|newest]
Thread overview: 19+ messages / expand[flat|nested] mbox.gz Atom feed top
[not found] <170801660982.26727.13226947668211497607@vcs2.savannah.gnu.org>
[not found] ` <20240215170330.82819C0F009@vcs2.savannah.gnu.org>
2024-03-01 16:49 ` feature/type-hierarchy 8a63e50036f 1/5: * Define 'cl--type-hierarchy' and compute 'cl--typeof-types' from it Stefan Monnier
2024-03-01 18:12 ` Andrea Corallo
2024-03-01 18:59 ` Stefan Monnier
2024-03-03 8:51 ` Andrea Corallo
2024-03-03 14:21 ` Stefan Monnier
2024-03-03 18:34 ` Andrea Corallo
2024-03-03 20:41 ` Stefan Monnier
2024-03-04 9:16 ` Andrea Corallo
2024-03-04 15:37 ` Stefan Monnier
2024-03-04 16:12 ` Andrea Corallo
2024-03-04 16:35 ` Stefan Monnier
2024-03-03 16:56 ` Andrea Corallo
2024-03-03 17:31 ` Stefan Monnier
2024-03-03 18:05 ` Andrea Corallo [this message]
2024-03-03 18:20 ` Stefan Monnier
2024-03-03 18:37 ` Andrea Corallo
2024-03-03 20:42 ` Stefan Monnier
2024-03-04 9:24 ` Andrea Corallo
2024-03-04 15:51 ` Stefan Monnier
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=yp1msrfyyvs.fsf@fencepost.gnu.org \
--to=acorallo@gnu.org \
--cc=emacs-devel@gnu.org \
--cc=monnier@iro.umontreal.ca \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
Code repositories for project(s) associated with this external index
https://git.savannah.gnu.org/cgit/emacs.git
https://git.savannah.gnu.org/cgit/emacs/org-mode.git
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.