From: Eli Zaretskii Date: Wed, 21 Sep 2011 08:13:18 +0000 (-0400) Subject: Fix assertion failure when displaying stretch glyphs under linum-mode. X-Git-Tag: emacs-pretest-24.0.90~59 X-Git-Url: http://git.eshelyaron.com/gitweb/?a=commitdiff_plain;h=3341db6299a2bb63a641210d72f73e93e2d1542e;p=emacs.git Fix assertion failure when displaying stretch glyphs under linum-mode. src/xdisp.c (pop_it): Allow it->object that is a cons cell to pass the xassert test. src/dispextern.h (struct it): Update the comment documenting what can it->OBJECT be. --- diff --git a/src/ChangeLog b/src/ChangeLog index 17b53216e83..dff41f1dbbf 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,3 +1,11 @@ +2011-09-21 Eli Zaretskii + + * xdisp.c (pop_it): Allow it->object that is a cons cell to pass + the xassert test. + + * dispextern.h (struct it): Update the comment documenting what + can it->OBJECT be. + 2011-09-20 Eli Zaretskii * xdisp.c (set_cursor_from_row): If the row ends in a newline from diff --git a/src/dispextern.h b/src/dispextern.h index 65284121588..3c157371ef3 100644 --- a/src/dispextern.h +++ b/src/dispextern.h @@ -2398,9 +2398,19 @@ struct it Lisp_Object font_height; /* Object and position where the current display element came from. - Object can be a Lisp string in case the current display element - comes from an overlay string, or it is buffer. It may also be nil - during mode-line update. Position is a position in object. */ + Object is normally the buffer which is being rendered, but it can + also be a Lisp string in case the current display element comes + from an overlay string or from a display string (before- or + after-string). It may also be nil when a C string is being + rendered, e.g., during mode-line or header-line update. It can + also be a cons cell of the form `(space ...)', when we produce a + stretch glyph from a `display' specification. Finally, it can be + a zero-valued Lisp integer, but only temporarily, when we are + producing special glyphs for display purposes, like truncation + and continuation glyphs, or blanks that extend each line to the + edge of the window on a TTY. + + Position is the current iterator position in object. */ Lisp_Object object; struct text_pos position; diff --git a/src/xdisp.c b/src/xdisp.c index 3505d18d502..0d870671c69 100644 --- a/src/xdisp.c +++ b/src/xdisp.c @@ -5459,7 +5459,8 @@ pop_it (struct it *it) && IT_BYTEPOS (*it) == it->bidi_it.bytepos) || (STRINGP (it->object) && IT_STRING_CHARPOS (*it) == it->bidi_it.charpos - && IT_STRING_BYTEPOS (*it) == it->bidi_it.bytepos)); + && IT_STRING_BYTEPOS (*it) == it->bidi_it.bytepos) + || (CONSP (it->object) && it->method == GET_FROM_STRETCH)); } }