unofficial mirror of bug-gnu-emacs@gnu.org 
 help / color / mirror / code / Atom feed
* bug#10190: eventp can give incorrect results (subr.el), Emacs 23 and 24
@ 2011-12-02  5:55 Christopher Genovese
  2011-12-02 14:31 ` Stefan Monnier
  0 siblings, 1 reply; 4+ messages in thread
From: Christopher Genovese @ 2011-12-02  5:55 UTC (permalink / raw)
  To: 10190

[-- Attachment #1: Type: text/plain, Size: 2279 bytes --]

This is not a major problem, but it did come up for me in a real program.
In Emacs 23 and 24, the function eventp in subr.el can give incorrect
results
for symbolic events, depending on the timing of the call.  This seems to
occurs because event symbol elements (mask, modifiers, basic type) are
stored in a plist
associated with symbolic events, but the list is set in the function
internal-event-symbol-parse-modifiers, which is only called in the function
event-modifiers not in the inline function eventp.  Hence, code that tests
for
an event before checking the modifiers can give the wrong results, e.g.,

           (cond  ((integerp c) ...)
                       ....
                      ((eventp )  (do-something-with (event-modfiers c)))
                      (t
                          (not-what-we-want-with c)))

will fail when c is a symbolic event that has not been parsed before.

Consider the following sequence, which illustrates the error in a new Emacs
24
session with -Q (on Mac OS X 10.5.8). Although the event M-S-f5 is a rather
obscure one, it is the event used to illustrate the event- fucntions in the
Elisp Info documentation.

;; #1
(eventp 'M-S-f5)
> nil
(symbol-plist 'M-S-f5)
> nil

;; #2
(event-modifiers 'M-S-f5)
> (meta shift)

;; #3
(eventp 'M-S-f5)
> (f5 meta shift)
(symbol-plist 'M-S-f5)
> (event-symbol-element-mask (f5 167772160) event-symbol-elements (f5 meta
shift))

A similar example occurs with, say, M-s-z, even if M-s-z has been defined
in the global map.

This problem holds with event-basic-type too because it also just checks
the symbol plist.
In #1, for instance, (event-basic-type 'M-S-f5) would be nil, but not in
#3.
Another side of the problem(?) is that in #1  calling (event-modifier
'foobar) would make
subsequent (eventp 'foobar) calls true.

Neither of these seems like desirable behaviors.

Not a really big deal, but I thought I'd pass it along.

Thanks,

   Chris

P.S. I haven't had a chance to look over the C code on this too closely,
but the function
parse_modifiers, which is doing the work in
internal-event-symbol-parse-modifiers,
is called at some points when reading key sequences. Caching the events when
they are read would seem to be a good idea, although it is not happening in
the
M-s-z example.

[-- Attachment #2: Type: text/html, Size: 2570 bytes --]

^ permalink raw reply	[flat|nested] 4+ messages in thread

end of thread, other threads:[~2012-07-19  6:25 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2011-12-02  5:55 bug#10190: eventp can give incorrect results (subr.el), Emacs 23 and 24 Christopher Genovese
2011-12-02 14:31 ` Stefan Monnier
2011-12-02 15:17   ` Christopher Genovese
2012-07-19  6:25   ` Stefan Monnier

Code repositories for project(s) associated with this public inbox

	https://git.savannah.gnu.org/cgit/emacs.git

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).