Commit 60cfd278 authored by Andreas Schwab's avatar Andreas Schwab Committed by Paul Eggert
Browse files

Fix bug that created negative-length intervals.

* intervals.c (merge_interval_right, merge_interval_left):
Do not zero out this interval if it is absorbed by its children,
as this interval's total length doesn't change in that case.  See
<http://lists.gnu.org/archive/html/emacs-devel/2012-07/msg00403.html>.
parent d617c457
2012-07-18 Andreas Schwab <schwab@linux-m68k.org>
Fix bug that created negative-length intervals.
* intervals.c (merge_interval_right, merge_interval_left):
Do not zero out this interval if it is absorbed by its children,
as this interval's total length doesn't change in that case. See
<http://lists.gnu.org/archive/html/emacs-devel/2012-07/msg00403.html>.
2012-07-18 Paul Eggert <eggert@cs.ucla.edu>
* alloc.c (Fmake_bool_vector): Fix off-by-8 bug
......
......@@ -1391,10 +1391,6 @@ merge_interval_right (register INTERVAL i)
register ptrdiff_t absorb = LENGTH (i);
register INTERVAL successor;
/* Zero out this interval. */
i->total_length -= absorb;
CHECK_TOTAL_LENGTH (i);
/* Find the succeeding interval. */
if (! NULL_RIGHT_CHILD (i)) /* It's below us. Add absorb
as we descend. */
......@@ -1413,6 +1409,10 @@ merge_interval_right (register INTERVAL i)
return successor;
}
/* Zero out this interval. */
i->total_length -= absorb;
CHECK_TOTAL_LENGTH (i);
successor = i;
while (! NULL_PARENT (successor)) /* It's above us. Subtract as
we ascend. */
......@@ -1447,10 +1447,6 @@ merge_interval_left (register INTERVAL i)
register ptrdiff_t absorb = LENGTH (i);
register INTERVAL predecessor;
/* Zero out this interval. */
i->total_length -= absorb;
CHECK_TOTAL_LENGTH (i);
/* Find the preceding interval. */
if (! NULL_LEFT_CHILD (i)) /* It's below us. Go down,
adding ABSORB as we go. */
......@@ -1469,9 +1465,13 @@ merge_interval_left (register INTERVAL i)
return predecessor;
}
/* Zero out this interval. */
i->total_length -= absorb;
CHECK_TOTAL_LENGTH (i);
predecessor = i;
while (! NULL_PARENT (predecessor)) /* It's above us. Go up,
subtracting ABSORB. */
subtracting ABSORB. */
{
if (AM_RIGHT_CHILD (predecessor))
{
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment