Subject: bug#77924: 31.0.50; [Feature branch] Change marker implementation

From: Eli Zaretskii <[email-masked]>
Date: Fri, 25 Apr 2025 13:34:46 +0300

> From: Gerd Möllmann <[email-masked]>
> Date: Fri, 25 Apr 2025 09:51:05 +0200
> Cc: [email-masked], [email-masked], [email-masked],
>  [email-masked]
> 
> 
> Sent from my iPhone
> 
> > On 25. Apr 2025, at 09:45, Eli Zaretskii <[email-masked]> wrote:
> > 
> > 
> >> 
> >> From: Gerd Möllmann <[email-masked]>
> >> Date: Fri, 25 Apr 2025 09:20:55 +0200
> >> Cc: [email-masked], [email-masked], [email-masked],
> >> [email-masked]
> >> 
> >> 
> >>>> On 25. Apr 2025, at 09:01, Eli Zaretskii <[email-masked]> wrote:
> >>> 
> >>> 
> >>>> 
> >>>> From: Gerd Möllmann <[email-masked]>
> >>>> Cc: Eli Zaretskii <[email-masked]>,  [email-masked],
> >>>> [email-masked],  [email-masked]
> >>>> Date: Thu, 24 Apr 2025 21:53:05 +0200
> >>>> 
> >>>> Pip Cet <[email-masked]> writes:
> >>>> 
> >>>>> I think what we should do is mimic FOR_EACH_TAIL, and use
> >>>>> FOR_EACH_MARKER like this:
> >>>>> 
> >>>>> struct Lisp_Marker *m;
> >>>>> FOR_EACH_MARKER (b, m)
> >>>>> {
> >>>>>   /* do something with m */
> >>>>> }
> >>>> 
> >>>> We need an if somewhere for the MARKERP, don't we?
> >>> 
> >>> Why is that needed, btw?  Can't we change the representation and/or
> >>> the functions involved to avoid the need for such a test?
> >> 
> >> When markers are freed their entry in the market vector no longer contains a marker reference.
> > 
> > I understand, but why does this need to be tested inside the loop?
> > Can't the loop itself know how many markers are in the vector, and
> > stop when they are exhausted?
> 
> You are thinking of compacting the vector when a marker is freed? Then we would lose the O(1) deletion. As it is the entry is simply pushed on a free list. 

Actually, I thought about maintaining the number of markers in the
vector, so there would be no need to detect that by the MARKERP test.