diff options
| author | Noam Postavsky | 2016-07-20 20:15:14 -0400 |
|---|---|---|
| committer | Noam Postavsky | 2016-07-22 23:55:23 -0400 |
| commit | 66f95e0dabf750e9d2eff59b2bb6e593618cd48a (patch) | |
| tree | a8cd27828bfef2459b70e446cdf1de346327fc3e /src/lisp.h | |
| parent | 52cf0d5d98c51c3591ca5d376fd4e85cd9b72d7f (diff) | |
| download | emacs-66f95e0dabf750e9d2eff59b2bb6e593618cd48a.tar.gz emacs-66f95e0dabf750e9d2eff59b2bb6e593618cd48a.zip | |
Adjust match data before calling after-change-funs
It's important to adjust the match data in between calling
before-change-functions and after-change-functions, so that buffer
change hooks will always see match-data consistent with buffer content.
(Bug #23917)
* src/insdel.c (replace_range): Add new parameter ADJUST_MATCH_DATA, if
true call update_search_regs. Update all callers (except
Freplace_match) to pass 0 for the new parameter.
* src/search.c (update_search_regs): New function, extracted from
Freplace_match.
(Freplace_match): Remove match data adjustment code, pass 1 for
ADJUST_MATCH_DATA to replace_range instead.
Diffstat (limited to 'src/lisp.h')
| -rw-r--r-- | src/lisp.h | 4 |
1 files changed, 3 insertions, 1 deletions
diff --git a/src/lisp.h b/src/lisp.h index 6a98adbda9c..25f811e06ef 100644 --- a/src/lisp.h +++ b/src/lisp.h | |||
| @@ -3516,7 +3516,7 @@ extern void adjust_after_insert (ptrdiff_t, ptrdiff_t, ptrdiff_t, | |||
| 3516 | ptrdiff_t, ptrdiff_t); | 3516 | ptrdiff_t, ptrdiff_t); |
| 3517 | extern void adjust_markers_for_delete (ptrdiff_t, ptrdiff_t, | 3517 | extern void adjust_markers_for_delete (ptrdiff_t, ptrdiff_t, |
| 3518 | ptrdiff_t, ptrdiff_t); | 3518 | ptrdiff_t, ptrdiff_t); |
| 3519 | extern void replace_range (ptrdiff_t, ptrdiff_t, Lisp_Object, bool, bool, bool); | 3519 | extern void replace_range (ptrdiff_t, ptrdiff_t, Lisp_Object, bool, bool, bool, bool); |
| 3520 | extern void replace_range_2 (ptrdiff_t, ptrdiff_t, ptrdiff_t, ptrdiff_t, | 3520 | extern void replace_range_2 (ptrdiff_t, ptrdiff_t, ptrdiff_t, ptrdiff_t, |
| 3521 | const char *, ptrdiff_t, ptrdiff_t, bool); | 3521 | const char *, ptrdiff_t, ptrdiff_t, bool); |
| 3522 | extern void syms_of_insdel (void); | 3522 | extern void syms_of_insdel (void); |
| @@ -3994,6 +3994,8 @@ extern Lisp_Object make_temp_name (Lisp_Object, bool); | |||
| 3994 | /* Defined in search.c. */ | 3994 | /* Defined in search.c. */ |
| 3995 | extern void shrink_regexp_cache (void); | 3995 | extern void shrink_regexp_cache (void); |
| 3996 | extern void restore_search_regs (void); | 3996 | extern void restore_search_regs (void); |
| 3997 | extern void update_search_regs (ptrdiff_t oldstart, | ||
| 3998 | ptrdiff_t oldend, ptrdiff_t newend); | ||
| 3997 | extern void record_unwind_save_match_data (void); | 3999 | extern void record_unwind_save_match_data (void); |
| 3998 | struct re_registers; | 4000 | struct re_registers; |
| 3999 | extern struct re_pattern_buffer *compile_pattern (Lisp_Object, | 4001 | extern struct re_pattern_buffer *compile_pattern (Lisp_Object, |