Stephen J. Turnbull wrote:
 I think this is already in the tracker.  Anybody who adds to the
 issue, please check for dupes.  Note that this is really an assert in
 a dynarr macro, not in redisplay. 
I tried to search for dups, but the tracker keeps throwing an assertion.
    <type 'exceptions.TypeError'>: 'MSetItem' object is unindexable
I ran into what looks like the same problem yesterday; see issue
747.
Unfortunately, I upgraded my system yesterday and gdb is now unable to
climb the stack in the core file.  So I can't poke at db->runes to see
if it looks sane.
I'm on vacation until January, so I have some time to look at the code.
I am a little puzzled by this code in pixel_to_glyph_translation():
	  for (*col = 0; *col <= Dynarr_length (db->runes); (*col)++)
	    {
	      int past_end = (*col == Dynarr_length (db->runes));
	      [...]
	      if (past_end || ...)
		{
		  if (past_end)
		    {
		      (*col)--;
		      rb = Dynarr_atp (db->runes, *col);
		    }
	      
The Dynarr_atp() call is where XEmacs died, with *col == -1.
If db->runes is zero-length, then past_end will be true on the first
pass through the loop.  We will then decrement *col and then die in the
inline code from Dynarr_verify_pos_atp().
Either the code needs to handle a zero-length db->runes, or
db->runes is assumed to have a non-zero length.  I suspect it's the
former, because earlier code in pixel_to_glyph_translation() allows for
a zero-length db->runes.  Can typeahead cause any problems here?
mike
_______________________________________________
XEmacs-Beta mailing list
XEmacs-Beta(a)xemacs.org
http://lists.xemacs.org/mailman/listinfo/xemacs-beta