summaryrefslogtreecommitdiff
path: root/lisp
diff options
context:
space:
mode:
authorPip Cet <pipcet@gmail.com>2021-03-04 21:06:13 +0000
committerPip Cet <pipcet@gmail.com>2021-03-05 09:14:59 +0000
commit77ec25122c9a7855657de564101c9fe763b91013 (patch)
tree5ec9c35384cc08b38af8ea6b92015a9d8e3871d7 /lisp
parent4c2820ce3f89b2c4b8c289e200da5f66fe6c2878 (diff)
downloademacs-77ec25122c9a7855657de564101c9fe763b91013.tar.gz
emacs-77ec25122c9a7855657de564101c9fe763b91013.tar.bz2
emacs-77ec25122c9a7855657de564101c9fe763b91013.zip
Don't ignore lexically-bound variables in a defvar (bug#46912)
* lisp/emacs-lisp/byte-opt.el (byte-optimize-form-code-walker): Walk the value form of a defvar.
Diffstat (limited to 'lisp')
-rw-r--r--lisp/emacs-lisp/byte-opt.el9
1 files changed, 6 insertions, 3 deletions
diff --git a/lisp/emacs-lisp/byte-opt.el b/lisp/emacs-lisp/byte-opt.el
index b51ba801552..b3325816c5c 100644
--- a/lisp/emacs-lisp/byte-opt.el
+++ b/lisp/emacs-lisp/byte-opt.el
@@ -607,9 +607,12 @@ Same format as `byte-optimize--lexvars', with shared structure and contents.")
(setq args (cddr args)))
(cons fn (nreverse var-expr-list))))
- (`(defvar ,(and (pred symbolp) name) . ,_)
- (push name byte-optimize--dynamic-vars)
- form)
+ (`(defvar ,(and (pred symbolp) name) . ,rest)
+ (let ((optimized-rest (and rest
+ (cons (byte-optimize-form (car rest) nil)
+ (cdr rest)))))
+ (push name byte-optimize--dynamic-vars)
+ `(defvar ,name . ,optimized-rest)))
(`(,(pred byte-code-function-p) . ,exps)
(cons fn (mapcar #'byte-optimize-form exps)))