aboutsummaryrefslogtreecommitdiffstats
path: root/src/intervals.c
diff options
context:
space:
mode:
authorStefan Monnier2019-05-07 13:41:54 -0400
committerStefan Monnier2019-05-07 13:41:54 -0400
commit32cf07819ae8cfdbf14e00f351c7f520fff325c3 (patch)
tree029f5e0b51aa8052bba25d79bb9fba9fb42ecee6 /src/intervals.c
parent81d83cf6357c73ac5e8de8aeac9760ab00f5af0a (diff)
downloademacs-32cf07819ae8cfdbf14e00f351c7f520fff325c3.tar.gz
emacs-32cf07819ae8cfdbf14e00f351c7f520fff325c3.zip
* src/marker.c (buf_bytepos_to_charpos): Re-add the CHAR_HEAD_P assertion
This assertion was removed in 1c349c62305d432abf0fa2b6e3f5d754fe4cab79 because the assumption was invalid during set_intervals_multibyte_1. So we change set_intervals_multibyte_1 to solve the problem in the same way as in the rest of Fset_buffer_multibyte, which actually simplifies the code. * src/buffer.c (advance_to_char_boundary): Not static any more. * src/buffer.h (advance_to_char_boundary): Add prototype. * src/intervals.c (set_intervals_multibyte_1): Use it.
Diffstat (limited to 'src/intervals.c')
-rw-r--r--src/intervals.c36
1 files changed, 6 insertions, 30 deletions
diff --git a/src/intervals.c b/src/intervals.c
index 8f39c45762f..34829ab050d 100644
--- a/src/intervals.c
+++ b/src/intervals.c
@@ -2335,22 +2335,10 @@ set_intervals_multibyte_1 (INTERVAL i, bool multi_flag,
2335 if (multi_flag) 2335 if (multi_flag)
2336 { 2336 {
2337 ptrdiff_t temp; 2337 ptrdiff_t temp;
2338 left_end_byte = start_byte + LEFT_TOTAL_LENGTH (i); 2338 left_end_byte
2339 = advance_to_char_boundary (start_byte + LEFT_TOTAL_LENGTH (i));
2339 left_end = BYTE_TO_CHAR (left_end_byte); 2340 left_end = BYTE_TO_CHAR (left_end_byte);
2340 2341 eassert (CHAR_TO_BYTE (left_end) == left_end_byte);
2341 temp = CHAR_TO_BYTE (left_end);
2342
2343 /* If LEFT_END_BYTE is in the middle of a character,
2344 adjust it and LEFT_END to a char boundary. */
2345 if (left_end_byte > temp)
2346 {
2347 left_end_byte = temp;
2348 }
2349 if (left_end_byte < temp)
2350 {
2351 left_end--;
2352 left_end_byte = CHAR_TO_BYTE (left_end);
2353 }
2354 } 2342 }
2355 else 2343 else
2356 { 2344 {
@@ -2369,22 +2357,10 @@ set_intervals_multibyte_1 (INTERVAL i, bool multi_flag,
2369 { 2357 {
2370 ptrdiff_t temp; 2358 ptrdiff_t temp;
2371 2359
2372 right_start_byte = end_byte - RIGHT_TOTAL_LENGTH (i); 2360 right_start_byte
2361 = advance_to_char_boundary (end_byte - RIGHT_TOTAL_LENGTH (i));
2373 right_start = BYTE_TO_CHAR (right_start_byte); 2362 right_start = BYTE_TO_CHAR (right_start_byte);
2374 2363 eassert (CHAR_TO_BYTE (right_start) == right_start_byte);
2375 /* If RIGHT_START_BYTE is in the middle of a character,
2376 adjust it and RIGHT_START to a char boundary. */
2377 temp = CHAR_TO_BYTE (right_start);
2378
2379 if (right_start_byte < temp)
2380 {
2381 right_start_byte = temp;
2382 }
2383 if (right_start_byte > temp)
2384 {
2385 right_start++;
2386 right_start_byte = CHAR_TO_BYTE (right_start);
2387 }
2388 } 2364 }
2389 else 2365 else
2390 { 2366 {