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