Commit 7a7270dd authored by Eli Zaretskii's avatar Eli Zaretskii

Verify glyph row's hash values.

 src/dispnew.c (verify_row_hash) [XASSERTS]: New function.
 (adjust_glyph_matrix, row_equal_p): Use it in xassert to verify
 that the hash value of glyph rows is correct.
parent 1e5b2111
......@@ -2,6 +2,9 @@
* dispnew.c (scrolling_window): Fix incorrect indices in accessing
current_matrix and desired_matrix. (Bug#9990)
(verify_row_hash) [XASSERTS]: New function.
(adjust_glyph_matrix, row_equal_p): Use it in xassert to verify
that the hash value of glyph rows is correct.
2011-11-12 Martin Rudalics <rudalics@gmx.at>
......
......@@ -429,6 +429,25 @@ margin_glyphs_to_reserve (struct window *w, int total_glyphs, Lisp_Object margin
return n;
}
#if XASSERTS
/* Return non-zero if ROW's hash value is correct, zero if not. */
int
verify_row_hash (struct glyph_row *row)
{
int area, k;
unsigned row_hash = 0;
for (area = LEFT_MARGIN_AREA; area < LAST_AREA; ++area)
for (k = 0; k < row->used[area]; ++k)
row_hash = ((((row_hash << 4) + (row_hash >> 24)) & 0x0fffffff)
+ row->glyphs[area][k].u.val
+ row->glyphs[area][k].face_id
+ row->glyphs[area][k].padding_p
+ (row->glyphs[area][k].type << 2));
return row_hash == row->hash;
}
#endif
/* Adjust glyph matrix MATRIX on window W or on a frame to changed
window sizes.
......@@ -600,6 +619,7 @@ adjust_glyph_matrix (struct window *w, struct glyph_matrix *matrix, int x, int y
row->glyphs[LAST_AREA]
= row->glyphs[LEFT_MARGIN_AREA] + dim.width;
}
xassert (!row->enabled_p || verify_row_hash (row));
++row;
}
}
......@@ -1271,6 +1291,9 @@ line_draw_cost (struct glyph_matrix *matrix, int vpos)
static inline int
row_equal_p (struct glyph_row *a, struct glyph_row *b, int mouse_face_p)
{
xassert (verify_row_hash (a));
xassert (verify_row_hash (b));
if (a == b)
return 1;
else if (a->hash != b->hash)
......
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