From: Alan Mackenzie <acm@muc.de>
To: emacs-devel@gnu.org
Subject: /* FIXME: Call signal_after_change! */ in callproc.c. Well, why not?
Date: Sat, 21 Dec 2019 17:23:24 +0000 [thread overview]
Message-ID: <20191221172324.GA8692@ACM> (raw)
Hello, Emacs.
I've just had a bug report on bug-cc-mode from "Sun, Wei"
<waysun@amazon.com> (Subject: bug#38691: CC Mode 5.34 (C++//lhw);
`Invalid search bound` when undo).
Essentially, this bug is reproduced by inserting a single line comment
(complete with CR) into an otherwise empty C++ Mode buffer:
// 2019-12-20 17:57
, then doing
C-x C-p (mark-page),
C-u M-| <CR> sort <CR> (shell-command-on-region), then
C-_ (undo).
This throws an error.
The cause of the error is that the C function call_process in
src/callproc.c is calling before-change-functions, but fails to call
after-change-functions. This is at callproc.c ~L790, where there is the
helpful comment:
/* FIXME: Call signal_after_change! */
(thanks, Stefan!).
Well, I've tried adding this call to signal_after_change thusly:
diff --git a/src/callproc.c b/src/callproc.c
index b51594c2d5..6d74b34068 100644
--- a/src/callproc.c
+++ b/src/callproc.c
@@ -785,9 +785,11 @@ call_process (ptrdiff_t nargs, Lisp_Object *args, int filefd,
{ /* We have to decode the input. */
Lisp_Object curbuf;
ptrdiff_t count1 = SPECPDL_INDEX ();
+ ptrdiff_t beg;
XSETBUFFER (curbuf, current_buffer);
/* FIXME: Call signal_after_change! */
+ beg = PT;
prepare_to_modify_buffer (PT, PT, NULL);
/* We cannot allow after-change-functions be run
during decoding, because that might modify the
@@ -798,6 +800,7 @@ call_process (ptrdiff_t nargs, Lisp_Object *args, int filefd,
decode_coding_c_string (&process_coding,
(unsigned char *) buf, nread, curbuf);
unbind_to (count1, Qnil);
+ signal_after_change (beg, 0, PT - beg);
if (display_on_the_fly
&& CODING_REQUIRE_DETECTION (&saved_coding)
&& ! CODING_REQUIRE_DETECTION (&process_coding))
, and this appears to solve the OP's problem.
However, a few lines further on, there's a del_range_2 call inside a condition
I don't understand (though might, with a great deal of study). I suspect that
the call to signal_after_change ought to take this del_range_2 into account,
possibly coming after it.
Would somebody who's familiar with this bit of callproc.c please help me out
here, and explain what this call to del_range_2 is doing, and whether there's
anything basically wrong with my simple-minded addition of
signal_after_change.
Thanks!
--
Alan Mackenzie (Nuremberg, Germany).
next reply other threads:[~2019-12-21 17:23 UTC|newest]
Thread overview: 17+ messages / expand[flat|nested] mbox.gz Atom feed top
2019-12-21 17:23 Alan Mackenzie [this message]
2019-12-21 18:11 ` /* FIXME: Call signal_after_change! */ in callproc.c. Well, why not? Eli Zaretskii
2019-12-21 21:47 ` Alan Mackenzie
2019-12-22 18:38 ` Eli Zaretskii
2019-12-24 9:47 ` Alan Mackenzie
2019-12-24 12:51 ` Alan Mackenzie
2019-12-24 15:58 ` Eli Zaretskii
2019-12-24 15:47 ` Eli Zaretskii
2019-12-29 13:34 ` Alan Mackenzie
2019-12-29 16:23 ` Stefan Monnier
2020-01-03 8:45 ` Eli Zaretskii
2020-01-04 22:47 ` Alan Mackenzie
2020-01-05 18:17 ` Eli Zaretskii
2020-01-05 18:48 ` Alan Mackenzie
2020-01-21 20:34 ` Alan Mackenzie
2020-01-22 3:27 ` Eli Zaretskii
2020-01-22 20:05 ` Alan Mackenzie
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=20191221172324.GA8692@ACM \
--to=acm@muc.de \
--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 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.