diff options
| author | Eli Zaretskii | 2013-11-18 18:29:49 +0200 |
|---|---|---|
| committer | Eli Zaretskii | 2013-11-18 18:29:49 +0200 |
| commit | 37c790b38599cc80a16c6a76152abbf8160fe2a1 (patch) | |
| tree | a2f40d0acba8cdcf5c6502f4c07093f138772887 /src/coding.c | |
| parent | f2cbfd4442bf194bd277101357a86f96707ec36c (diff) | |
| download | emacs-37c790b38599cc80a16c6a76152abbf8160fe2a1.tar.gz emacs-37c790b38599cc80a16c6a76152abbf8160fe2a1.zip | |
Fix bug #15841 with assertion violations due to newline cache.
src/insdel.c (invalidate_buffer_caches): New function, consolidated
from part of prepare_to_modify_buffer.
(insert_from_gap, prepare_to_modify_buffer):
src/coding.c (code_convert_region, code_convert_string): Call
invalidate_buffer_caches.
src/lisp.h (invalidate_buffer_caches): Add prototype.
Diffstat (limited to 'src/coding.c')
| -rw-r--r-- | src/coding.c | 17 |
1 files changed, 17 insertions, 0 deletions
diff --git a/src/coding.c b/src/coding.c index ac828a48683..6c0633f2d93 100644 --- a/src/coding.c +++ b/src/coding.c | |||
| @@ -9358,6 +9358,14 @@ code_convert_region (Lisp_Object start, Lisp_Object end, | |||
| 9358 | setup_coding_system (coding_system, &coding); | 9358 | setup_coding_system (coding_system, &coding); |
| 9359 | coding.mode |= CODING_MODE_LAST_BLOCK; | 9359 | coding.mode |= CODING_MODE_LAST_BLOCK; |
| 9360 | 9360 | ||
| 9361 | if (BUFFERP (dst_object) && !EQ (dst_object, src_object)) | ||
| 9362 | { | ||
| 9363 | struct buffer *buf = XBUFFER (dst_object); | ||
| 9364 | ptrdiff_t buf_pt = BUF_PT (buf); | ||
| 9365 | |||
| 9366 | invalidate_buffer_caches (buf, buf_pt, buf_pt); | ||
| 9367 | } | ||
| 9368 | |||
| 9361 | if (encodep) | 9369 | if (encodep) |
| 9362 | encode_coding_object (&coding, src_object, from, from_byte, to, to_byte, | 9370 | encode_coding_object (&coding, src_object, from, from_byte, to, to_byte, |
| 9363 | dst_object); | 9371 | dst_object); |
| @@ -9447,6 +9455,15 @@ code_convert_string (Lisp_Object string, Lisp_Object coding_system, | |||
| 9447 | coding.mode |= CODING_MODE_LAST_BLOCK; | 9455 | coding.mode |= CODING_MODE_LAST_BLOCK; |
| 9448 | chars = SCHARS (string); | 9456 | chars = SCHARS (string); |
| 9449 | bytes = SBYTES (string); | 9457 | bytes = SBYTES (string); |
| 9458 | |||
| 9459 | if (BUFFERP (dst_object)) | ||
| 9460 | { | ||
| 9461 | struct buffer *buf = XBUFFER (dst_object); | ||
| 9462 | ptrdiff_t buf_pt = BUF_PT (buf); | ||
| 9463 | |||
| 9464 | invalidate_buffer_caches (buf, buf_pt, buf_pt); | ||
| 9465 | } | ||
| 9466 | |||
| 9450 | if (encodep) | 9467 | if (encodep) |
| 9451 | encode_coding_object (&coding, string, 0, 0, chars, bytes, dst_object); | 9468 | encode_coding_object (&coding, string, 0, 0, chars, bytes, dst_object); |
| 9452 | else | 9469 | else |