From: Alan Mackenzie <acm@muc.de>
To: Eli Zaretskii <eliz@gnu.org>
Cc: emacs-devel@gnu.org
Subject: Re: Edebug corrupting point in buffers; we need buffer-point and set-buffer-point, perhaps.
Date: Mon, 31 Oct 2022 15:46:07 +0000 [thread overview]
Message-ID: <Y1/tv1w7o/ugosdK@ACM> (raw)
In-Reply-To: <83pme8dp2r.fsf@gnu.org>
Hello, Eli.
On Mon, Oct 31, 2022 at 16:50:52 +0200, Eli Zaretskii wrote:
> > Date: Mon, 31 Oct 2022 14:32:12 +0000
> > Cc: emacs-devel@gnu.org
> > From: Alan Mackenzie <acm@muc.de>
> > Anyhow, I proposed buffer-point and set-buffer-point. They would be a
> > lot faster than set-buffer followed by point and goto-char. Here is my
> > first version of these. What do you think?
> I'm not sure performance in a debugger is a reason good enough to add
> 2 more primitives. The fact that we didn't need them until now should
> tell us something, no?
Well, I timed it. With 207 buffers, creating an alist of (buffer .
buffere-point) with my new function was 17 times as fast as using
with-current-buffer and point. Restoring the buffer-points was 8 times
as fast with my new function. It's probably moot, though, since the
"slow" restoration only took 0.00137 seconds for all 207 buffers.
But on the other hand, these two functions feel like they ought to exist.
They could save a lot of clumsy programming with swapping the buffer,
just to get or set point.
> Stefan, Lars, WDYT?
> Anyway, a couple of minor comments:
> > +DEFUN ("buffer-point", Fbuffer_point, Sbuffer_point, 1, 1, 0,
> > + doc: /* Return the buffer point of BUFFER-OR-NAME.
> > +The argument may be a buffer or the name of an existing buffer. */)
> > + (Lisp_Object buffer_or_name)
> Why not an optional argument to 'point'? And why in buffer.c and not
> in editfns.c?
I'm not sure what you mean by an optional argument, here.
buffer.c was the first file that sprang to mind. It could easily be
somewhere else, though.
> > + return (make_fixnum (b->pt));
> Please never-ever use b->pt etc. directly. We have BUF_PT and other
> macros for that, and for a good reason.
BUF_PT and friends work specifically on current_buffer. The whole idea
of the new functions is to avoid having to switch buffers.
> > + CHECK_FIXNUM_COERCE_MARKER (pos);
> > + p = XFIXNUM (pos);
> This is sub-optimal: a marker holds both character and byte position,
> and you lose it here. Ignoring the byte position is only justified if
> the marker belongs to the wrong buffer.
And I need to check the marker's in the correct buffer, too. But thanks
for the tip!
> > + if (p < b->begv) p = b->begv;
> > + if (p > b->zv) p = b->zv;
> We have clip_to_bounds. And again, always use BUF_BEGV and BUF_ZV,
> not literal references to members of struct buffer.
I knew there was some sort of function, but couldn't think of the name,
and couldn't find a way to search for it. ;-(
> > + SET_PT (p);
> We have SET_BUF_PT_BOTH.
OK. That SET_PT was a mistake; it sets point in the current buffer, not
the buffer that was the argument. But I take the point (no pun
intended). If we've already got point_byte, there's no point calculating
it all over again.
Thanks!
--
Alan Mackenzie (Nuremberg, Germany).
next prev parent reply other threads:[~2022-10-31 15:46 UTC|newest]
Thread overview: 62+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-10-31 11:43 Edebug corrupting point in buffers; we need buffer-point and set-buffer-point, perhaps Alan Mackenzie
2022-10-31 13:16 ` Eli Zaretskii
2022-10-31 14:32 ` Alan Mackenzie
2022-10-31 14:50 ` Eli Zaretskii
2022-10-31 15:46 ` Alan Mackenzie [this message]
2022-10-31 17:33 ` Stefan Monnier
2022-10-31 17:55 ` Eli Zaretskii
2022-10-31 20:46 ` Alan Mackenzie
2022-11-01 6:21 ` Eli Zaretskii
2022-10-31 17:19 ` Stefan Monnier
2022-10-31 18:09 ` Eli Zaretskii
2022-10-31 20:35 ` Stefan Monnier
2022-10-31 17:21 ` Stefan Monnier
2022-10-31 18:10 ` Eli Zaretskii
2022-10-31 23:14 ` Stefan Monnier
2022-11-01 7:06 ` Eli Zaretskii
2022-10-31 21:25 ` Alan Mackenzie
2022-11-01 6:45 ` Eli Zaretskii
2022-11-01 11:41 ` Edebug corrupting point in buffers Alan Mackenzie
2022-11-01 11:53 ` Eli Zaretskii
2022-11-01 13:42 ` Alan Mackenzie
2022-11-01 14:42 ` Eli Zaretskii
2022-11-01 17:06 ` Alan Mackenzie
2022-11-01 17:12 ` Eli Zaretskii
2022-11-01 17:24 ` Alan Mackenzie
2022-11-01 17:57 ` Eli Zaretskii
2022-11-01 19:02 ` Alan Mackenzie
2022-11-01 19:47 ` Stefan Monnier
2022-11-01 20:53 ` Alan Mackenzie
2022-11-01 21:51 ` Stefan Monnier
2022-11-02 10:40 ` Alan Mackenzie
2022-11-02 13:12 ` Stefan Monnier
2022-11-02 13:28 ` Eli Zaretskii
2022-11-02 3:28 ` Eli Zaretskii
2022-11-02 12:53 ` Stefan Monnier
2022-11-02 17:40 ` Juri Linkov
2022-11-02 18:26 ` Eli Zaretskii
2022-11-02 18:36 ` Juri Linkov
2022-11-02 18:52 ` Eli Zaretskii
2022-11-03 17:25 ` Juri Linkov
2022-11-03 18:06 ` Eli Zaretskii
2022-11-03 18:31 ` Juri Linkov
2022-11-02 11:34 ` Alan Mackenzie
2022-11-02 14:00 ` Eli Zaretskii
2022-11-02 16:18 ` Alan Mackenzie
2022-11-02 16:57 ` Eli Zaretskii
2022-11-03 11:32 ` Alan Mackenzie
2022-11-03 13:29 ` Eli Zaretskii
2022-11-03 18:07 ` Alan Mackenzie
2022-11-03 18:15 ` Eli Zaretskii
2022-11-03 20:25 ` Alan Mackenzie
2022-11-05 11:24 ` Eli Zaretskii
2022-11-05 16:50 ` Alan Mackenzie
2022-11-06 8:10 ` Eli Zaretskii
2022-11-06 14:40 ` Alan Mackenzie
2022-11-03 19:29 ` Stefan Monnier
2022-11-03 19:36 ` Eli Zaretskii
2022-11-03 20:39 ` Stefan Monnier
2022-11-04 6:34 ` Eli Zaretskii
2022-11-04 6:37 ` Eli Zaretskii
2022-11-03 19:57 ` Alan Mackenzie
2022-11-03 20:35 ` 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
List information: https://www.gnu.org/software/emacs/
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=Y1/tv1w7o/ugosdK@ACM \
--to=acm@muc.de \
--cc=eliz@gnu.org \
--cc=emacs-devel@gnu.org \
/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 public inbox
https://git.savannah.gnu.org/cgit/emacs.git
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).