* How to debug erratic specializer behavior of generic functions
@ 2022-02-20 23:36 Michael Heerdegen
2022-02-20 23:56 ` Stefan Monnier via Users list for the GNU Emacs text editor
2022-02-20 23:58 ` Lars Ingebrigtsen
0 siblings, 2 replies; 5+ messages in thread
From: Michael Heerdegen @ 2022-02-20 23:36 UTC (permalink / raw
To: Emacs mailing list
Hello,
I extended register.el with new register content types. This involves a
lot of method definitions like
(cl-defmethod register-val-jump-to ((val TYPE) arg))
where TYPE refers to some of my self defined container types for
register contents.
My problem: the dispatching of these methods is often erratically
broken. The methods then are not used although their type matches. The
according test for VAL being of the TYPE, e.g. by using the according
type predicate, succeeds.
This happens randomly. Sometimes it's broken from the beginning of a
session, sometimes not, sometimes it breaks later while working. When
it happens, sometimes not all types are affected. Sometimes reloading
my init file fixes the problem, sometimes not. I don't see a clear
pattern.
Any hints for where to dig, how to debug, or what could be involved? So
far I have nothing for emacs -Q, no recipe, that demonstrates the
behavior (that's why I chose to ask here first before starting a bug
report).
TIA,
Michael.
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: How to debug erratic specializer behavior of generic functions
2022-02-20 23:36 How to debug erratic specializer behavior of generic functions Michael Heerdegen
@ 2022-02-20 23:56 ` Stefan Monnier via Users list for the GNU Emacs text editor
2022-02-20 23:58 ` Lars Ingebrigtsen
1 sibling, 0 replies; 5+ messages in thread
From: Stefan Monnier via Users list for the GNU Emacs text editor @ 2022-02-20 23:56 UTC (permalink / raw
To: help-gnu-emacs
> Any hints for where to dig, how to debug, or what could be involved? So
> far I have nothing for emacs -Q, no recipe, that demonstrates the
> behavior (that's why I chose to ask here first before starting a bug
> report).
If you're seeing this with Emacs's code on `master`, then please report
it as a bug. If you're seeing it with Emacs < 29, then
I suggest you try the patch below.
Stefan
diff --git a/lisp/emacs-lisp/cl-generic.el b/lisp/emacs-lisp/cl-generic.el
index 983694204df..5090e060372 100644
--- a/lisp/emacs-lisp/cl-generic.el
+++ b/lisp/emacs-lisp/cl-generic.el
@@ -604,7 +604,9 @@ cl--generic-dispatchers
(defun cl--generic-get-dispatcher (dispatch)
(with-memoization
- (gethash dispatch cl--generic-dispatchers)
+ ;; We need `copy-sequence` here because this `dispatch' object might be
+ ;; modified by side-effect in `cl-generic-define-method' (bug#46722).
+ (gethash (copy-sequence dispatch) cl--generic-dispatchers)
;; (message "cl--generic-get-dispatcher (%S)" dispatch)
(let* ((dispatch-arg (car dispatch))
(generalizers (cdr dispatch))
^ permalink raw reply related [flat|nested] 5+ messages in thread
* Re: How to debug erratic specializer behavior of generic functions
2022-02-20 23:36 How to debug erratic specializer behavior of generic functions Michael Heerdegen
2022-02-20 23:56 ` Stefan Monnier via Users list for the GNU Emacs text editor
@ 2022-02-20 23:58 ` Lars Ingebrigtsen
2022-02-21 0:05 ` Michael Heerdegen
1 sibling, 1 reply; 5+ messages in thread
From: Lars Ingebrigtsen @ 2022-02-20 23:58 UTC (permalink / raw
To: Michael Heerdegen; +Cc: Emacs mailing list
Michael Heerdegen <michael_heerdegen@web.de> writes:
> This happens randomly. Sometimes it's broken from the beginning of a
> session, sometimes not, sometimes it breaks later while working. When
> it happens, sometimes not all types are affected. Sometimes reloading
> my init file fixes the problem, sometimes not. I don't see a clear
> pattern.
Is this on the trunk? I saw some pretty weird stuff in this area the
other day, but I couldn't make heads or tails of it either. But I'm
pretty sure that in at least one case, the type I was getting in the
defmethod was a symbol-with-position, but I didn't manage to pin it
down.
--
(domestic pets only, the antidote for overdose, milk.)
bloggy blog: http://lars.ingebrigtsen.no
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: How to debug erratic specializer behavior of generic functions
2022-02-20 23:58 ` Lars Ingebrigtsen
@ 2022-02-21 0:05 ` Michael Heerdegen
2022-02-21 0:50 ` Michael Heerdegen
0 siblings, 1 reply; 5+ messages in thread
From: Michael Heerdegen @ 2022-02-21 0:05 UTC (permalink / raw
To: help-gnu-emacs
Hello Stefan and Lars,
yes, this is on trunk.
Lars wrote:
> I saw some pretty weird stuff in this area the other day, but I
> couldn't make heads or tails of it either. But I'm pretty sure that
> in at least one case, the type I was getting in the defmethod was a
> symbol-with-position, but I didn't manage to pin it down.
Hmmm - I also wondered whether the symbol-with-position change could be
related. Ok, let's try a bug report.
Thanks,
Michael.
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: How to debug erratic specializer behavior of generic functions
2022-02-21 0:05 ` Michael Heerdegen
@ 2022-02-21 0:50 ` Michael Heerdegen
0 siblings, 0 replies; 5+ messages in thread
From: Michael Heerdegen @ 2022-02-21 0:50 UTC (permalink / raw
To: help-gnu-emacs
Michael Heerdegen <michael_heerdegen@web.de> writes:
> Hmmm - I also wondered whether the symbol-with-position change could be
> related. Ok, let's try a bug report.
Bug#54079, for the record.
Michael.
^ permalink raw reply [flat|nested] 5+ messages in thread
end of thread, other threads:[~2022-02-21 0:50 UTC | newest]
Thread overview: 5+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2022-02-20 23:36 How to debug erratic specializer behavior of generic functions Michael Heerdegen
2022-02-20 23:56 ` Stefan Monnier via Users list for the GNU Emacs text editor
2022-02-20 23:58 ` Lars Ingebrigtsen
2022-02-21 0:05 ` Michael Heerdegen
2022-02-21 0:50 ` Michael Heerdegen
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.