diff src/xdisp.c @ 107599:23f8a579b56e

Retrospective commit from 2009-10-24. Continue working on set_cursor_from_row. Cleanup of resolved_level and bidi_type members of struct glyph. xdisp.c (set_cursor_from_row): Fix off-by-one error when skipping over non-character glyphs at end of a reversed row. dispextern.h (struct glyph): The `resolved_level' member needs only 5 bits, not 6. The `bidi_type' member needs only 3 bits. (bidi_type_t): Rearrange so that types that can appear in the resolved type are at the beginning and have values less than 8. bidi.c: Include setjmp.h.
author Eli Zaretskii <eliz@gnu.org>
date Fri, 01 Jan 2010 06:45:36 -0500
parents 4bad2c6338cc
children e47593843838
line wrap: on
line diff
--- a/src/xdisp.c	Fri Jan 01 06:39:56 2010 -0500
+++ b/src/xdisp.c	Fri Jan 01 06:45:36 2010 -0500
@@ -12520,8 +12520,8 @@
 	    x += g->pixel_width;
 	  cursor_x = x;
 	  while (end < glyph
-		 && INTEGERP (end->object)
-		 && end->charpos <= 0)
+		 && INTEGERP ((end + 1)->object)
+		 && (end + 1)->charpos <= 0)
 	    ++end;
 	  glyph_before = glyph + 1;
 	  glyph_after = end;
@@ -20926,6 +20926,8 @@
       if (it->bidi_p)
 	{
 	  glyph->resolved_level = it->bidi_it.resolved_level;
+	  if ((it->bidi_it.type & 7) != it->bidi_it.type)
+	    abort ();
 	  glyph->bidi_type = it->bidi_it.type;
 	}
       ++it->glyph_row->used[area];
@@ -20983,6 +20985,8 @@
       if (it->bidi_p)
 	{
 	  glyph->resolved_level = it->bidi_it.resolved_level;
+	  if ((it->bidi_it.type & 7) != it->bidi_it.type)
+	    abort ();
 	  glyph->bidi_type = it->bidi_it.type;
 	}
       ++it->glyph_row->used[area];
@@ -21162,6 +21166,8 @@
 	  if (it->bidi_p)
 	    {
 	      glyph->resolved_level = it->bidi_it.resolved_level;
+	      if ((it->bidi_it.type & 7) != it->bidi_it.type)
+		abort ();
 	      glyph->bidi_type = it->bidi_it.type;
 	    }
 	  ++it->glyph_row->used[area];
@@ -21213,6 +21219,8 @@
       if (it->bidi_p)
 	{
 	  glyph->resolved_level = it->bidi_it.resolved_level;
+	  if ((it->bidi_it.type & 7) != it->bidi_it.type)
+	    abort ();
 	  glyph->bidi_type = it->bidi_it.type;
 	}
       ++it->glyph_row->used[area];