From: Mattias EngdegÄrd Date: Thu, 29 Jul 2021 15:20:41 +0000 (+0200) Subject: Move warnings about bad let-bindings from source optimiser to cconv X-Git-Tag: emacs-28.0.90~1658 X-Git-Url: http://git.eshelyaron.com/gitweb/?a=commitdiff_plain;h=ab9c06449df4c4c58d586573003de419199cc1be;p=emacs.git Move warnings about bad let-bindings from source optimiser to cconv * lisp/emacs-lisp/byte-opt.el (byte-optimize-let-form): Move warnings... * lisp/emacs-lisp/cconv.el (cconv-convert): ...here, which is an overall better place (closer to the front-end). --- diff --git a/lisp/emacs-lisp/byte-opt.el b/lisp/emacs-lisp/byte-opt.el index b6052d82061..c9dfa69aeb2 100644 --- a/lisp/emacs-lisp/byte-opt.el +++ b/lisp/emacs-lisp/byte-opt.el @@ -697,16 +697,11 @@ Same format as `byte-optimize--lexvars', with shared structure and contents.") (let-vars nil)) (dolist (binding (car form)) (let (name expr) - (cond ((consp binding) - (setq name (car binding)) - (unless (symbolp name) - (byte-compile-warn "let-bind nonvariable: `%S'" name)) - (setq expr (byte-optimize-form (cadr binding) nil))) - ((symbolp binding) - (setq name binding)) - (t (byte-compile-warn "malformed let binding: `%S'" binding))) - (let* ( - (value (and (byte-optimize--substitutable-p expr) + (if (atom binding) + (setq name binding) + (setq name (car binding)) + (setq expr (byte-optimize-form (cadr binding) nil))) + (let* ((value (and (byte-optimize--substitutable-p expr) (list expr))) (lexical (not (or (and (symbolp name) (special-variable-p name)) diff --git a/lisp/emacs-lisp/cconv.el b/lisp/emacs-lisp/cconv.el index ea0b09805ea..e0795975c9b 100644 --- a/lisp/emacs-lisp/cconv.el +++ b/lisp/emacs-lisp/cconv.el @@ -358,6 +358,13 @@ places where they originally did not directly appear." letsym binder)) (setq value (cadr binder)) (car binder))) + (_ (cond + ((not (symbolp var)) + (byte-compile-warn "attempt to let-bind nonvariable `%S'" + var)) + ((or (booleanp var) (keywordp var)) + (byte-compile-warn "attempt to let-bind constant `%S'" + var)))) (new-val (pcase (cconv--var-classification binder form) ;; Check if var is a candidate for lambda lifting.