]> git.eshelyaron.com Git - emacs.git/commitdiff
Move warnings about bad let-bindings from source optimiser to cconv
authorMattias Engdegård <mattiase@acm.org>
Thu, 29 Jul 2021 15:20:41 +0000 (17:20 +0200)
committerMattias Engdegård <mattiase@acm.org>
Fri, 30 Jul 2021 07:54:30 +0000 (09:54 +0200)
* 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).

lisp/emacs-lisp/byte-opt.el
lisp/emacs-lisp/cconv.el

index b6052d8206100cb66617c14ebac86587f1ef27e1..c9dfa69aeb23f69e3d19fad28c263313adda1c01 100644 (file)
@@ -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))
index ea0b09805ea231b116c6650e2b282a21c5c2263a..e0795975c9bb48056022b6f4f78ed2e34ba59150 100644 (file)
@@ -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.