]> git.eshelyaron.com Git - emacs.git/commitdiff
(fix_start_end_in_overlays): make overlays empty if they are backwards.
authorMasatake YAMATO <jet@gyve.org>
Sat, 10 Apr 2004 20:21:50 +0000 (20:21 +0000)
committerMasatake YAMATO <jet@gyve.org>
Sat, 10 Apr 2004 20:21:50 +0000 (20:21 +0000)
src/ChangeLog
src/buffer.c

index 0a1c04c115116fb90e562c9e7c4532f873691886..1b5144e5b56fb57c4ffe1f85961daa29190df853 100644 (file)
@@ -1,3 +1,8 @@
+2004-04-11  Masatake YAMATO  <jet@gyve.org>
+
+       * buffer.c (fix_start_end_in_overlays): make overlays 
+       empty if they are backwards.
+
 2004-04-07  Stefan Monnier  <monnier@iro.umontreal.ca>
 
        * doc.c (Fsnarf_documentation): Ignore new file name entries.
index 08031a0d72b0505d243de81015cd8b3328c0a6a0..455b03efec2e1ea093c05f12b58ac75432077368 100644 (file)
@@ -3290,8 +3290,7 @@ adjust_overlays_for_delete (pos, length)
    endpoint in this range will need to be unlinked from the overlay
    list and reinserted in its proper place.
    Such an overlay might even have negative size at this point.
-   If so, we'll reverse the endpoints.  Can you think of anything
-   better to do in this situation?  */
+   If so, we'll make the overlay empty. */
 void
 fix_start_end_in_overlays (start, end)
      register int start, end;
@@ -3318,23 +3317,24 @@ fix_start_end_in_overlays (start, end)
   for (parent = NULL, tail = current_buffer->overlays_before; tail;)
     {
       XSETMISC (overlay, tail);
+
       endpos = OVERLAY_POSITION (OVERLAY_END (overlay));
+      startpos = OVERLAY_POSITION (OVERLAY_START (overlay));
+
+      /* If the overlay is backwards, make it empty.  */
+      if (endpos < startpos)
+       {
+         startpos = endpos;
+         Fset_marker (OVERLAY_START (overlay), make_number (startpos),
+                      Qnil);
+       }
+
       if (endpos < start)
        break;
-      startpos = OVERLAY_POSITION (OVERLAY_START (overlay));
+      
       if (endpos < end
          || (startpos >= start && startpos < end))
        {
-         /* If the overlay is backwards, fix that now.  */
-         if (startpos > endpos)
-           {
-             int tem;
-             Fset_marker (OVERLAY_START (overlay), make_number (endpos),
-                          Qnil);
-             Fset_marker (OVERLAY_END (overlay), make_number (startpos),
-                          Qnil);
-             tem = startpos; startpos = endpos; endpos = tem;
-           }
          /* Add it to the end of the wrong list.  Later on,
             recenter_overlay_lists will move it to the right place.  */
          if (endpos < current_buffer->overlay_center)
@@ -3365,22 +3365,24 @@ fix_start_end_in_overlays (start, end)
   for (parent = NULL, tail = current_buffer->overlays_after; tail;)
     {
       XSETMISC (overlay, tail);
+
       startpos = OVERLAY_POSITION (OVERLAY_START (overlay));
+      endpos = OVERLAY_POSITION (OVERLAY_END (overlay));
+
+      /* If the overlay is backwards, make it empty.  */
+      if (endpos < startpos)
+       {
+         startpos = endpos;
+         Fset_marker (OVERLAY_START (overlay), make_number (startpos),
+                      Qnil);     
+       }
+
       if (startpos >= end)
        break;
-      endpos = OVERLAY_POSITION (OVERLAY_END (overlay));
+
       if (startpos >= start
          || (endpos >= start && endpos < end))
        {
-         if (startpos > endpos)
-           {
-             int tem;
-             Fset_marker (OVERLAY_START (overlay), make_number (endpos),
-                          Qnil);
-             Fset_marker (OVERLAY_END (overlay), make_number (startpos),
-                          Qnil);
-             tem = startpos; startpos = endpos; endpos = tem;
-           }
          if (endpos < current_buffer->overlay_center)
            {
              if (!afterp)