summaryrefslogtreecommitdiff
path: root/lisp/emacs-lisp
diff options
context:
space:
mode:
authorMattias EngdegÄrd <mattiase@acm.org>2021-11-28 18:04:06 +0100
committerMattias EngdegÄrd <mattiase@acm.org>2021-11-28 18:10:23 +0100
commitd50e0bdbac8e6683c6af4efa172c1b801d250486 (patch)
treeef96e34d1b14453a2f7e83dc5014da883aef8cda /lisp/emacs-lisp
parent1e8074f5ea9e61a6fba33ab2af0c79b9af7d7a24 (diff)
downloademacs-d50e0bdbac8e6683c6af4efa172c1b801d250486.tar.gz
emacs-d50e0bdbac8e6683c6af4efa172c1b801d250486.tar.bz2
emacs-d50e0bdbac8e6683c6af4efa172c1b801d250486.zip
Use compiler macros for the key syntax checks
Compile-time key string syntax checks are better written using compiler macros than with byte-hunk-handlers inside the compiler proper. * lisp/emacs-lisp/bytecomp.el (byte-compile-define-keymap) (byte-compile-define-keymap--define): Remove. * lisp/keymap.el (keymap--compile-check): New. (keymap-set, keymap-global-set, keymap-local-set, keymap-global-unset) (keymap-local-unset, keymap-unset, keymap-substitute) (keymap-set-after, key-translate, keymap-lookup, keymap-local-lookup) (keymap-global-lookup): Use compiler-macro for argument checks. * lisp/subr.el (define-keymap--compile): New. (define-keymap--define): Fold into define-keymap. (define-keymap): Use compiler-macro. (defvar-keymap): Use define-keymap.
Diffstat (limited to 'lisp/emacs-lisp')
-rw-r--r--lisp/emacs-lisp/bytecomp.el63
1 files changed, 0 insertions, 63 deletions
diff --git a/lisp/emacs-lisp/bytecomp.el b/lisp/emacs-lisp/bytecomp.el
index 566a3fdf99c..5ce5b2952b8 100644
--- a/lisp/emacs-lisp/bytecomp.el
+++ b/lisp/emacs-lisp/bytecomp.el
@@ -5051,69 +5051,6 @@ binding slots have been popped."
-;; Key syntax warnings.
-
-(mapc
- (lambda (elem)
- (put (car elem) 'byte-hunk-handler
- (lambda (form)
- (dolist (idx (cdr elem))
- (let ((key (elt form idx)))
- (when (or (vectorp key)
- (and (stringp key)
- (not (key-valid-p key))))
- (byte-compile-warn "Invalid `kbd' syntax: %S" key))))
- form)))
- ;; Functions and the place(s) for the key definition(s).
- '((keymap-set 2)
- (keymap-global-set 1)
- (keymap-local-set 1)
- (keymap-unset 2)
- (keymap-global-unset 1)
- (keymap-local-unset 1)
- (keymap-substitute 2 3)
- (keymap-set-after 2)
- (key-translate 1 2)
- (keymap-lookup 2)
- (keymap-global-lookup 1)
- (keymap-local-lookup 1)))
-
-(put 'define-keymap 'byte-hunk-handler #'byte-compile-define-keymap)
-(defun byte-compile-define-keymap (form)
- (let ((result nil)
- (orig-form form))
- (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))
- (byte-compile-warn "Invalid keyword: %s" (car form)))
- (push (pop form) result)
- (when (null form)
- (byte-compile-warn "Uneven number of keywords in %S" form))
- (push (pop form) result))
- ;; Bindings.
- (while form
- (let ((key (pop form)))
- (when (stringp key)
- (unless (key-valid-p key)
- (byte-compile-warn "Invalid `kbd' syntax: %S" key)))
- ;; No improvement.
- (push key result))
- (when (null form)
- (byte-compile-warn "Uneven number of key bindings in %S" form))
- (push (pop form) result))
- orig-form))
-
-(put 'define-keymap--define 'byte-hunk-handler
- #'byte-compile-define-keymap--define)
-(defun byte-compile-define-keymap--define (form)
- (when (consp (nth 1 form))
- (byte-compile-define-keymap (nth 1 form)))
- form)
-
-
;;; tags
;; Note: Most operations will strip off the 'TAG, but it speeds up