end-points to NEW_END. */
Lisp_Object
-extend_property_ranges (Lisp_Object list, Lisp_Object new_end)
+extend_property_ranges (Lisp_Object list, Lisp_Object old_end, Lisp_Object new_end)
{
Lisp_Object prev = Qnil, head = list;
ptrdiff_t max = XINT (new_end);
for (; CONSP (list); prev = list, list = XCDR (list))
{
- Lisp_Object item, beg, end;
+ Lisp_Object item, beg;
+ ptrdiff_t end;
item = XCAR (list);
beg = XCAR (item);
- end = XCAR (XCDR (item));
+ end = XINT (XCAR (XCDR (item)));
if (XINT (beg) >= max)
{
else
XSETCDR (prev, XCDR (list));
}
- else if (XINT (end) != max)
+ else if ((end == XINT (old_end) && end != max)
+ || end > max)
{
/* Either the end-point is past the end of the new string,
and we need to discard the properties past the new end,
or the caller is extending the property range, and we
- should update the end-point to reflect that. */
+ should update all end-points that are on the old end of
+ the range to reflect that. */
XSETCAR (XCDR (item), new_end);
}
}