aboutsummaryrefslogtreecommitdiffstats
path: root/src/buffer.c
diff options
context:
space:
mode:
authorAndreas Politz2017-10-09 08:22:43 +0200
committerAndreas Politz2017-10-09 08:22:43 +0200
commit8869332684c2302b5ba1ead4568bbc7ba1c0183e (patch)
treea28ca47b5064e0c12b1d9f636ef04948989cf301 /src/buffer.c
parenta38c38c0526894ff05e2317994703c1157d5f909 (diff)
downloademacs-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.c63
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
607copy_overlays (struct buffer *from, struct buffer *to) 607copy_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,
3972void 3947void
3973evaporate_overlays (ptrdiff_t pos) 3948evaporate_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}