mirror of
git://git.sv.gnu.org/emacs.git
synced 2026-02-08 08:43:52 -08:00
Fix calls to insert-*-hooks when JIT font lock is active
* src/insdel.c (signal_after_change): Save and restore interval_insert_behind_hooks and interval_insert_in_front_hooks across calls to various other hooks, to prevent their clobbering by those other hooks. (Bug#37455)
This commit is contained in:
parent
7156b0efc7
commit
2b80340bf3
3 changed files with 18 additions and 4 deletions
|
|
@ -1139,6 +1139,12 @@ extern struct buffer buffer_local_flags;
|
|||
that don't have such names. */
|
||||
|
||||
extern struct buffer buffer_local_symbols;
|
||||
|
||||
/* verify_interval_modification saves insertion hooks here
|
||||
to be run later by report_interval_modification. */
|
||||
extern Lisp_Object interval_insert_behind_hooks;
|
||||
extern Lisp_Object interval_insert_in_front_hooks;
|
||||
|
||||
|
||||
extern void delete_all_overlays (struct buffer *);
|
||||
extern void reset_buffer (struct buffer *);
|
||||
|
|
|
|||
11
src/insdel.c
11
src/insdel.c
|
|
@ -2201,7 +2201,7 @@ signal_after_change (ptrdiff_t charpos, ptrdiff_t lendel, ptrdiff_t lenins)
|
|||
{
|
||||
ptrdiff_t count = SPECPDL_INDEX ();
|
||||
struct rvoe_arg rvoe_arg;
|
||||
Lisp_Object tmp;
|
||||
Lisp_Object tmp, save_insert_behind_hooks, save_insert_in_from_hooks;
|
||||
|
||||
if (inhibit_modification_hooks)
|
||||
return;
|
||||
|
|
@ -2237,6 +2237,12 @@ signal_after_change (ptrdiff_t charpos, ptrdiff_t lendel, ptrdiff_t lenins)
|
|||
return;
|
||||
}
|
||||
|
||||
/* Save and restore the insert-*-hooks, because other hooks like
|
||||
after-change-functions, called below, could clobber them if they
|
||||
manipulate text properties. */
|
||||
save_insert_behind_hooks = interval_insert_behind_hooks;
|
||||
save_insert_in_from_hooks = interval_insert_in_front_hooks;
|
||||
|
||||
if (!NILP (combine_after_change_list))
|
||||
Fcombine_after_change_execute ();
|
||||
|
||||
|
|
@ -2259,6 +2265,9 @@ signal_after_change (ptrdiff_t charpos, ptrdiff_t lendel, ptrdiff_t lenins)
|
|||
rvoe_arg.errorp = 0;
|
||||
}
|
||||
|
||||
interval_insert_behind_hooks = save_insert_behind_hooks;
|
||||
interval_insert_in_front_hooks = save_insert_in_from_hooks;
|
||||
|
||||
if (buffer_has_overlays ())
|
||||
report_overlay_modification (make_fixnum (charpos),
|
||||
make_fixnum (charpos + lenins),
|
||||
|
|
|
|||
|
|
@ -58,9 +58,8 @@ enum property_set_type
|
|||
|
||||
/* verify_interval_modification saves insertion hooks here
|
||||
to be run later by report_interval_modification. */
|
||||
static Lisp_Object interval_insert_behind_hooks;
|
||||
static Lisp_Object interval_insert_in_front_hooks;
|
||||
|
||||
Lisp_Object interval_insert_behind_hooks;
|
||||
Lisp_Object interval_insert_in_front_hooks;
|
||||
|
||||
/* Signal a `text-read-only' error. This function makes it easier
|
||||
to capture that error in GDB by putting a breakpoint on it. */
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue