I’d welcome discussion on this. E.g in extents.c:5448, an extent’s keymap
must have #'keymapp give non-nil, so autoloaded keymaps don’t work;
keymap.c:773 maps using keymap_submaps_mapper_0 to force loading of those
maps to be autoloaded, and that doesn’t work; as far as I can see, mapping
across autoloaded submaps hasn’t worked since 1997.
APPROVE COMMIT
Note: This patch has been committed.
# HG changeset patch
# User Aidan Kehoe <kehoea(a)parhasard.net>
# Date 1404319549 -3600
#      Wed Jul 02 17:45:49 2014 +0100
# Node ID 236e4afc565dcd32516d0946525c2c63397573c3
# Parent  0e9f791cc6558e3dba92ffff659d331138f1431e
Autoload within #'keymapp, as documented.
src/ChangeLog addition:
2014-07-02  Aidan Kehoe  <kehoea(a)parhasard.net>
	* keymap.c (Fkeymapp):
	Autoload within this, as documented. Our callers are not prepared
	to do the intelligent thing if a symbol that is fboundp to an
	autoloaded keymap, is not itself #'keymapp.
lisp/ChangeLog addition:
2014-07-02  Aidan Kehoe  <kehoea(a)parhasard.net>
	* byte-optimize.el (side-effect-free-fns):
	#'keymapp is not side-effect-free, it can autoload.
diff -r 0e9f791cc655 -r 236e4afc565d lisp/ChangeLog
--- a/lisp/ChangeLog	Wed Jul 02 16:32:19 2014 +0100
+++ b/lisp/ChangeLog	Wed Jul 02 17:45:49 2014 +0100
@@ -1,3 +1,8 @@
+2014-07-02  Aidan Kehoe  <kehoea(a)parhasard.net>
+
+	* byte-optimize.el (side-effect-free-fns):
+	#'keymapp is not side-effect-free, it can autoload.
+
 2014-07-02  Aidan Kehoe  <kehoea(a)parhasard.net>
 
 	* cmdloop.el:
diff -r 0e9f791cc655 -r 236e4afc565d lisp/byte-optimize.el
--- a/lisp/byte-optimize.el	Wed Jul 02 16:32:19 2014 +0100
+++ b/lisp/byte-optimize.el	Wed Jul 02 17:45:49 2014 +0100
@@ -1340,7 +1340,7 @@
 	 hash-table-p
 	 identity ignore integerp integer-or-marker-p interactive-p
 	 invocation-directory invocation-name
-	 keymapp list list* listp
+	 list list* listp
 	 make-marker mark mark-marker markerp memory-limit minibuffer-window
 	 ;; mouse-movement-p not in XEmacs
 	 natnump nlistp not null number-or-marker-p numberp
diff -r 0e9f791cc655 -r 236e4afc565d src/ChangeLog
--- a/src/ChangeLog	Wed Jul 02 16:32:19 2014 +0100
+++ b/src/ChangeLog	Wed Jul 02 17:45:49 2014 +0100
@@ -1,3 +1,10 @@
+2014-07-02  Aidan Kehoe  <kehoea(a)parhasard.net>
+
+	* keymap.c (Fkeymapp):
+	Autoload within this, as documented. Our callers are not prepared
+	to do the intelligent thing if a symbol that is fboundp to an
+	autoloaded keymap, is not itself #'keymapp.
+
 2014-07-02  Aidan Kehoe  <kehoea(a)parhasard.net>
 
 	* event-stream.c (Fnext_command_event):
diff -r 0e9f791cc655 -r 236e4afc565d src/keymap.c
--- a/src/keymap.c	Wed Jul 02 16:32:19 2014 +0100
+++ b/src/keymap.c	Wed Jul 02 17:45:49 2014 +0100
@@ -1008,7 +1008,7 @@
        (object))
 {
   /* This function can GC */
-  return KEYMAPP (get_keymap (object, 0, 0)) ? Qt : Qnil;
+  return KEYMAPP (get_keymap (object, 0, 1)) ? Qt : Qnil;
 }
 
 /* Check that OBJECT is a keymap (after dereferencing through any
-- 
‘Liston operated so fast that he once accidentally amputated an assistant’s 
fingers along with a patient’s leg, […] The patient and the assistant both 
died of sepsis, and a spectator reportedly died of shock, resulting in the 
only known procedure with a 300% mortality.’ (Atul Gawande, NEJM, 2012)
_______________________________________________
XEmacs-Patches mailing list
XEmacs-Patches(a)xemacs.org
http://lists.xemacs.org/mailman/listinfo/xemacs-patches