[Top][All Lists]

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: assertion failed: c == event->code

From: Stefan Monnier
Subject: Re: assertion failed: c == event->code
Date: Wed, 12 Dec 2007 12:30:36 -0500
User-agent: Gnus/5.13 (Gnus v5.13) Emacs/23.0.50 (gnu/linux)

> I'm getting a failed assertion:

> keyboard.c:5548: Emacs fatal error: assertion failed: c == event->code

> Breakpoint 1, w32_abort () at w32fns.c:9127
> 9127      button = MessageBox (NULL,
> (gdb) bt
> #0  w32_abort () at w32fns.c:9127
> #1  0x0101f2fb in die (msg=0x13598f8 "assertion failed: c == event->code",
>     file=0x135686a "keyboard.c", line=5548) at alloc.c:6287
> #2  0x01091bfc in read_char (commandflag=1, nmaps=2, maps=0x82fb70,
>     prev_event=25171969, used_mouse_menu=0x82fc18, end_time=0x0)
>     at keyboard.c:5548
> #3  0x010928d1 in read_key_sequence (keybuf=0x82fce4, bufsize=30,
>     prompt=25171969, dont_downcase_last=0, can_return_switch_frame=1,
>     fix_current_buffer=1) at keyboard.c:9459
> #4  0x010952e1 in command_loop_1 () at keyboard.c:1666
> #5  0x0101b0b7 in internal_condition_case (bfun=0x1095082 <command_loop_1>,
>     handlers=25244841, hfun=0x108cba3 <cmd_error>) at eval.c:1493
> #6  0x0108bdd0 in command_loop_2 () at keyboard.c:1381
> #7  0x0101b152 in internal_catch (tag=25236817,
>     func=0x108bdad <command_loop_2>, arg=25171969) at eval.c:1229
> #8  0x0108c9dc in command_loop () at keyboard.c:1360
> #9  0x0108cd06 in recursive_edit_1 () at keyboard.c:969
> #10 0x0108ce71 in Frecursive_edit () at keyboard.c:1031
> #11 0x01002b0c in main (argc=8585136, argv=0xa92778) at emacs.c:1781

> That's on Windows XP, with an up-to-date trunk build, built with "gcc
> (GCC) 4.2.1-sjlj (mingw32-2)".

> The error happens (repeatably) whenever I press Ctrl + a non-ASCII key
> (for example, C-Ñ, C-ç, C-º).

Hmm.. if you just remove this eassert, you should get back the previous
behavior.  But then I wonder: is this previous behavior correct, and if
so, why?

Basically, the issue is that when a key is pressed, the W32 code inserts
a "ASCII_KEYSTROKE_EVENT" in the queue, even for non-ASCII chars, and
then keyboard.c applies a "& 0377" to it, so there's a risk of losing
some bits and turning a non-ASCII keypress into some ASCII char.

This "& 0377" was introduced by:

   revision 1.135
   date: 1993-08-11 07:56:40 +0000;  author: rms;  state: Exp;  lines: +1 -1;
   (make_lispy_event): Clear all but 0377 in event->code.

so I have no idea why it's there.


reply via email to

[Prev in Thread] Current Thread [Next in Thread]