summaryrefslogtreecommitdiff
path: root/src/buffer.c
diff options
context:
space:
mode:
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
copy_overlays (struct buffer *from, struct buffer *to)
{
eassert (to && ! to->overlays);
-
struct interval_node *node;
- if (! from->overlays)
- return;
-
buffer_overlay_iter_start (from, PTRDIFF_MIN, PTRDIFF_MAX, ITREE_ASCENDING);
-
while ((node = buffer_overlay_iter_next (from)))
{
Lisp_Object ov = node->data;
@@ -2277,20 +2272,16 @@ swap_buffer_overlays (struct buffer *buffer, struct buffer *other)
{
struct interval_node *node;
- if (buffer->overlays)
- {
- buffer_overlay_iter_start (buffer, PTRDIFF_MIN, PTRDIFF_MAX, ITREE_ASCENDING);
- while ((node = buffer_overlay_iter_next (buffer)))
- XOVERLAY (node->data)->buffer = other;
- buffer_overlay_iter_finish (buffer);
- }
- if (other->overlays)
- {
- buffer_overlay_iter_start (other, PTRDIFF_MIN, PTRDIFF_MAX, ITREE_ASCENDING);
- while ((node = buffer_overlay_iter_next (other)))
- XOVERLAY (node->data)->buffer = buffer;
- buffer_overlay_iter_finish (other);
- }
+ buffer_overlay_iter_start (buffer, PTRDIFF_MIN, PTRDIFF_MAX, ITREE_ASCENDING);
+ while ((node = buffer_overlay_iter_next (buffer)))
+ XOVERLAY (node->data)->buffer = other;
+ buffer_overlay_iter_finish (buffer);
+
+ buffer_overlay_iter_start (other, PTRDIFF_MIN, PTRDIFF_MAX, ITREE_ASCENDING);
+ while ((node = buffer_overlay_iter_next (other)))
+ XOVERLAY (node->data)->buffer = buffer;
+ buffer_overlay_iter_finish (other);
+
/* Swap the interval trees. */
void *tmp = buffer->overlays;
buffer->overlays = other->overlays;
@@ -2837,12 +2828,8 @@ overlays_in (ptrdiff_t beg, ptrdiff_t end, bool extend,
ptrdiff_t len = *len_ptr;
ptrdiff_t next = ZV;
Lisp_Object *vec = *vec_ptr;
-
struct interval_node *node;
- if (! current_buffer->overlays)
- return idx;
-
buffer_overlay_iter_start (current_buffer, beg,
/* Find empty OV at Z ? */
(end >= Z && empty) ? Z + 1 : ZV,
@@ -2904,9 +2891,6 @@ next_overlay_change (ptrdiff_t pos)
ptrdiff_t next = ZV;
struct interval_node *node;
- if (! current_buffer->overlays)
- return next;
-
buffer_overlay_iter_start (current_buffer, pos, ZV, ITREE_ASCENDING);
while ((node = buffer_overlay_iter_next (current_buffer)))
{
@@ -2935,9 +2919,6 @@ previous_overlay_change (ptrdiff_t pos)
struct interval_node *node;
ptrdiff_t prev = BEGV;
- if (! current_buffer->overlays)
- return prev;
-
buffer_overlay_iter_start (current_buffer, BEGV, pos, ITREE_DESCENDING);
while ((node = buffer_overlay_iter_next (current_buffer)))
{
@@ -3023,9 +3004,6 @@ overlay_touches_p (ptrdiff_t pos)
struct interval_node *node;
bool result = false;
- if (! current_buffer->overlays)
- return false;
-
/* We need to find overlays ending in pos, as well as empty ones at
pos. */
buffer_overlay_iter_start (current_buffer,
@@ -3729,16 +3707,13 @@ However, the overlays you get are the real objects that the buffer uses. */)
(void)
{
Lisp_Object overlays = Qnil;
+ struct interval_node *node;
- if (current_buffer->overlays)
- {
- struct interval_node *node;
+ buffer_overlay_iter_start (current_buffer, BEG, Z, ITREE_DESCENDING);
+ while ((node = buffer_overlay_iter_next (current_buffer)))
+ overlays = Fcons (node->data, overlays);
+ buffer_overlay_iter_finish (current_buffer);
- buffer_overlay_iter_start (current_buffer, BEG, Z, ITREE_DESCENDING);
- while ((node = buffer_overlay_iter_next (current_buffer)))
- overlays = Fcons (node->data, overlays);
- buffer_overlay_iter_finish (current_buffer);
- }
return Fcons (overlays, Qnil);
}
@@ -3972,15 +3947,10 @@ call_overlay_mod_hooks (Lisp_Object list, Lisp_Object overlay, bool after,
void
evaporate_overlays (ptrdiff_t pos)
{
- Lisp_Object hit_list;
+ Lisp_Object hit_list = Qnil;
struct interval_node *node;
- if (! current_buffer->overlays)
- return;
-
- hit_list = Qnil;
buffer_overlay_iter_start (current_buffer, pos, pos, ITREE_ASCENDING);
-
while ((node = buffer_overlay_iter_next (current_buffer)))
{
if (node->end == pos
@@ -3988,6 +3958,7 @@ evaporate_overlays (ptrdiff_t pos)
hit_list = Fcons (node->data, hit_list);
}
buffer_overlay_iter_finish (current_buffer);
+
for (; CONSP (hit_list); hit_list = XCDR (hit_list))
Fdelete_overlay (XCAR (hit_list));
}