aboutsummaryrefslogtreecommitdiffstats
path: root/src/buffer.c
diff options
context:
space:
mode:
authorDmitry Antipov2012-08-08 18:47:11 +0400
committerDmitry Antipov2012-08-08 18:47:11 +0400
commit4cb3e6b38ac6c50279474db0e87a52253af52f59 (patch)
tree3a4af4b3aa9291bea206fd76f729a2bda4c93c58 /src/buffer.c
parentd9f9b465414c4c345574d9f179808380751c070e (diff)
downloademacs-4cb3e6b38ac6c50279474db0e87a52253af52f59.tar.gz
emacs-4cb3e6b38ac6c50279474db0e87a52253af52f59.zip
Inline functions to examine and change buffer overlays.
* buffer.c (unchain_both): New function. * buffer.h (buffer_get_overlays, buffer_set_overlays): (buffer_has_overlays): New function. (enum overlay_type): New enum. * alloc.c, buffer.c, editfns.c, fileio.c, indent.c: * insdel.c, intervals.c, print.c, xdisp.c: Adjust users.
Diffstat (limited to 'src/buffer.c')
-rw-r--r--src/buffer.c132
1 files changed, 73 insertions, 59 deletions
diff --git a/src/buffer.c b/src/buffer.c
index fab7330b195..6b68f34bb15 100644
--- a/src/buffer.c
+++ b/src/buffer.c
@@ -474,8 +474,10 @@ 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 to->overlays_before = copy_overlays (to, from->overlays_before); 477 buffer_set_overlays
478 to->overlays_after = copy_overlays (to, from->overlays_after); 478 (to, copy_overlays (to, buffer_get_overlays (from, OV_BEFORE)), OV_BEFORE);
479 buffer_set_overlays
480 (to, copy_overlays (to, buffer_get_overlays (from, OV_AFTER)), OV_AFTER);
479 481
480 /* Get (a copy of) the alist of Lisp-level local variables of FROM 482 /* Get (a copy of) the alist of Lisp-level local variables of FROM
481 and install that in TO. */ 483 and install that in TO. */
@@ -674,21 +676,22 @@ delete_all_overlays (struct buffer *b)
674{ 676{
675 struct Lisp_Overlay *ov, *next; 677 struct Lisp_Overlay *ov, *next;
676 678
677 for (ov = b->overlays_before; ov; ov = next) 679 for (ov = buffer_get_overlays (b, OV_BEFORE); ov; ov = next)
678 { 680 {
679 drop_overlay (b, ov); 681 drop_overlay (b, ov);
680 next = ov->next; 682 next = ov->next;
681 ov->next = NULL; 683 ov->next = NULL;
682 } 684 }
683 685
684 for (ov = b->overlays_after; ov; ov = next) 686 for (ov = buffer_get_overlays (b, OV_AFTER); ov; ov = next)
685 { 687 {
686 drop_overlay (b, ov); 688 drop_overlay (b, ov);
687 next = ov->next; 689 next = ov->next;
688 ov->next = NULL; 690 ov->next = NULL;
689 } 691 }
690 692
691 b->overlays_before = b->overlays_after = NULL; 693 buffer_set_overlays (b, NULL, OV_BEFORE);
694 buffer_set_overlays (b, NULL, OV_AFTER);
692} 695}
693 696
694/* Reinitialize everything about a buffer except its name and contents 697/* Reinitialize everything about a buffer except its name and contents
@@ -716,8 +719,8 @@ reset_buffer (register struct buffer *b)
716 b->auto_save_failure_time = 0; 719 b->auto_save_failure_time = 0;
717 BVAR (b, auto_save_file_name) = Qnil; 720 BVAR (b, auto_save_file_name) = Qnil;
718 BVAR (b, read_only) = Qnil; 721 BVAR (b, read_only) = Qnil;
719 b->overlays_before = NULL; 722 buffer_set_overlays (b, NULL, OV_BEFORE);
720 b->overlays_after = NULL; 723 buffer_set_overlays (b, NULL, OV_AFTER);
721 b->overlay_center = BEG; 724 b->overlay_center = BEG;
722 BVAR (b, mark_active) = Qnil; 725 BVAR (b, mark_active) = Qnil;
723 BVAR (b, point_before_scroll) = Qnil; 726 BVAR (b, point_before_scroll) = Qnil;
@@ -2602,7 +2605,7 @@ overlays_at (EMACS_INT pos, int extend, Lisp_Object **vec_ptr,
2602 ptrdiff_t prev = BEGV; 2605 ptrdiff_t prev = BEGV;
2603 int inhibit_storing = 0; 2606 int inhibit_storing = 0;
2604 2607
2605 for (tail = current_buffer->overlays_before; tail; tail = tail->next) 2608 for (tail = buffer_get_overlays (NULL, OV_BEFORE); tail; tail = tail->next)
2606 { 2609 {
2607 ptrdiff_t startpos, endpos; 2610 ptrdiff_t startpos, endpos;
2608 2611
@@ -2650,7 +2653,7 @@ overlays_at (EMACS_INT pos, int extend, Lisp_Object **vec_ptr,
2650 next = startpos; 2653 next = startpos;
2651 } 2654 }
2652 2655
2653 for (tail = current_buffer->overlays_after; tail; tail = tail->next) 2656 for (tail = buffer_get_overlays (NULL, OV_AFTER); tail; tail = tail->next)
2654 { 2657 {
2655 ptrdiff_t startpos, endpos; 2658 ptrdiff_t startpos, endpos;
2656 2659
@@ -2737,7 +2740,7 @@ overlays_in (EMACS_INT beg, EMACS_INT end, int extend,
2737 int inhibit_storing = 0; 2740 int inhibit_storing = 0;
2738 int end_is_Z = end == Z; 2741 int end_is_Z = end == Z;
2739 2742
2740 for (tail = current_buffer->overlays_before; tail; tail = tail->next) 2743 for (tail = buffer_get_overlays (NULL, OV_BEFORE); tail; tail = tail->next)
2741 { 2744 {
2742 ptrdiff_t startpos, endpos; 2745 ptrdiff_t startpos, endpos;
2743 2746
@@ -2784,7 +2787,7 @@ overlays_in (EMACS_INT beg, EMACS_INT end, int extend,
2784 next = startpos; 2787 next = startpos;
2785 } 2788 }
2786 2789
2787 for (tail = current_buffer->overlays_after; tail; tail = tail->next) 2790 for (tail = buffer_get_overlays (NULL, OV_AFTER); tail; tail = tail->next)
2788 { 2791 {
2789 ptrdiff_t startpos, endpos; 2792 ptrdiff_t startpos, endpos;
2790 2793
@@ -2874,7 +2877,7 @@ overlay_touches_p (ptrdiff_t pos)
2874 Lisp_Object overlay; 2877 Lisp_Object overlay;
2875 struct Lisp_Overlay *tail; 2878 struct Lisp_Overlay *tail;
2876 2879
2877 for (tail = current_buffer->overlays_before; tail; tail = tail->next) 2880 for (tail = buffer_get_overlays (NULL, OV_BEFORE); tail; tail = tail->next)
2878 { 2881 {
2879 ptrdiff_t endpos; 2882 ptrdiff_t endpos;
2880 2883
@@ -2888,7 +2891,7 @@ overlay_touches_p (ptrdiff_t pos)
2888 return 1; 2891 return 1;
2889 } 2892 }
2890 2893
2891 for (tail = current_buffer->overlays_after; tail; tail = tail->next) 2894 for (tail = buffer_get_overlays (NULL, OV_AFTER); tail; tail = tail->next)
2892 { 2895 {
2893 ptrdiff_t startpos; 2896 ptrdiff_t startpos;
2894 2897
@@ -3089,7 +3092,7 @@ overlay_strings (ptrdiff_t pos, struct window *w, unsigned char **pstr)
3089 3092
3090 overlay_heads.used = overlay_heads.bytes = 0; 3093 overlay_heads.used = overlay_heads.bytes = 0;
3091 overlay_tails.used = overlay_tails.bytes = 0; 3094 overlay_tails.used = overlay_tails.bytes = 0;
3092 for (ov = current_buffer->overlays_before; ov; ov = ov->next) 3095 for (ov = buffer_get_overlays (NULL, OV_BEFORE); ov; ov = ov->next)
3093 { 3096 {
3094 XSETMISC (overlay, ov); 3097 XSETMISC (overlay, ov);
3095 eassert (OVERLAYP (overlay)); 3098 eassert (OVERLAYP (overlay));
@@ -3117,7 +3120,7 @@ overlay_strings (ptrdiff_t pos, struct window *w, unsigned char **pstr)
3117 Foverlay_get (overlay, Qpriority), 3120 Foverlay_get (overlay, Qpriority),
3118 endpos - startpos); 3121 endpos - startpos);
3119 } 3122 }
3120 for (ov = current_buffer->overlays_after; ov; ov = ov->next) 3123 for (ov = buffer_get_overlays (NULL, OV_AFTER); ov; ov = ov->next)
3121 { 3124 {
3122 XSETMISC (overlay, ov); 3125 XSETMISC (overlay, ov);
3123 eassert (OVERLAYP (overlay)); 3126 eassert (OVERLAYP (overlay));
@@ -3215,7 +3218,7 @@ recenter_overlay_lists (struct buffer *buf, ptrdiff_t pos)
3215 But we use it for symmetry and in case that should cease to be true 3218 But we use it for symmetry and in case that should cease to be true
3216 with some future change. */ 3219 with some future change. */
3217 prev = NULL; 3220 prev = NULL;
3218 for (tail = buf->overlays_before; tail; prev = tail, tail = next) 3221 for (tail = buffer_get_overlays (buf, OV_BEFORE); tail; prev = tail, tail = next)
3219 { 3222 {
3220 next = tail->next; 3223 next = tail->next;
3221 XSETMISC (overlay, tail); 3224 XSETMISC (overlay, tail);
@@ -3234,11 +3237,11 @@ recenter_overlay_lists (struct buffer *buf, ptrdiff_t pos)
3234 if (prev) 3237 if (prev)
3235 prev->next = next; 3238 prev->next = next;
3236 else 3239 else
3237 buf->overlays_before = next; 3240 buffer_set_overlays (buf, next, OV_BEFORE);
3238 3241
3239 /* Search thru overlays_after for where to put it. */ 3242 /* Search thru overlays_after for where to put it. */
3240 other_prev = NULL; 3243 other_prev = NULL;
3241 for (other = buf->overlays_after; other; 3244 for (other = buffer_get_overlays (buf, OV_AFTER); other;
3242 other_prev = other, other = other->next) 3245 other_prev = other, other = other->next)
3243 { 3246 {
3244 Lisp_Object otherbeg, otheroverlay; 3247 Lisp_Object otherbeg, otheroverlay;
@@ -3256,7 +3259,7 @@ recenter_overlay_lists (struct buffer *buf, ptrdiff_t pos)
3256 if (other_prev) 3259 if (other_prev)
3257 other_prev->next = tail; 3260 other_prev->next = tail;
3258 else 3261 else
3259 buf->overlays_after = tail; 3262 buffer_set_overlays (buf, tail, OV_AFTER);
3260 tail = prev; 3263 tail = prev;
3261 } 3264 }
3262 else 3265 else
@@ -3268,7 +3271,7 @@ recenter_overlay_lists (struct buffer *buf, ptrdiff_t pos)
3268 3271
3269 /* See if anything in overlays_after should be in overlays_before. */ 3272 /* See if anything in overlays_after should be in overlays_before. */
3270 prev = NULL; 3273 prev = NULL;
3271 for (tail = buf->overlays_after; tail; prev = tail, tail = next) 3274 for (tail = buffer_get_overlays (buf, OV_AFTER); tail; prev = tail, tail = next)
3272 { 3275 {
3273 next = tail->next; 3276 next = tail->next;
3274 XSETMISC (overlay, tail); 3277 XSETMISC (overlay, tail);
@@ -3292,11 +3295,11 @@ recenter_overlay_lists (struct buffer *buf, ptrdiff_t pos)
3292 if (prev) 3295 if (prev)
3293 prev->next = next; 3296 prev->next = next;
3294 else 3297 else
3295 buf->overlays_after = next; 3298 buffer_set_overlays (buf, next, OV_AFTER);
3296 3299
3297 /* Search thru overlays_before for where to put it. */ 3300 /* Search thru overlays_before for where to put it. */
3298 other_prev = NULL; 3301 other_prev = NULL;
3299 for (other = buf->overlays_before; other; 3302 for (other = buffer_get_overlays (buf, OV_BEFORE); other;
3300 other_prev = other, other = other->next) 3303 other_prev = other, other = other->next)
3301 { 3304 {
3302 Lisp_Object otherend, otheroverlay; 3305 Lisp_Object otherend, otheroverlay;
@@ -3314,7 +3317,7 @@ recenter_overlay_lists (struct buffer *buf, ptrdiff_t pos)
3314 if (other_prev) 3317 if (other_prev)
3315 other_prev->next = tail; 3318 other_prev->next = tail;
3316 else 3319 else
3317 buf->overlays_before = tail; 3320 buffer_set_overlays (buf, tail, OV_BEFORE);
3318 tail = prev; 3321 tail = prev;
3319 } 3322 }
3320 } 3323 }
@@ -3367,7 +3370,7 @@ fix_start_end_in_overlays (register ptrdiff_t start, register ptrdiff_t end)
3367 assigned. */ 3370 assigned. */
3368 struct Lisp_Overlay *beforep = NULL, *afterp = NULL; 3371 struct Lisp_Overlay *beforep = NULL, *afterp = NULL;
3369 /* 'Parent', likewise, indicates a cons cell or 3372 /* 'Parent', likewise, indicates a cons cell or
3370 current_buffer->overlays_before or overlays_after, depending 3373 before or after overlays list, depending
3371 which loop we're in. */ 3374 which loop we're in. */
3372 struct Lisp_Overlay *tail, *parent; 3375 struct Lisp_Overlay *tail, *parent;
3373 ptrdiff_t startpos, endpos; 3376 ptrdiff_t startpos, endpos;
@@ -3379,7 +3382,7 @@ fix_start_end_in_overlays (register ptrdiff_t start, register ptrdiff_t end)
3379 (after_list) if it is, is still uninitialized. So it's not a bug 3382 (after_list) if it is, is still uninitialized. So it's not a bug
3380 that before_list isn't initialized, although it may look 3383 that before_list isn't initialized, although it may look
3381 strange. */ 3384 strange. */
3382 for (parent = NULL, tail = current_buffer->overlays_before; tail;) 3385 for (parent = NULL, tail = buffer_get_overlays (NULL, OV_BEFORE); tail;)
3383 { 3386 {
3384 XSETMISC (overlay, tail); 3387 XSETMISC (overlay, tail);
3385 3388
@@ -3419,7 +3422,7 @@ fix_start_end_in_overlays (register ptrdiff_t start, register ptrdiff_t end)
3419 beforep = tail; 3422 beforep = tail;
3420 } 3423 }
3421 if (!parent) 3424 if (!parent)
3422 current_buffer->overlays_before = tail->next; 3425 buffer_set_overlays (NULL, tail->next, OV_BEFORE);
3423 else 3426 else
3424 parent->next = tail->next; 3427 parent->next = tail->next;
3425 tail = tail->next; 3428 tail = tail->next;
@@ -3427,7 +3430,7 @@ fix_start_end_in_overlays (register ptrdiff_t start, register ptrdiff_t end)
3427 else 3430 else
3428 parent = tail, tail = parent->next; 3431 parent = tail, tail = parent->next;
3429 } 3432 }
3430 for (parent = NULL, tail = current_buffer->overlays_after; tail;) 3433 for (parent = NULL, tail = buffer_get_overlays (NULL, OV_AFTER); tail;)
3431 { 3434 {
3432 XSETMISC (overlay, tail); 3435 XSETMISC (overlay, tail);
3433 3436
@@ -3465,7 +3468,7 @@ fix_start_end_in_overlays (register ptrdiff_t start, register ptrdiff_t end)
3465 beforep = tail; 3468 beforep = tail;
3466 } 3469 }
3467 if (!parent) 3470 if (!parent)
3468 current_buffer->overlays_after = tail->next; 3471 buffer_set_overlays (NULL, tail->next, OV_AFTER);
3469 else 3472 else
3470 parent->next = tail->next; 3473 parent->next = tail->next;
3471 tail = tail->next; 3474 tail = tail->next;
@@ -3478,15 +3481,15 @@ fix_start_end_in_overlays (register ptrdiff_t start, register ptrdiff_t end)
3478 and let the recenter function make it sane again. */ 3481 and let the recenter function make it sane again. */
3479 if (beforep) 3482 if (beforep)
3480 { 3483 {
3481 beforep->next = current_buffer->overlays_before; 3484 beforep->next = buffer_get_overlays (NULL, OV_BEFORE);
3482 current_buffer->overlays_before = before_list; 3485 buffer_set_overlays (NULL, before_list, OV_BEFORE);
3483 } 3486 }
3484 recenter_overlay_lists (current_buffer, current_buffer->overlay_center); 3487 recenter_overlay_lists (current_buffer, current_buffer->overlay_center);
3485 3488
3486 if (afterp) 3489 if (afterp)
3487 { 3490 {
3488 afterp->next = current_buffer->overlays_after; 3491 afterp->next = buffer_get_overlays (NULL, OV_AFTER);
3489 current_buffer->overlays_after = after_list; 3492 buffer_set_overlays (NULL, after_list, OV_AFTER);
3490 } 3493 }
3491 recenter_overlay_lists (current_buffer, current_buffer->overlay_center); 3494 recenter_overlay_lists (current_buffer, current_buffer->overlay_center);
3492} 3495}
@@ -3507,7 +3510,8 @@ void
3507fix_overlays_before (struct buffer *bp, ptrdiff_t prev, ptrdiff_t pos) 3510fix_overlays_before (struct buffer *bp, ptrdiff_t prev, ptrdiff_t pos)
3508{ 3511{
3509 /* If parent is nil, replace overlays_before; otherwise, parent->next. */ 3512 /* If parent is nil, replace overlays_before; otherwise, parent->next. */
3510 struct Lisp_Overlay *tail = bp->overlays_before, *parent = NULL, *right_pair; 3513 struct Lisp_Overlay *tail = buffer_get_overlays (bp, OV_BEFORE);
3514 struct Lisp_Overlay *parent = NULL, *right_pair;
3511 Lisp_Object tem; 3515 Lisp_Object tem;
3512 ptrdiff_t end IF_LINT (= 0); 3516 ptrdiff_t end IF_LINT (= 0);
3513 3517
@@ -3562,8 +3566,8 @@ fix_overlays_before (struct buffer *bp, ptrdiff_t prev, ptrdiff_t pos)
3562 and link it into the right place. */ 3566 and link it into the right place. */
3563 if (!right_pair) 3567 if (!right_pair)
3564 { 3568 {
3565 found->next = bp->overlays_before; 3569 found->next = buffer_get_overlays (bp, OV_BEFORE);
3566 bp->overlays_before = found; 3570 buffer_set_overlays (bp, found, OV_BEFORE);
3567 } 3571 }
3568 else 3572 else
3569 { 3573 {
@@ -3639,15 +3643,15 @@ for the rear of the overlay advance when text is inserted there
3639 end = OVERLAY_END (overlay); 3643 end = OVERLAY_END (overlay);
3640 if (OVERLAY_POSITION (end) < b->overlay_center) 3644 if (OVERLAY_POSITION (end) < b->overlay_center)
3641 { 3645 {
3642 if (b->overlays_after) 3646 if (buffer_get_overlays (b, OV_AFTER))
3643 XOVERLAY (overlay)->next = b->overlays_after; 3647 XOVERLAY (overlay)->next = buffer_get_overlays (b, OV_AFTER);
3644 b->overlays_after = XOVERLAY (overlay); 3648 buffer_set_overlays (b, XOVERLAY (overlay), OV_AFTER);
3645 } 3649 }
3646 else 3650 else
3647 { 3651 {
3648 if (b->overlays_before) 3652 if (buffer_get_overlays (b, OV_BEFORE))
3649 XOVERLAY (overlay)->next = b->overlays_before; 3653 XOVERLAY (overlay)->next = buffer_get_overlays (b, OV_BEFORE);
3650 b->overlays_before = XOVERLAY (overlay); 3654 buffer_set_overlays (b, XOVERLAY (overlay), OV_BEFORE);
3651 } 3655 }
3652 3656
3653 /* 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. */
@@ -3705,6 +3709,19 @@ unchain_overlay (struct Lisp_Overlay *list, struct Lisp_Overlay *overlay)
3705 return list; 3709 return list;
3706} 3710}
3707 3711
3712/* Remove OVERLAY from both overlay lists of B. */
3713
3714static void
3715unchain_both (struct buffer *b, Lisp_Object overlay)
3716{
3717 struct Lisp_Overlay *ov = XOVERLAY (overlay);
3718
3719 buffer_set_overlays
3720 (b, unchain_overlay (buffer_get_overlays (b, OV_BEFORE), ov), OV_BEFORE);
3721 buffer_set_overlays
3722 (b, unchain_overlay (buffer_get_overlays (b, OV_AFTER), ov), OV_AFTER);
3723}
3724
3708DEFUN ("move-overlay", Fmove_overlay, Smove_overlay, 3, 4, 0, 3725DEFUN ("move-overlay", Fmove_overlay, Smove_overlay, 3, 4, 0,
3709 doc: /* Set the endpoints of OVERLAY to BEG and END in BUFFER. 3726 doc: /* Set the endpoints of OVERLAY to BEG and END in BUFFER.
3710If BUFFER is omitted, leave OVERLAY in the same buffer it inhabits now. 3727If BUFFER is omitted, leave OVERLAY in the same buffer it inhabits now.
@@ -3755,10 +3772,7 @@ buffer. */)
3755 o_beg = OVERLAY_POSITION (OVERLAY_START (overlay)); 3772 o_beg = OVERLAY_POSITION (OVERLAY_START (overlay));
3756 o_end = OVERLAY_POSITION (OVERLAY_END (overlay)); 3773 o_end = OVERLAY_POSITION (OVERLAY_END (overlay));
3757 3774
3758 ob->overlays_before = 3775 unchain_both (ob, overlay);
3759 unchain_overlay (ob->overlays_before, XOVERLAY (overlay));
3760 ob->overlays_after =
3761 unchain_overlay (ob->overlays_after, XOVERLAY (overlay));
3762 eassert (XOVERLAY (overlay)->next == NULL); 3776 eassert (XOVERLAY (overlay)->next == NULL);
3763 } 3777 }
3764 3778
@@ -3799,13 +3813,13 @@ buffer. */)
3799 wrong list. */ 3813 wrong list. */
3800 if (n_end < b->overlay_center) 3814 if (n_end < b->overlay_center)
3801 { 3815 {
3802 XOVERLAY (overlay)->next = b->overlays_after; 3816 XOVERLAY (overlay)->next = buffer_get_overlays (b, OV_AFTER);
3803 b->overlays_after = XOVERLAY (overlay); 3817 buffer_set_overlays (b, XOVERLAY (overlay), OV_AFTER);
3804 } 3818 }
3805 else 3819 else
3806 { 3820 {
3807 XOVERLAY (overlay)->next = b->overlays_before; 3821 XOVERLAY (overlay)->next = buffer_get_overlays (b, OV_BEFORE);
3808 b->overlays_before = XOVERLAY (overlay); 3822 buffer_set_overlays (b, XOVERLAY (overlay), OV_BEFORE);
3809 } 3823 }
3810 3824
3811 /* This puts it in the right list, and in the right order. */ 3825 /* This puts it in the right list, and in the right order. */
@@ -3831,10 +3845,7 @@ DEFUN ("delete-overlay", Fdelete_overlay, Sdelete_overlay, 1, 1, 0,
3831 b = XBUFFER (buffer); 3845 b = XBUFFER (buffer);
3832 specbind (Qinhibit_quit, Qt); 3846 specbind (Qinhibit_quit, Qt);
3833 3847
3834 b->overlays_before 3848 unchain_both (b, overlay);
3835 = unchain_overlay (b->overlays_before, XOVERLAY (overlay));
3836 b->overlays_after
3837 = unchain_overlay (b->overlays_after, XOVERLAY (overlay));
3838 eassert (XOVERLAY (overlay)->next == NULL); 3849 eassert (XOVERLAY (overlay)->next == NULL);
3839 3850
3840 drop_overlay (b, XOVERLAY (overlay)); 3851 drop_overlay (b, XOVERLAY (overlay));
@@ -4033,16 +4044,19 @@ However, the overlays you get are the real objects that the buffer uses. */)
4033{ 4044{
4034 struct Lisp_Overlay *ol; 4045 struct Lisp_Overlay *ol;
4035 Lisp_Object before = Qnil, after = Qnil, tmp; 4046 Lisp_Object before = Qnil, after = Qnil, tmp;
4036 for (ol = current_buffer->overlays_before; ol; ol = ol->next) 4047
4048 for (ol = buffer_get_overlays (NULL, OV_BEFORE); ol; ol = ol->next)
4037 { 4049 {
4038 XSETMISC (tmp, ol); 4050 XSETMISC (tmp, ol);
4039 before = Fcons (tmp, before); 4051 before = Fcons (tmp, before);
4040 } 4052 }
4041 for (ol = current_buffer->overlays_after; ol; ol = ol->next) 4053
4054 for (ol = buffer_get_overlays (NULL, OV_AFTER); ol; ol = ol->next)
4042 { 4055 {
4043 XSETMISC (tmp, ol); 4056 XSETMISC (tmp, ol);
4044 after = Fcons (tmp, after); 4057 after = Fcons (tmp, after);
4045 } 4058 }
4059
4046 return Fcons (Fnreverse (before), Fnreverse (after)); 4060 return Fcons (Fnreverse (before), Fnreverse (after));
4047} 4061}
4048 4062
@@ -4182,7 +4196,7 @@ report_overlay_modification (Lisp_Object start, Lisp_Object end, int after,
4182 /* We are being called before a change. 4196 /* We are being called before a change.
4183 Scan the overlays to find the functions to call. */ 4197 Scan the overlays to find the functions to call. */
4184 last_overlay_modification_hooks_used = 0; 4198 last_overlay_modification_hooks_used = 0;
4185 for (tail = current_buffer->overlays_before; tail; tail = tail->next) 4199 for (tail = buffer_get_overlays (NULL, OV_BEFORE); tail; tail = tail->next)
4186 { 4200 {
4187 ptrdiff_t startpos, endpos; 4201 ptrdiff_t startpos, endpos;
4188 Lisp_Object ostart, oend; 4202 Lisp_Object ostart, oend;
@@ -4219,7 +4233,7 @@ report_overlay_modification (Lisp_Object start, Lisp_Object end, int after,
4219 } 4233 }
4220 } 4234 }
4221 4235
4222 for (tail = current_buffer->overlays_after; tail; tail = tail->next) 4236 for (tail = buffer_get_overlays (NULL, OV_AFTER); tail; tail = tail->next)
4223 { 4237 {
4224 ptrdiff_t startpos, endpos; 4238 ptrdiff_t startpos, endpos;
4225 Lisp_Object ostart, oend; 4239 Lisp_Object ostart, oend;
@@ -4311,7 +4325,7 @@ evaporate_overlays (ptrdiff_t pos)
4311 4325
4312 hit_list = Qnil; 4326 hit_list = Qnil;
4313 if (pos <= current_buffer->overlay_center) 4327 if (pos <= current_buffer->overlay_center)
4314 for (tail = current_buffer->overlays_before; tail; tail = tail->next) 4328 for (tail = buffer_get_overlays (NULL, OV_BEFORE); tail; tail = tail->next)
4315 { 4329 {
4316 ptrdiff_t endpos; 4330 ptrdiff_t endpos;
4317 XSETMISC (overlay, tail); 4331 XSETMISC (overlay, tail);
@@ -4323,7 +4337,7 @@ evaporate_overlays (ptrdiff_t pos)
4323 hit_list = Fcons (overlay, hit_list); 4337 hit_list = Fcons (overlay, hit_list);
4324 } 4338 }
4325 else 4339 else
4326 for (tail = current_buffer->overlays_after; tail; tail = tail->next) 4340 for (tail = buffer_get_overlays (NULL, OV_AFTER); tail; tail = tail->next)
4327 { 4341 {
4328 ptrdiff_t startpos; 4342 ptrdiff_t startpos;
4329 XSETMISC (overlay, tail); 4343 XSETMISC (overlay, tail);