diff options
| author | Andreas Politz | 2017-10-09 08:22:43 +0200 |
|---|---|---|
| committer | Andreas Politz | 2017-10-09 08:22:43 +0200 |
| commit | 8869332684c2302b5ba1ead4568bbc7ba1c0183e (patch) | |
| tree | a28ca47b5064e0c12b1d9f636ef04948989cf301 /src/buffer.c | |
| parent | a38c38c0526894ff05e2317994703c1157d5f909 (diff) | |
| download | emacs-8869332684c2302b5ba1ead4568bbc7ba1c0183e.tar.gz emacs-8869332684c2302b5ba1ead4568bbc7ba1c0183e.zip | |
Remove redundant checks for the empty overlay tree
* src/alloc.c (mark_buffer): Remove b->overlays check.
* src/buffer.c (copy_overlays): Also.
* src/buffer.c (swap_buffer_overlays, overlays_in): Also.
(next_overlay_change, previous_overlay_change): Also.
(overlay_touches_p, Foverlay_lists): Also.
(evaporate_overlays): Also.
* src/xdisp.c (load_overlay_strings): Also.
Diffstat (limited to 'src/buffer.c')
| -rw-r--r-- | src/buffer.c | 63 |
1 files changed, 17 insertions, 46 deletions
diff --git a/src/buffer.c b/src/buffer.c index 122c60fab39..9ddc9c7e056 100644 --- a/src/buffer.c +++ b/src/buffer.c | |||
| @@ -607,14 +607,9 @@ static void | |||
| 607 | copy_overlays (struct buffer *from, struct buffer *to) | 607 | copy_overlays (struct buffer *from, struct buffer *to) |
| 608 | { | 608 | { |
| 609 | eassert (to && ! to->overlays); | 609 | eassert (to && ! to->overlays); |
| 610 | |||
| 611 | struct interval_node *node; | 610 | struct interval_node *node; |
| 612 | 611 | ||
| 613 | if (! from->overlays) | ||
| 614 | return; | ||
| 615 | |||
| 616 | buffer_overlay_iter_start (from, PTRDIFF_MIN, PTRDIFF_MAX, ITREE_ASCENDING); | 612 | buffer_overlay_iter_start (from, PTRDIFF_MIN, PTRDIFF_MAX, ITREE_ASCENDING); |
| 617 | |||
| 618 | while ((node = buffer_overlay_iter_next (from))) | 613 | while ((node = buffer_overlay_iter_next (from))) |
| 619 | { | 614 | { |
| 620 | Lisp_Object ov = node->data; | 615 | Lisp_Object ov = node->data; |
| @@ -2277,20 +2272,16 @@ swap_buffer_overlays (struct buffer *buffer, struct buffer *other) | |||
| 2277 | { | 2272 | { |
| 2278 | struct interval_node *node; | 2273 | struct interval_node *node; |
| 2279 | 2274 | ||
| 2280 | if (buffer->overlays) | 2275 | buffer_overlay_iter_start (buffer, PTRDIFF_MIN, PTRDIFF_MAX, ITREE_ASCENDING); |
| 2281 | { | 2276 | while ((node = buffer_overlay_iter_next (buffer))) |
| 2282 | buffer_overlay_iter_start (buffer, PTRDIFF_MIN, PTRDIFF_MAX, ITREE_ASCENDING); | 2277 | XOVERLAY (node->data)->buffer = other; |
| 2283 | while ((node = buffer_overlay_iter_next (buffer))) | 2278 | buffer_overlay_iter_finish (buffer); |
| 2284 | XOVERLAY (node->data)->buffer = other; | 2279 | |
| 2285 | buffer_overlay_iter_finish (buffer); | 2280 | buffer_overlay_iter_start (other, PTRDIFF_MIN, PTRDIFF_MAX, ITREE_ASCENDING); |
| 2286 | } | 2281 | while ((node = buffer_overlay_iter_next (other))) |
| 2287 | if (other->overlays) | 2282 | XOVERLAY (node->data)->buffer = buffer; |
| 2288 | { | 2283 | buffer_overlay_iter_finish (other); |
| 2289 | buffer_overlay_iter_start (other, PTRDIFF_MIN, PTRDIFF_MAX, ITREE_ASCENDING); | 2284 | |
| 2290 | while ((node = buffer_overlay_iter_next (other))) | ||
| 2291 | XOVERLAY (node->data)->buffer = buffer; | ||
| 2292 | buffer_overlay_iter_finish (other); | ||
| 2293 | } | ||
| 2294 | /* Swap the interval trees. */ | 2285 | /* Swap the interval trees. */ |
| 2295 | void *tmp = buffer->overlays; | 2286 | void *tmp = buffer->overlays; |
| 2296 | buffer->overlays = other->overlays; | 2287 | buffer->overlays = other->overlays; |
| @@ -2837,12 +2828,8 @@ overlays_in (ptrdiff_t beg, ptrdiff_t end, bool extend, | |||
| 2837 | ptrdiff_t len = *len_ptr; | 2828 | ptrdiff_t len = *len_ptr; |
| 2838 | ptrdiff_t next = ZV; | 2829 | ptrdiff_t next = ZV; |
| 2839 | Lisp_Object *vec = *vec_ptr; | 2830 | Lisp_Object *vec = *vec_ptr; |
| 2840 | |||
| 2841 | struct interval_node *node; | 2831 | struct interval_node *node; |
| 2842 | 2832 | ||
| 2843 | if (! current_buffer->overlays) | ||
| 2844 | return idx; | ||
| 2845 | |||
| 2846 | buffer_overlay_iter_start (current_buffer, beg, | 2833 | buffer_overlay_iter_start (current_buffer, beg, |
| 2847 | /* Find empty OV at Z ? */ | 2834 | /* Find empty OV at Z ? */ |
| 2848 | (end >= Z && empty) ? Z + 1 : ZV, | 2835 | (end >= Z && empty) ? Z + 1 : ZV, |
| @@ -2904,9 +2891,6 @@ next_overlay_change (ptrdiff_t pos) | |||
| 2904 | ptrdiff_t next = ZV; | 2891 | ptrdiff_t next = ZV; |
| 2905 | struct interval_node *node; | 2892 | struct interval_node *node; |
| 2906 | 2893 | ||
| 2907 | if (! current_buffer->overlays) | ||
| 2908 | return next; | ||
| 2909 | |||
| 2910 | buffer_overlay_iter_start (current_buffer, pos, ZV, ITREE_ASCENDING); | 2894 | buffer_overlay_iter_start (current_buffer, pos, ZV, ITREE_ASCENDING); |
| 2911 | while ((node = buffer_overlay_iter_next (current_buffer))) | 2895 | while ((node = buffer_overlay_iter_next (current_buffer))) |
| 2912 | { | 2896 | { |
| @@ -2935,9 +2919,6 @@ previous_overlay_change (ptrdiff_t pos) | |||
| 2935 | struct interval_node *node; | 2919 | struct interval_node *node; |
| 2936 | ptrdiff_t prev = BEGV; | 2920 | ptrdiff_t prev = BEGV; |
| 2937 | 2921 | ||
| 2938 | if (! current_buffer->overlays) | ||
| 2939 | return prev; | ||
| 2940 | |||
| 2941 | buffer_overlay_iter_start (current_buffer, BEGV, pos, ITREE_DESCENDING); | 2922 | buffer_overlay_iter_start (current_buffer, BEGV, pos, ITREE_DESCENDING); |
| 2942 | while ((node = buffer_overlay_iter_next (current_buffer))) | 2923 | while ((node = buffer_overlay_iter_next (current_buffer))) |
| 2943 | { | 2924 | { |
| @@ -3023,9 +3004,6 @@ overlay_touches_p (ptrdiff_t pos) | |||
| 3023 | struct interval_node *node; | 3004 | struct interval_node *node; |
| 3024 | bool result = false; | 3005 | bool result = false; |
| 3025 | 3006 | ||
| 3026 | if (! current_buffer->overlays) | ||
| 3027 | return false; | ||
| 3028 | |||
| 3029 | /* We need to find overlays ending in pos, as well as empty ones at | 3007 | /* We need to find overlays ending in pos, as well as empty ones at |
| 3030 | pos. */ | 3008 | pos. */ |
| 3031 | buffer_overlay_iter_start (current_buffer, | 3009 | buffer_overlay_iter_start (current_buffer, |
| @@ -3729,16 +3707,13 @@ However, the overlays you get are the real objects that the buffer uses. */) | |||
| 3729 | (void) | 3707 | (void) |
| 3730 | { | 3708 | { |
| 3731 | Lisp_Object overlays = Qnil; | 3709 | Lisp_Object overlays = Qnil; |
| 3710 | struct interval_node *node; | ||
| 3732 | 3711 | ||
| 3733 | if (current_buffer->overlays) | 3712 | buffer_overlay_iter_start (current_buffer, BEG, Z, ITREE_DESCENDING); |
| 3734 | { | 3713 | while ((node = buffer_overlay_iter_next (current_buffer))) |
| 3735 | struct interval_node *node; | 3714 | overlays = Fcons (node->data, overlays); |
| 3715 | buffer_overlay_iter_finish (current_buffer); | ||
| 3736 | 3716 | ||
| 3737 | buffer_overlay_iter_start (current_buffer, BEG, Z, ITREE_DESCENDING); | ||
| 3738 | while ((node = buffer_overlay_iter_next (current_buffer))) | ||
| 3739 | overlays = Fcons (node->data, overlays); | ||
| 3740 | buffer_overlay_iter_finish (current_buffer); | ||
| 3741 | } | ||
| 3742 | return Fcons (overlays, Qnil); | 3717 | return Fcons (overlays, Qnil); |
| 3743 | } | 3718 | } |
| 3744 | 3719 | ||
| @@ -3972,15 +3947,10 @@ call_overlay_mod_hooks (Lisp_Object list, Lisp_Object overlay, bool after, | |||
| 3972 | void | 3947 | void |
| 3973 | evaporate_overlays (ptrdiff_t pos) | 3948 | evaporate_overlays (ptrdiff_t pos) |
| 3974 | { | 3949 | { |
| 3975 | Lisp_Object hit_list; | 3950 | Lisp_Object hit_list = Qnil; |
| 3976 | struct interval_node *node; | 3951 | struct interval_node *node; |
| 3977 | 3952 | ||
| 3978 | if (! current_buffer->overlays) | ||
| 3979 | return; | ||
| 3980 | |||
| 3981 | hit_list = Qnil; | ||
| 3982 | buffer_overlay_iter_start (current_buffer, pos, pos, ITREE_ASCENDING); | 3953 | buffer_overlay_iter_start (current_buffer, pos, pos, ITREE_ASCENDING); |
| 3983 | |||
| 3984 | while ((node = buffer_overlay_iter_next (current_buffer))) | 3954 | while ((node = buffer_overlay_iter_next (current_buffer))) |
| 3985 | { | 3955 | { |
| 3986 | if (node->end == pos | 3956 | if (node->end == pos |
| @@ -3988,6 +3958,7 @@ evaporate_overlays (ptrdiff_t pos) | |||
| 3988 | hit_list = Fcons (node->data, hit_list); | 3958 | hit_list = Fcons (node->data, hit_list); |
| 3989 | } | 3959 | } |
| 3990 | buffer_overlay_iter_finish (current_buffer); | 3960 | buffer_overlay_iter_finish (current_buffer); |
| 3961 | |||
| 3991 | for (; CONSP (hit_list); hit_list = XCDR (hit_list)) | 3962 | for (; CONSP (hit_list); hit_list = XCDR (hit_list)) |
| 3992 | Fdelete_overlay (XCAR (hit_list)); | 3963 | Fdelete_overlay (XCAR (hit_list)); |
| 3993 | } | 3964 | } |