all messages for Emacs-related lists mirrored at yhetil.org
 help / color / mirror / code / Atom feed
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



  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.