changeset 86099:48dc79c663f4

* subr.el (event-modifiers): Use internal-event-symbol-parse-modifiers. * keyboard.c (Fevent_symbol_parse_modifiers): New function. (syms_of_keyboard): Defsubr it.
author Stefan Monnier <monnier@iro.umontreal.ca>
date Thu, 15 Nov 2007 16:03:00 +0000
parents 388dd3c79510
children ac69f23a84ce
files lisp/ChangeLog lisp/subr.el src/ChangeLog src/keyboard.c
diffstat 4 files changed, 22 insertions(+), 1 deletions(-) [+]
line wrap: on
line diff
--- a/lisp/ChangeLog	Thu Nov 15 15:40:20 2007 +0000
+++ b/lisp/ChangeLog	Thu Nov 15 16:03:00 2007 +0000
@@ -1,5 +1,7 @@
 2007-11-15  Stefan Monnier  <monnier@iro.umontreal.ca>
 
+	* subr.el (event-modifiers): Use internal-event-symbol-parse-modifiers.
+
 	* pcvs.el (cvs-revert-if-needed): Ignore `unknown' files, since cvs
 	did not touch them.
 
--- a/lisp/subr.el	Thu Nov 15 15:40:20 2007 +0000
+++ b/lisp/subr.el	Thu Nov 15 16:03:00 2007 +0000
@@ -723,7 +723,9 @@
     (if (listp type)
 	(setq type (car type)))
     (if (symbolp type)
-	(cdr (get type 'event-symbol-elements))
+        ;; Don't read event-symbol-elements directly since we're not
+        ;; sure the symbol has already been parsed.
+	(cdr (internal-event-symbol-parse-modifiers type))
       (let ((list nil)
 	    (char (logand type (lognot (logior ?\M-\^@ ?\C-\^@ ?\S-\^@
 					       ?\H-\^@ ?\s-\^@ ?\A-\^@)))))
--- a/src/ChangeLog	Thu Nov 15 15:40:20 2007 +0000
+++ b/src/ChangeLog	Thu Nov 15 16:03:00 2007 +0000
@@ -1,5 +1,8 @@
 2007-11-15  Stefan Monnier  <monnier@iro.umontreal.ca>
 
+	* keyboard.c (Fevent_symbol_parse_modifiers): New function.
+	(syms_of_keyboard): Defsubr it.
+
 	* data.c (swap_in_global_binding): Fix longstanding bug where
 	store_symval_forwarding was not called with the right second argument,
 	thus causing objfwd-ing from being dropped.
--- a/src/keyboard.c	Thu Nov 15 15:40:20 2007 +0000
+++ b/src/keyboard.c	Thu Nov 15 16:03:00 2007 +0000
@@ -6545,6 +6545,19 @@
     }
 }
 
+DEFUN ("internal-event-symbol-parse-modifiers", Fevent_symbol_parse_modifiers,
+       Sevent_symbol_parse_modifiers, 1, 1, 0,
+       doc: /* Parse the event symbol.  For internal use.  */)
+  (symbol)
+{
+  /* Fill the cache if needed.  */
+  parse_modifiers (symbol);
+  /* Ignore the result (which is stored on Qevent_symbol_element_mask)
+     and use the Lispier representation stored on Qevent_symbol_elements
+     instead.  */
+  return Fget (symbol, Qevent_symbol_elements);
+}
+
 /* Apply the modifiers MODIFIERS to the symbol BASE.
    BASE must be unmodified.
 
@@ -11946,6 +11959,7 @@
   staticpro (&help_form_saved_window_configs);
 
   defsubr (&Scurrent_idle_time);
+  defsubr (&Sevent_symbol_parse_modifiers);
   defsubr (&Sevent_convert_list);
   defsubr (&Sread_key_sequence);
   defsubr (&Sread_key_sequence_vector);