diff options
| author | Stefan Monnier | 2019-05-07 13:41:54 -0400 |
|---|---|---|
| committer | Stefan Monnier | 2019-05-07 13:41:54 -0400 |
| commit | 32cf07819ae8cfdbf14e00f351c7f520fff325c3 (patch) | |
| tree | 029f5e0b51aa8052bba25d79bb9fba9fb42ecee6 /src/intervals.c | |
| parent | 81d83cf6357c73ac5e8de8aeac9760ab00f5af0a (diff) | |
| download | emacs-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.c | 36 |
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 | { |