aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorDmitry Antipov2012-08-14 08:49:18 +0400
committerDmitry Antipov2012-08-14 08:49:18 +0400
commitfd318b54074f824376e7766cf127b6a4624f191a (patch)
tree147a2831bfca1bbe454842c657dca75b2ad31b1d /src
parent41a62dd97860c5154838ee87745fd380b45a4883 (diff)
downloademacs-fd318b54074f824376e7766cf127b6a4624f191a.tar.gz
emacs-fd318b54074f824376e7766cf127b6a4624f191a.zip
Revert and cleanup some recent overlay changes.
* buffer.h (enum overlay_type): Remove. (buffer_get_overlays, buffer_set_overlays): Likewise. (buffer_set_overlays_before, buffer_set_overlays_after): New function. Adjust users. (unchain_both): Add eassert.
Diffstat (limited to 'src')
-rw-r--r--src/ChangeLog9
-rw-r--r--src/alloc.c4
-rw-r--r--src/buffer.c122
-rw-r--r--src/buffer.h68
-rw-r--r--src/editfns.c4
-rw-r--r--src/fileio.c4
-rw-r--r--src/print.c6
-rw-r--r--src/xdisp.c4
8 files changed, 99 insertions, 122 deletions
diff --git a/src/ChangeLog b/src/ChangeLog
index febf65b270f..9cd76d2fc5f 100644
--- a/src/ChangeLog
+++ b/src/ChangeLog
@@ -1,5 +1,14 @@
12012-08-14 Dmitry Antipov <dmantipov@yandex.ru> 12012-08-14 Dmitry Antipov <dmantipov@yandex.ru>
2 2
3 Revert and cleanup some recent overlay changes.
4 * buffer.h (enum overlay_type): Remove.
5 (buffer_get_overlays, buffer_set_overlays): Likewise.
6 (buffer_set_overlays_before, buffer_set_overlays_after):
7 New function. Adjust users.
8 (unchain_both): Add eassert.
9
102012-08-14 Dmitry Antipov <dmantipov@yandex.ru>
11
3 * gtkutil.c (update_frame_tool_bar): Use EQ where appropriate. 12 * gtkutil.c (update_frame_tool_bar): Use EQ where appropriate.
4 13
52012-08-14 Paul Eggert <eggert@cs.ucla.edu> 142012-08-14 Paul Eggert <eggert@cs.ucla.edu>
diff --git a/src/alloc.c b/src/alloc.c
index e84be987033..c93fcb564c7 100644
--- a/src/alloc.c
+++ b/src/alloc.c
@@ -5831,8 +5831,8 @@ mark_buffer (struct buffer *buffer)
5831 a special way just before the sweep phase, and after stripping 5831 a special way just before the sweep phase, and after stripping
5832 some of its elements that are not needed any more. */ 5832 some of its elements that are not needed any more. */
5833 5833
5834 mark_overlay (buffer_get_overlays (buffer, OV_BEFORE)); 5834 mark_overlay (buffer->overlays_before);
5835 mark_overlay (buffer_get_overlays (buffer, OV_AFTER)); 5835 mark_overlay (buffer->overlays_after);
5836 5836
5837 /* If this is an indirect buffer, mark its base buffer. */ 5837 /* If this is an indirect buffer, mark its base buffer. */
5838 if (buffer->base_buffer && !VECTOR_MARKED_P (buffer->base_buffer)) 5838 if (buffer->base_buffer && !VECTOR_MARKED_P (buffer->base_buffer))
diff --git a/src/buffer.c b/src/buffer.c
index ffc9daeb9a7..56d6231f5f8 100644
--- a/src/buffer.c
+++ b/src/buffer.c
@@ -474,10 +474,8 @@ clone_per_buffer_values (struct buffer *from, struct buffer *to)
474 474
475 memcpy (to->local_flags, from->local_flags, sizeof to->local_flags); 475 memcpy (to->local_flags, from->local_flags, sizeof to->local_flags);
476 476
477 buffer_set_overlays 477 buffer_set_overlays_before (to, copy_overlays (to, from->overlays_before));
478 (to, copy_overlays (to, buffer_get_overlays (from, OV_BEFORE)), OV_BEFORE); 478 buffer_set_overlays_after (to, copy_overlays (to, from->overlays_after));
479 buffer_set_overlays
480 (to, copy_overlays (to, buffer_get_overlays (from, OV_AFTER)), OV_AFTER);
481 479
482 /* Get (a copy of) the alist of Lisp-level local variables of FROM 480 /* Get (a copy of) the alist of Lisp-level local variables of FROM
483 and install that in TO. */ 481 and install that in TO. */
@@ -676,22 +674,22 @@ delete_all_overlays (struct buffer *b)
676{ 674{
677 struct Lisp_Overlay *ov, *next; 675 struct Lisp_Overlay *ov, *next;
678 676
679 for (ov = buffer_get_overlays (b, OV_BEFORE); ov; ov = next) 677 for (ov = b->overlays_before; ov; ov = next)
680 { 678 {
681 drop_overlay (b, ov); 679 drop_overlay (b, ov);
682 next = ov->next; 680 next = ov->next;
683 ov->next = NULL; 681 ov->next = NULL;
684 } 682 }
685 683
686 for (ov = buffer_get_overlays (b, OV_AFTER); ov; ov = next) 684 for (ov = b->overlays_after; ov; ov = next)
687 { 685 {
688 drop_overlay (b, ov); 686 drop_overlay (b, ov);
689 next = ov->next; 687 next = ov->next;
690 ov->next = NULL; 688 ov->next = NULL;
691 } 689 }
692 690
693 buffer_set_overlays (b, NULL, OV_BEFORE); 691 buffer_set_overlays_before (b, NULL);
694 buffer_set_overlays (b, NULL, OV_AFTER); 692 buffer_set_overlays_after (b, NULL);
695} 693}
696 694
697/* Reinitialize everything about a buffer except its name and contents 695/* Reinitialize everything about a buffer except its name and contents
@@ -720,8 +718,8 @@ reset_buffer (register struct buffer *b)
720 b->auto_save_failure_time = 0; 718 b->auto_save_failure_time = 0;
721 BSET (b, auto_save_file_name, Qnil); 719 BSET (b, auto_save_file_name, Qnil);
722 BSET (b, read_only, Qnil); 720 BSET (b, read_only, Qnil);
723 buffer_set_overlays (b, NULL, OV_BEFORE); 721 buffer_set_overlays_before (b, NULL);
724 buffer_set_overlays (b, NULL, OV_AFTER); 722 buffer_set_overlays_after (b, NULL);
725 b->overlay_center = BEG; 723 b->overlay_center = BEG;
726 BSET (b, mark_active, Qnil); 724 BSET (b, mark_active, Qnil);
727 BSET (b, point_before_scroll, Qnil); 725 BSET (b, point_before_scroll, Qnil);
@@ -2608,7 +2606,7 @@ overlays_at (EMACS_INT pos, int extend, Lisp_Object **vec_ptr,
2608 ptrdiff_t prev = BEGV; 2606 ptrdiff_t prev = BEGV;
2609 int inhibit_storing = 0; 2607 int inhibit_storing = 0;
2610 2608
2611 for (tail = buffer_get_overlays (NULL, OV_BEFORE); tail; tail = tail->next) 2609 for (tail = current_buffer->overlays_before; tail; tail = tail->next)
2612 { 2610 {
2613 ptrdiff_t startpos, endpos; 2611 ptrdiff_t startpos, endpos;
2614 2612
@@ -2656,7 +2654,7 @@ overlays_at (EMACS_INT pos, int extend, Lisp_Object **vec_ptr,
2656 next = startpos; 2654 next = startpos;
2657 } 2655 }
2658 2656
2659 for (tail = buffer_get_overlays (NULL, OV_AFTER); tail; tail = tail->next) 2657 for (tail = current_buffer->overlays_after; tail; tail = tail->next)
2660 { 2658 {
2661 ptrdiff_t startpos, endpos; 2659 ptrdiff_t startpos, endpos;
2662 2660
@@ -2743,7 +2741,7 @@ overlays_in (EMACS_INT beg, EMACS_INT end, int extend,
2743 int inhibit_storing = 0; 2741 int inhibit_storing = 0;
2744 int end_is_Z = end == Z; 2742 int end_is_Z = end == Z;
2745 2743
2746 for (tail = buffer_get_overlays (NULL, OV_BEFORE); tail; tail = tail->next) 2744 for (tail = current_buffer->overlays_before; tail; tail = tail->next)
2747 { 2745 {
2748 ptrdiff_t startpos, endpos; 2746 ptrdiff_t startpos, endpos;
2749 2747
@@ -2790,7 +2788,7 @@ overlays_in (EMACS_INT beg, EMACS_INT end, int extend,
2790 next = startpos; 2788 next = startpos;
2791 } 2789 }
2792 2790
2793 for (tail = buffer_get_overlays (NULL, OV_AFTER); tail; tail = tail->next) 2791 for (tail = current_buffer->overlays_after; tail; tail = tail->next)
2794 { 2792 {
2795 ptrdiff_t startpos, endpos; 2793 ptrdiff_t startpos, endpos;
2796 2794
@@ -2880,7 +2878,7 @@ overlay_touches_p (ptrdiff_t pos)
2880 Lisp_Object overlay; 2878 Lisp_Object overlay;
2881 struct Lisp_Overlay *tail; 2879 struct Lisp_Overlay *tail;
2882 2880
2883 for (tail = buffer_get_overlays (NULL, OV_BEFORE); tail; tail = tail->next) 2881 for (tail = current_buffer->overlays_before; tail; tail = tail->next)
2884 { 2882 {
2885 ptrdiff_t endpos; 2883 ptrdiff_t endpos;
2886 2884
@@ -2894,7 +2892,7 @@ overlay_touches_p (ptrdiff_t pos)
2894 return 1; 2892 return 1;
2895 } 2893 }
2896 2894
2897 for (tail = buffer_get_overlays (NULL, OV_AFTER); tail; tail = tail->next) 2895 for (tail = current_buffer->overlays_after; tail; tail = tail->next)
2898 { 2896 {
2899 ptrdiff_t startpos; 2897 ptrdiff_t startpos;
2900 2898
@@ -3095,7 +3093,7 @@ overlay_strings (ptrdiff_t pos, struct window *w, unsigned char **pstr)
3095 3093
3096 overlay_heads.used = overlay_heads.bytes = 0; 3094 overlay_heads.used = overlay_heads.bytes = 0;
3097 overlay_tails.used = overlay_tails.bytes = 0; 3095 overlay_tails.used = overlay_tails.bytes = 0;
3098 for (ov = buffer_get_overlays (NULL, OV_BEFORE); ov; ov = ov->next) 3096 for (ov = current_buffer->overlays_before; ov; ov = ov->next)
3099 { 3097 {
3100 XSETMISC (overlay, ov); 3098 XSETMISC (overlay, ov);
3101 eassert (OVERLAYP (overlay)); 3099 eassert (OVERLAYP (overlay));
@@ -3123,7 +3121,7 @@ overlay_strings (ptrdiff_t pos, struct window *w, unsigned char **pstr)
3123 Foverlay_get (overlay, Qpriority), 3121 Foverlay_get (overlay, Qpriority),
3124 endpos - startpos); 3122 endpos - startpos);
3125 } 3123 }
3126 for (ov = buffer_get_overlays (NULL, OV_AFTER); ov; ov = ov->next) 3124 for (ov = current_buffer->overlays_after; ov; ov = ov->next)
3127 { 3125 {
3128 XSETMISC (overlay, ov); 3126 XSETMISC (overlay, ov);
3129 eassert (OVERLAYP (overlay)); 3127 eassert (OVERLAYP (overlay));
@@ -3221,7 +3219,7 @@ recenter_overlay_lists (struct buffer *buf, ptrdiff_t pos)
3221 But we use it for symmetry and in case that should cease to be true 3219 But we use it for symmetry and in case that should cease to be true
3222 with some future change. */ 3220 with some future change. */
3223 prev = NULL; 3221 prev = NULL;
3224 for (tail = buffer_get_overlays (buf, OV_BEFORE); tail; prev = tail, tail = next) 3222 for (tail = buf->overlays_before; tail; prev = tail, tail = next)
3225 { 3223 {
3226 next = tail->next; 3224 next = tail->next;
3227 XSETMISC (overlay, tail); 3225 XSETMISC (overlay, tail);
@@ -3240,11 +3238,11 @@ recenter_overlay_lists (struct buffer *buf, ptrdiff_t pos)
3240 if (prev) 3238 if (prev)
3241 prev->next = next; 3239 prev->next = next;
3242 else 3240 else
3243 buffer_set_overlays (buf, next, OV_BEFORE); 3241 buffer_set_overlays_before (buf, next);
3244 3242
3245 /* Search thru overlays_after for where to put it. */ 3243 /* Search thru overlays_after for where to put it. */
3246 other_prev = NULL; 3244 other_prev = NULL;
3247 for (other = buffer_get_overlays (buf, OV_AFTER); other; 3245 for (other = buf->overlays_after; other;
3248 other_prev = other, other = other->next) 3246 other_prev = other, other = other->next)
3249 { 3247 {
3250 Lisp_Object otherbeg, otheroverlay; 3248 Lisp_Object otherbeg, otheroverlay;
@@ -3262,7 +3260,7 @@ recenter_overlay_lists (struct buffer *buf, ptrdiff_t pos)
3262 if (other_prev) 3260 if (other_prev)
3263 other_prev->next = tail; 3261 other_prev->next = tail;
3264 else 3262 else
3265 buffer_set_overlays (buf, tail, OV_AFTER); 3263 buffer_set_overlays_after (buf, tail);
3266 tail = prev; 3264 tail = prev;
3267 } 3265 }
3268 else 3266 else
@@ -3274,7 +3272,7 @@ recenter_overlay_lists (struct buffer *buf, ptrdiff_t pos)
3274 3272
3275 /* See if anything in overlays_after should be in overlays_before. */ 3273 /* See if anything in overlays_after should be in overlays_before. */
3276 prev = NULL; 3274 prev = NULL;
3277 for (tail = buffer_get_overlays (buf, OV_AFTER); tail; prev = tail, tail = next) 3275 for (tail = buf->overlays_after; tail; prev = tail, tail = next)
3278 { 3276 {
3279 next = tail->next; 3277 next = tail->next;
3280 XSETMISC (overlay, tail); 3278 XSETMISC (overlay, tail);
@@ -3298,11 +3296,11 @@ recenter_overlay_lists (struct buffer *buf, ptrdiff_t pos)
3298 if (prev) 3296 if (prev)
3299 prev->next = next; 3297 prev->next = next;
3300 else 3298 else
3301 buffer_set_overlays (buf, next, OV_AFTER); 3299 buffer_set_overlays_after (buf, next);
3302 3300
3303 /* Search thru overlays_before for where to put it. */ 3301 /* Search thru overlays_before for where to put it. */
3304 other_prev = NULL; 3302 other_prev = NULL;
3305 for (other = buffer_get_overlays (buf, OV_BEFORE); other; 3303 for (other = buf->overlays_before; other;
3306 other_prev = other, other = other->next) 3304 other_prev = other, other = other->next)
3307 { 3305 {
3308 Lisp_Object otherend, otheroverlay; 3306 Lisp_Object otherend, otheroverlay;
@@ -3320,7 +3318,7 @@ recenter_overlay_lists (struct buffer *buf, ptrdiff_t pos)
3320 if (other_prev) 3318 if (other_prev)
3321 other_prev->next = tail; 3319 other_prev->next = tail;
3322 else 3320 else
3323 buffer_set_overlays (buf, tail, OV_BEFORE); 3321 buffer_set_overlays_before (buf, tail);
3324 tail = prev; 3322 tail = prev;
3325 } 3323 }
3326 } 3324 }
@@ -3373,7 +3371,7 @@ fix_start_end_in_overlays (register ptrdiff_t start, register ptrdiff_t end)
3373 assigned. */ 3371 assigned. */
3374 struct Lisp_Overlay *beforep = NULL, *afterp = NULL; 3372 struct Lisp_Overlay *beforep = NULL, *afterp = NULL;
3375 /* 'Parent', likewise, indicates a cons cell or 3373 /* 'Parent', likewise, indicates a cons cell or
3376 before or after overlays list, depending 3374 current_buffer->overlays_before or overlays_after, depending
3377 which loop we're in. */ 3375 which loop we're in. */
3378 struct Lisp_Overlay *tail, *parent; 3376 struct Lisp_Overlay *tail, *parent;
3379 ptrdiff_t startpos, endpos; 3377 ptrdiff_t startpos, endpos;
@@ -3385,7 +3383,7 @@ fix_start_end_in_overlays (register ptrdiff_t start, register ptrdiff_t end)
3385 (after_list) if it is, is still uninitialized. So it's not a bug 3383 (after_list) if it is, is still uninitialized. So it's not a bug
3386 that before_list isn't initialized, although it may look 3384 that before_list isn't initialized, although it may look
3387 strange. */ 3385 strange. */
3388 for (parent = NULL, tail = buffer_get_overlays (NULL, OV_BEFORE); tail;) 3386 for (parent = NULL, tail = current_buffer->overlays_before; tail;)
3389 { 3387 {
3390 XSETMISC (overlay, tail); 3388 XSETMISC (overlay, tail);
3391 3389
@@ -3425,7 +3423,7 @@ fix_start_end_in_overlays (register ptrdiff_t start, register ptrdiff_t end)
3425 beforep = tail; 3423 beforep = tail;
3426 } 3424 }
3427 if (!parent) 3425 if (!parent)
3428 buffer_set_overlays (NULL, tail->next, OV_BEFORE); 3426 buffer_set_overlays_before (current_buffer, tail->next);
3429 else 3427 else
3430 parent->next = tail->next; 3428 parent->next = tail->next;
3431 tail = tail->next; 3429 tail = tail->next;
@@ -3433,7 +3431,7 @@ fix_start_end_in_overlays (register ptrdiff_t start, register ptrdiff_t end)
3433 else 3431 else
3434 parent = tail, tail = parent->next; 3432 parent = tail, tail = parent->next;
3435 } 3433 }
3436 for (parent = NULL, tail = buffer_get_overlays (NULL, OV_AFTER); tail;) 3434 for (parent = NULL, tail = current_buffer->overlays_after; tail;)
3437 { 3435 {
3438 XSETMISC (overlay, tail); 3436 XSETMISC (overlay, tail);
3439 3437
@@ -3471,7 +3469,7 @@ fix_start_end_in_overlays (register ptrdiff_t start, register ptrdiff_t end)
3471 beforep = tail; 3469 beforep = tail;
3472 } 3470 }
3473 if (!parent) 3471 if (!parent)
3474 buffer_set_overlays (NULL, tail->next, OV_AFTER); 3472 buffer_set_overlays_after (current_buffer, tail->next);
3475 else 3473 else
3476 parent->next = tail->next; 3474 parent->next = tail->next;
3477 tail = tail->next; 3475 tail = tail->next;
@@ -3484,15 +3482,15 @@ fix_start_end_in_overlays (register ptrdiff_t start, register ptrdiff_t end)
3484 and let the recenter function make it sane again. */ 3482 and let the recenter function make it sane again. */
3485 if (beforep) 3483 if (beforep)
3486 { 3484 {
3487 beforep->next = buffer_get_overlays (NULL, OV_BEFORE); 3485 beforep->next = current_buffer->overlays_before;
3488 buffer_set_overlays (NULL, before_list, OV_BEFORE); 3486 buffer_set_overlays_before (current_buffer, before_list);
3489 } 3487 }
3490 recenter_overlay_lists (current_buffer, current_buffer->overlay_center); 3488 recenter_overlay_lists (current_buffer, current_buffer->overlay_center);
3491 3489
3492 if (afterp) 3490 if (afterp)
3493 { 3491 {
3494 afterp->next = buffer_get_overlays (NULL, OV_AFTER); 3492 afterp->next = current_buffer->overlays_after;
3495 buffer_set_overlays (NULL, after_list, OV_AFTER); 3493 buffer_set_overlays_after (current_buffer, after_list);
3496 } 3494 }
3497 recenter_overlay_lists (current_buffer, current_buffer->overlay_center); 3495 recenter_overlay_lists (current_buffer, current_buffer->overlay_center);
3498} 3496}
@@ -3513,8 +3511,7 @@ void
3513fix_overlays_before (struct buffer *bp, ptrdiff_t prev, ptrdiff_t pos) 3511fix_overlays_before (struct buffer *bp, ptrdiff_t prev, ptrdiff_t pos)
3514{ 3512{
3515 /* If parent is nil, replace overlays_before; otherwise, parent->next. */ 3513 /* If parent is nil, replace overlays_before; otherwise, parent->next. */
3516 struct Lisp_Overlay *tail = buffer_get_overlays (bp, OV_BEFORE); 3514 struct Lisp_Overlay *tail = bp->overlays_before, *parent = NULL, *right_pair;
3517 struct Lisp_Overlay *parent = NULL, *right_pair;
3518 Lisp_Object tem; 3515 Lisp_Object tem;
3519 ptrdiff_t end IF_LINT (= 0); 3516 ptrdiff_t end IF_LINT (= 0);
3520 3517
@@ -3569,8 +3566,8 @@ fix_overlays_before (struct buffer *bp, ptrdiff_t prev, ptrdiff_t pos)
3569 and link it into the right place. */ 3566 and link it into the right place. */
3570 if (!right_pair) 3567 if (!right_pair)
3571 { 3568 {
3572 found->next = buffer_get_overlays (bp, OV_BEFORE); 3569 found->next = bp->overlays_before;
3573 buffer_set_overlays (bp, found, OV_BEFORE); 3570 buffer_set_overlays_before (bp, found);
3574 } 3571 }
3575 else 3572 else
3576 { 3573 {
@@ -3646,15 +3643,15 @@ for the rear of the overlay advance when text is inserted there
3646 end = OVERLAY_END (overlay); 3643 end = OVERLAY_END (overlay);
3647 if (OVERLAY_POSITION (end) < b->overlay_center) 3644 if (OVERLAY_POSITION (end) < b->overlay_center)
3648 { 3645 {
3649 if (buffer_get_overlays (b, OV_AFTER)) 3646 if (b->overlays_after)
3650 XOVERLAY (overlay)->next = buffer_get_overlays (b, OV_AFTER); 3647 XOVERLAY (overlay)->next = b->overlays_after;
3651 buffer_set_overlays (b, XOVERLAY (overlay), OV_AFTER); 3648 buffer_set_overlays_after (b, XOVERLAY (overlay));
3652 } 3649 }
3653 else 3650 else
3654 { 3651 {
3655 if (buffer_get_overlays (b, OV_BEFORE)) 3652 if (b->overlays_before)
3656 XOVERLAY (overlay)->next = buffer_get_overlays (b, OV_BEFORE); 3653 XOVERLAY (overlay)->next = b->overlays_before;
3657 buffer_set_overlays (b, XOVERLAY (overlay), OV_BEFORE); 3654 buffer_set_overlays_before (b, XOVERLAY (overlay));
3658 } 3655 }
3659 3656
3660 /* This puts it in the right list, and in the right order. */ 3657 /* This puts it in the right list, and in the right order. */
@@ -3719,10 +3716,9 @@ unchain_both (struct buffer *b, Lisp_Object overlay)
3719{ 3716{
3720 struct Lisp_Overlay *ov = XOVERLAY (overlay); 3717 struct Lisp_Overlay *ov = XOVERLAY (overlay);
3721 3718
3722 buffer_set_overlays 3719 buffer_set_overlays_before (b, unchain_overlay (b->overlays_before, ov));
3723 (b, unchain_overlay (buffer_get_overlays (b, OV_BEFORE), ov), OV_BEFORE); 3720 buffer_set_overlays_after (b, unchain_overlay (b->overlays_after, ov));
3724 buffer_set_overlays 3721 eassert (XOVERLAY (overlay)->next == NULL);
3725 (b, unchain_overlay (buffer_get_overlays (b, OV_AFTER), ov), OV_AFTER);
3726} 3722}
3727 3723
3728DEFUN ("move-overlay", Fmove_overlay, Smove_overlay, 3, 4, 0, 3724DEFUN ("move-overlay", Fmove_overlay, Smove_overlay, 3, 4, 0,
@@ -3776,7 +3772,6 @@ buffer. */)
3776 o_end = OVERLAY_POSITION (OVERLAY_END (overlay)); 3772 o_end = OVERLAY_POSITION (OVERLAY_END (overlay));
3777 3773
3778 unchain_both (ob, overlay); 3774 unchain_both (ob, overlay);
3779 eassert (XOVERLAY (overlay)->next == NULL);
3780 } 3775 }
3781 3776
3782 /* Set the overlay boundaries, which may clip them. */ 3777 /* Set the overlay boundaries, which may clip them. */
@@ -3816,13 +3811,13 @@ buffer. */)
3816 wrong list. */ 3811 wrong list. */
3817 if (n_end < b->overlay_center) 3812 if (n_end < b->overlay_center)
3818 { 3813 {
3819 XOVERLAY (overlay)->next = buffer_get_overlays (b, OV_AFTER); 3814 XOVERLAY (overlay)->next = b->overlays_after;
3820 buffer_set_overlays (b, XOVERLAY (overlay), OV_AFTER); 3815 buffer_set_overlays_after (b, XOVERLAY (overlay));
3821 } 3816 }
3822 else 3817 else
3823 { 3818 {
3824 XOVERLAY (overlay)->next = buffer_get_overlays (b, OV_BEFORE); 3819 XOVERLAY (overlay)->next = b->overlays_before;
3825 buffer_set_overlays (b, XOVERLAY (overlay), OV_BEFORE); 3820 buffer_set_overlays_before (b, XOVERLAY (overlay));
3826 } 3821 }
3827 3822
3828 /* This puts it in the right list, and in the right order. */ 3823 /* This puts it in the right list, and in the right order. */
@@ -3849,8 +3844,6 @@ DEFUN ("delete-overlay", Fdelete_overlay, Sdelete_overlay, 1, 1, 0,
3849 specbind (Qinhibit_quit, Qt); 3844 specbind (Qinhibit_quit, Qt);
3850 3845
3851 unchain_both (b, overlay); 3846 unchain_both (b, overlay);
3852 eassert (XOVERLAY (overlay)->next == NULL);
3853
3854 drop_overlay (b, XOVERLAY (overlay)); 3847 drop_overlay (b, XOVERLAY (overlay));
3855 3848
3856 /* When deleting an overlay with before or after strings, turn off 3849 /* When deleting an overlay with before or after strings, turn off
@@ -4048,13 +4041,12 @@ However, the overlays you get are the real objects that the buffer uses. */)
4048 struct Lisp_Overlay *ol; 4041 struct Lisp_Overlay *ol;
4049 Lisp_Object before = Qnil, after = Qnil, tmp; 4042 Lisp_Object before = Qnil, after = Qnil, tmp;
4050 4043
4051 for (ol = buffer_get_overlays (NULL, OV_BEFORE); ol; ol = ol->next) 4044 for (ol = current_buffer->overlays_before; ol; ol = ol->next)
4052 { 4045 {
4053 XSETMISC (tmp, ol); 4046 XSETMISC (tmp, ol);
4054 before = Fcons (tmp, before); 4047 before = Fcons (tmp, before);
4055 } 4048 }
4056 4049 for (ol = current_buffer->overlays_after; ol; ol = ol->next)
4057 for (ol = buffer_get_overlays (NULL, OV_AFTER); ol; ol = ol->next)
4058 { 4050 {
4059 XSETMISC (tmp, ol); 4051 XSETMISC (tmp, ol);
4060 after = Fcons (tmp, after); 4052 after = Fcons (tmp, after);
@@ -4199,7 +4191,7 @@ report_overlay_modification (Lisp_Object start, Lisp_Object end, int after,
4199 /* We are being called before a change. 4191 /* We are being called before a change.
4200 Scan the overlays to find the functions to call. */ 4192 Scan the overlays to find the functions to call. */
4201 last_overlay_modification_hooks_used = 0; 4193 last_overlay_modification_hooks_used = 0;
4202 for (tail = buffer_get_overlays (NULL, OV_BEFORE); tail; tail = tail->next) 4194 for (tail = current_buffer->overlays_before; tail; tail = tail->next)
4203 { 4195 {
4204 ptrdiff_t startpos, endpos; 4196 ptrdiff_t startpos, endpos;
4205 Lisp_Object ostart, oend; 4197 Lisp_Object ostart, oend;
@@ -4236,7 +4228,7 @@ report_overlay_modification (Lisp_Object start, Lisp_Object end, int after,
4236 } 4228 }
4237 } 4229 }
4238 4230
4239 for (tail = buffer_get_overlays (NULL, OV_AFTER); tail; tail = tail->next) 4231 for (tail = current_buffer->overlays_after; tail; tail = tail->next)
4240 { 4232 {
4241 ptrdiff_t startpos, endpos; 4233 ptrdiff_t startpos, endpos;
4242 Lisp_Object ostart, oend; 4234 Lisp_Object ostart, oend;
@@ -4328,7 +4320,7 @@ evaporate_overlays (ptrdiff_t pos)
4328 4320
4329 hit_list = Qnil; 4321 hit_list = Qnil;
4330 if (pos <= current_buffer->overlay_center) 4322 if (pos <= current_buffer->overlay_center)
4331 for (tail = buffer_get_overlays (NULL, OV_BEFORE); tail; tail = tail->next) 4323 for (tail = current_buffer->overlays_before; tail; tail = tail->next)
4332 { 4324 {
4333 ptrdiff_t endpos; 4325 ptrdiff_t endpos;
4334 XSETMISC (overlay, tail); 4326 XSETMISC (overlay, tail);
@@ -4340,7 +4332,7 @@ evaporate_overlays (ptrdiff_t pos)
4340 hit_list = Fcons (overlay, hit_list); 4332 hit_list = Fcons (overlay, hit_list);
4341 } 4333 }
4342 else 4334 else
4343 for (tail = buffer_get_overlays (NULL, OV_AFTER); tail; tail = tail->next) 4335 for (tail = current_buffer->overlays_after; tail; tail = tail->next)
4344 { 4336 {
4345 ptrdiff_t startpos; 4337 ptrdiff_t startpos;
4346 XSETMISC (overlay, tail); 4338 XSETMISC (overlay, tail);
@@ -4946,8 +4938,8 @@ init_buffer_once (void)
4946 BSET (&buffer_defaults, mark_active, Qnil); 4938 BSET (&buffer_defaults, mark_active, Qnil);
4947 BSET (&buffer_defaults, file_format, Qnil); 4939 BSET (&buffer_defaults, file_format, Qnil);
4948 BSET (&buffer_defaults, auto_save_file_format, Qt); 4940 BSET (&buffer_defaults, auto_save_file_format, Qt);
4949 buffer_defaults.overlays_before = NULL; 4941 buffer_set_overlays_before (&buffer_defaults, NULL);
4950 buffer_defaults.overlays_after = NULL; 4942 buffer_set_overlays_after (&buffer_defaults, NULL);
4951 buffer_defaults.overlay_center = BEG; 4943 buffer_defaults.overlay_center = BEG;
4952 4944
4953 XSETFASTINT (BVAR (&buffer_defaults, tab_width), 8); 4945 XSETFASTINT (BVAR (&buffer_defaults, tab_width), 8);
diff --git a/src/buffer.h b/src/buffer.h
index 286c20d9e9c..7a6bddee5ec 100644
--- a/src/buffer.h
+++ b/src/buffer.h
@@ -946,52 +946,6 @@ extern void mmap_set_vars (int);
946 } \ 946 } \
947 } while (0) 947 } while (0)
948 948
949enum overlay_type
950{
951 OV_BEFORE,
952 OV_AFTER
953};
954
955/* Get overlay list of type T and belonging to B. */
956
957BUFFER_INLINE struct Lisp_Overlay *
958buffer_get_overlays (struct buffer *b, enum overlay_type t)
959{
960 if (!b)
961 b = current_buffer;
962 if (t == OV_BEFORE)
963 return b->overlays_before;
964 else if (t == OV_AFTER)
965 return b->overlays_after;
966 else
967 abort ();
968}
969
970/* Set overlay list of type T as belonging to B. */
971
972BUFFER_INLINE void
973buffer_set_overlays (struct buffer *b, struct Lisp_Overlay *o,
974 enum overlay_type t)
975{
976 if (!b)
977 b = current_buffer;
978 if (t == OV_BEFORE)
979 b->overlays_before = o;
980 else if (t == OV_AFTER)
981 b->overlays_after = o;
982 else
983 abort ();
984}
985
986/* Non-zero if current buffer has overlays. */
987
988BUFFER_INLINE int
989buffer_has_overlays (void)
990{
991 return buffer_get_overlays (current_buffer, OV_BEFORE)
992 || buffer_get_overlays (current_buffer, OV_AFTER);
993}
994
995extern Lisp_Object Qbefore_change_functions; 949extern Lisp_Object Qbefore_change_functions;
996extern Lisp_Object Qafter_change_functions; 950extern Lisp_Object Qafter_change_functions;
997extern Lisp_Object Qfirst_change_hook; 951extern Lisp_Object Qfirst_change_hook;
@@ -1014,6 +968,28 @@ buffer_set_intervals (struct buffer *b, INTERVAL i)
1014 b->text->intervals = i; 968 b->text->intervals = i;
1015} 969}
1016 970
971/* Set an appropriate overlay of B. */
972
973BUFFER_INLINE void
974buffer_set_overlays_before (struct buffer *b, struct Lisp_Overlay *o)
975{
976 b->overlays_before = o;
977}
978
979BUFFER_INLINE void
980buffer_set_overlays_after (struct buffer *b, struct Lisp_Overlay *o)
981{
982 b->overlays_after = o;
983}
984
985/* Non-zero if current buffer has overlays. */
986
987BUFFER_INLINE int
988buffer_has_overlays (void)
989{
990 return current_buffer->overlays_before || current_buffer->overlays_after;
991}
992
1017/* Return character code of multi-byte form at byte position POS. If POS 993/* Return character code of multi-byte form at byte position POS. If POS
1018 doesn't point the head of valid multi-byte form, only the byte at 994 doesn't point the head of valid multi-byte form, only the byte at
1019 POS is returned. No range checking. 995 POS is returned. No range checking.
diff --git a/src/editfns.c b/src/editfns.c
index 60f61d0b431..c76009a099c 100644
--- a/src/editfns.c
+++ b/src/editfns.c
@@ -310,7 +310,7 @@ overlays_around (EMACS_INT pos, Lisp_Object *vec, ptrdiff_t len)
310 ptrdiff_t startpos, endpos; 310 ptrdiff_t startpos, endpos;
311 ptrdiff_t idx = 0; 311 ptrdiff_t idx = 0;
312 312
313 for (tail = buffer_get_overlays (NULL, OV_BEFORE); tail; tail = tail->next) 313 for (tail = current_buffer->overlays_before; tail; tail = tail->next)
314 { 314 {
315 XSETMISC (overlay, tail); 315 XSETMISC (overlay, tail);
316 316
@@ -329,7 +329,7 @@ overlays_around (EMACS_INT pos, Lisp_Object *vec, ptrdiff_t len)
329 } 329 }
330 } 330 }
331 331
332 for (tail = buffer_get_overlays (NULL, OV_AFTER); tail; tail = tail->next) 332 for (tail = current_buffer->overlays_after; tail; tail = tail->next)
333 { 333 {
334 XSETMISC (overlay, tail); 334 XSETMISC (overlay, tail);
335 335
diff --git a/src/fileio.c b/src/fileio.c
index 4fdc902a9a2..eba157ea042 100644
--- a/src/fileio.c
+++ b/src/fileio.c
@@ -3490,8 +3490,8 @@ variable `last-coding-system-used' to the coding system actually used. */)
3490 BSET (buf, read_only, Qnil); 3490 BSET (buf, read_only, Qnil);
3491 BSET (buf, filename, Qnil); 3491 BSET (buf, filename, Qnil);
3492 BSET (buf, undo_list, Qt); 3492 BSET (buf, undo_list, Qt);
3493 eassert (buffer_get_overlays (buf, OV_BEFORE) == NULL); 3493 eassert (buf->overlays_before == NULL);
3494 eassert (buffer_get_overlays (buf, OV_AFTER) == NULL); 3494 eassert (buf->overlays_after == NULL);
3495 3495
3496 set_buffer_internal (buf); 3496 set_buffer_internal (buf);
3497 Ferase_buffer (); 3497 Ferase_buffer ();
diff --git a/src/print.c b/src/print.c
index 0938dd6e9ae..23ad6c0a256 100644
--- a/src/print.c
+++ b/src/print.c
@@ -498,10 +498,10 @@ temp_output_buffer_setup (const char *bufname)
498 BSET (current_buffer, read_only, Qnil); 498 BSET (current_buffer, read_only, Qnil);
499 BSET (current_buffer, filename, Qnil); 499 BSET (current_buffer, filename, Qnil);
500 BSET (current_buffer, undo_list, Qt); 500 BSET (current_buffer, undo_list, Qt);
501 eassert (buffer_get_overlays (NULL, OV_BEFORE) == NULL); 501 eassert (current_buffer->overlays_before == NULL);
502 eassert (buffer_get_overlays (NULL, OV_AFTER) == NULL); 502 eassert (current_buffer->overlays_after == NULL);
503 BSET (current_buffer, enable_multibyte_characters, 503 BSET (current_buffer, enable_multibyte_characters,
504 BVAR (&buffer_defaults, enable_multibyte_characters)); 504 BVAR (&buffer_defaults, enable_multibyte_characters));
505 specbind (Qinhibit_read_only, Qt); 505 specbind (Qinhibit_read_only, Qt);
506 specbind (Qinhibit_modification_hooks, Qt); 506 specbind (Qinhibit_modification_hooks, Qt);
507 Ferase_buffer (); 507 Ferase_buffer ();
diff --git a/src/xdisp.c b/src/xdisp.c
index 58956842796..4cd95606041 100644
--- a/src/xdisp.c
+++ b/src/xdisp.c
@@ -5445,7 +5445,7 @@ load_overlay_strings (struct it *it, ptrdiff_t charpos)
5445 while (0) 5445 while (0)
5446 5446
5447 /* Process overlay before the overlay center. */ 5447 /* Process overlay before the overlay center. */
5448 for (ov = buffer_get_overlays (NULL, OV_BEFORE); ov; ov = ov->next) 5448 for (ov = current_buffer->overlays_before; ov; ov = ov->next)
5449 { 5449 {
5450 XSETMISC (overlay, ov); 5450 XSETMISC (overlay, ov);
5451 eassert (OVERLAYP (overlay)); 5451 eassert (OVERLAYP (overlay));
@@ -5485,7 +5485,7 @@ load_overlay_strings (struct it *it, ptrdiff_t charpos)
5485 } 5485 }
5486 5486
5487 /* Process overlays after the overlay center. */ 5487 /* Process overlays after the overlay center. */
5488 for (ov = buffer_get_overlays (NULL, OV_AFTER); ov; ov = ov->next) 5488 for (ov = current_buffer->overlays_after; ov; ov = ov->next)
5489 { 5489 {
5490 XSETMISC (overlay, ov); 5490 XSETMISC (overlay, ov);
5491 eassert (OVERLAYP (overlay)); 5491 eassert (OVERLAYP (overlay));