]> git.eshelyaron.com Git - emacs.git/commitdiff
* lisp/emacs-lisp/cl-macs.el (cl-symbol-macrolet): Print warning for
authorNathan Trapuzzano <nbtrap@nbtrap.com>
Thu, 7 Nov 2013 04:38:00 +0000 (23:38 -0500)
committerStefan Monnier <monnier@iro.umontreal.ca>
Thu, 7 Nov 2013 04:38:00 +0000 (23:38 -0500)
malformed bindings form.

Fixes: debbugs:15814
lisp/ChangeLog
lisp/emacs-lisp/cl-macs.el

index edb37fa3d391e6d79e61faac444e320c023ec6ec..d80d0389676cae1165be67484eb81880281265c4 100644 (file)
@@ -1,10 +1,14 @@
+2013-11-05  Nathan Trapuzzano  <nbtrap@nbtrap.com>  (tiny change)
+
+       * emacs-lisp/cl-macs.el (cl-symbol-macrolet): Print warning for
+       malformed bindings form (bug#15814).
+
 2013-11-07  Dmitry Gutov  <dgutov@yandex.ru>
 
        * progmodes/ruby-mode.el (ruby-smie-grammar): Lower priority of
        "." compared to " @ ".  This incidentally fixes some indentation
        examples with "do".
-       (ruby-smie--implicit-semi-p): No implicit semi after "^", "and" or
-       "or".
+       (ruby-smie--implicit-semi-p): No implicit semi after "^", "and" or "or".
        (ruby-smie-grammar): New tokens: "and" and "or".
        (ruby-smie--args-separator-p): Fix the check for tokens at POS.
        Exclude "and" and "or".  Remove "do" in order to work around token
index 60fdc09c053191527304a086779ec7bfec6d1acc..bd97bcb585ca838e9e86362d679624ad0fdad227 100644 (file)
@@ -1992,11 +1992,19 @@ by EXPANSION, and (setq NAME ...) will act like (setf EXPANSION ...).
       (unwind-protect
           (progn
             (fset 'macroexpand #'cl--sm-macroexpand)
-            ;; FIXME: For N bindings, this will traverse `body' N times!
-            (macroexpand-all (cons 'progn body)
-                             (cons (list (symbol-name (caar bindings))
-                                         (cl-cadar bindings))
-                                   macroexpand-all-environment)))
+            (let ((expansion
+                   ;; FIXME: For N bindings, this will traverse `body'
+                   ;; N times!
+                   (macroexpand-all (cons 'progn body)
+                                    (cons (list (symbol-name (caar bindings))
+                                                (cl-cadar bindings))
+                                          macroexpand-all-environment))))
+              (if (or (null (cdar bindings)) (cl-cddar bindings))
+                  (macroexp--warn-and-return
+                   (format "Malformed `cl-symbol-macrolet' binding: %S"
+                           (car bindings))
+                   expansion)
+                expansion)))
         (fset 'macroexpand previous-macroexpand))))))
 
 ;;; Multiple values.
@@ -2726,7 +2734,7 @@ macro that returns its `&whole' argument."
   (let* ((cl-entry (cons (nth 1 (nth 1 cl-form)) nil))
          (cl--active-block-names (cons cl-entry cl--active-block-names))
          (cl-body (macroexpand-all      ;Performs compiler-macro expansions.
-                   (cons 'progn (cddr cl-form))
+                   (macroexp-progn (cddr cl-form))
                    macroexpand-all-environment)))
     ;; FIXME: To avoid re-applying macroexpand-all, we'd like to be able
     ;; to indicate that this return value is already fully expanded.