* subr.el (event-modifiers): Use internal-event-symbol-parse-modifiers.
authorStefan Monnier <monnier@iro.umontreal.ca>
Thu, 15 Nov 2007 16:03:00 +0000 (16:03 +0000)
committerStefan Monnier <monnier@iro.umontreal.ca>
Thu, 15 Nov 2007 16:03:00 +0000 (16:03 +0000)
* keyboard.c (Fevent_symbol_parse_modifiers): New function.
(syms_of_keyboard): Defsubr it.

lisp/ChangeLog
lisp/subr.el
src/ChangeLog
src/keyboard.c

index f39752b..baf66e2 100644 (file)
@@ -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.
 
index 17abc70..39bd8ea 100644 (file)
@@ -723,7 +723,9 @@ even when EVENT actually has modifiers."
     (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-\^@)))))
index f4f63e3..8ee1649 100644 (file)
@@ -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.
index 6450453..41407b5 100644 (file)
@@ -6545,6 +6545,19 @@ parse_modifiers (symbol)
     }
 }
 
+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 @@ syms_of_keyboard ()
   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);