summaryrefslogtreecommitdiff
path: root/lisp/emacs-lisp/byte-opt.el
diff options
context:
space:
mode:
authorLars Ingebrigtsen <larsi@gnus.org>2021-11-16 08:15:43 +0100
committerLars Ingebrigtsen <larsi@gnus.org>2021-11-16 08:26:24 +0100
commitde477ec683482a5dd27d791d7fdcfc4021ed3cb7 (patch)
treee76ae6aa9969b07cf71bb57651ac2368327d1bf8 /lisp/emacs-lisp/byte-opt.el
parent560c921ed8d2d14e593aaee68b8be57b189128e5 (diff)
downloademacs-de477ec683482a5dd27d791d7fdcfc4021ed3cb7.tar.gz
emacs-de477ec683482a5dd27d791d7fdcfc4021ed3cb7.tar.bz2
emacs-de477ec683482a5dd27d791d7fdcfc4021ed3cb7.zip
Add new 'keymap-*' functions
* lisp/keymap.el: New file with all the new keymap-* functions. * lisp/loadup.el ("keymap"): Load. * lisp/subr.el (kbd): Refactor out all the code to key-parse. (define-key-after, keyboard-translate, global-set-key) (local-set-key, global-unset-key, local-unset-key) (local-key-binding, global-key-binding) (substitute-key-definition): Note in doc strings that these are legacy functions. (define-keymap--define): Use keymap-set. * lisp/emacs-lisp/byte-opt.el: Remove the optimizations for defvar-keymap and define-keymap since the macros now only understand the kbd syntax. * lisp/emacs-lisp/bytecomp.el (byte-compile-define-keymap) (byte-compile-define-keymap--define): Warn about invalid key definitions in all keymap-* functions. * lisp/emacs-lisp/shortdoc.el (keymaps): Add shortdocs form keymap* functions. * src/keymap.c (possibly_translate_key_sequence): Adjust callers to key-valid-p and key-parse. (syms_of_keymap): Adjust defs.
Diffstat (limited to 'lisp/emacs-lisp/byte-opt.el')
-rw-r--r--lisp/emacs-lisp/byte-opt.el66
1 files changed, 0 insertions, 66 deletions
diff --git a/lisp/emacs-lisp/byte-opt.el b/lisp/emacs-lisp/byte-opt.el
index 9c64083b64b..f6db803b78e 100644
--- a/lisp/emacs-lisp/byte-opt.el
+++ b/lisp/emacs-lisp/byte-opt.el
@@ -1186,72 +1186,6 @@ See Info node `(elisp) Integer Basics'."
(put 'concat 'byte-optimizer #'byte-optimize-concat)
-(defun byte-optimize-define-key (form)
- "Expand key bindings in FORM."
- (let ((key (nth 2 form)))
- (if (and (vectorp key)
- (= (length key) 1)
- (stringp (aref key 0)))
- ;; We have key on the form ["C-c C-c"].
- (if (not (kbd-valid-p (aref key 0)))
- (error "Invalid `kbd' syntax: %S" key)
- (list (nth 0 form) (nth 1 form)
- (kbd (aref key 0)) (nth 4 form)))
- ;; No improvement.
- form)))
-
-(put 'define-key 'byte-optimizer #'byte-optimize-define-key)
-
-(defun byte-optimize-define-keymap (form)
- "Expand key bindings in FORM."
- (let ((result nil)
- (orig-form form)
- improved)
- (push (pop form) result)
- (while (and form
- (keywordp (car form))
- (not (eq (car form) :menu)))
- (unless (memq (car form)
- '(:full :keymap :parent :suppress :name :prefix))
- (error "Invalid keyword: %s" (car form)))
- (push (pop form) result)
- (when (null form)
- (error "Uneven number of keywords in %S" form))
- (push (pop form) result))
- ;; Bindings.
- (while form
- (let ((key (pop form)))
- (if (and (vectorp key)
- (= (length key) 1)
- (stringp (aref key 0)))
- (progn
- (unless (kbd-valid-p (aref key 0))
- (error "Invalid `kbd' syntax: %S" key))
- (push (kbd (aref key 0)) result)
- (setq improved t))
- ;; No improvement.
- (push key result)))
- (when (null form)
- (error "Uneven number of key bindings in %S" form))
- (push (pop form) result))
- (if improved
- (nreverse result)
- orig-form)))
-
-(defun byte-optimize-define-keymap--define (form)
- "Expand key bindings in FORM."
- (if (not (consp (nth 1 form)))
- form
- (let ((optimized (byte-optimize-define-keymap (nth 1 form))))
- (if (eq optimized (nth 1 form))
- ;; No improvement.
- form
- (list (car form) optimized)))))
-
-(put 'define-keymap 'byte-optimizer #'byte-optimize-define-keymap)
-(put 'define-keymap--define 'byte-optimizer
- #'byte-optimize-define-keymap--define)
-
;; I'm not convinced that this is necessary. Doesn't the optimizer loop
;; take care of this? - Jamie
;; I think this may some times be necessary to reduce ie (quote 5) to 5,