From 14781f7f44dfdfb015082e38894a7e0df4acff83 Mon Sep 17 00:00:00 2001 From: Leo Liu Date: Fri, 6 Jun 2014 01:08:18 +0800 Subject: [PATCH] * emacs-lisp/cl-macs.el (cl-macrolet): Avoid excessive progn's. --- lisp/ChangeLog | 4 ++++ lisp/emacs-lisp/cl-macs.el | 16 +++++++++------- 2 files changed, 13 insertions(+), 7 deletions(-) diff --git a/lisp/ChangeLog b/lisp/ChangeLog index 0abb367f5b8..e0d2ff0a584 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,7 @@ +2014-06-05 Leo Liu + + * emacs-lisp/cl-macs.el (cl-macrolet): Avoid excessive progn's. + 2014-06-05 Michal Nazarewicz * textmodes/tildify.el (tildify-foreach-region-outside-env): New diff --git a/lisp/emacs-lisp/cl-macs.el b/lisp/emacs-lisp/cl-macs.el index 14e4d2da0c8..299cffc83aa 100644 --- a/lisp/emacs-lisp/cl-macs.el +++ b/lisp/emacs-lisp/cl-macs.el @@ -1886,13 +1886,15 @@ This is like `cl-flet', but for macros instead of functions. cl-declarations body))) (if (cdr bindings) `(cl-macrolet (,(car bindings)) (cl-macrolet ,(cdr bindings) ,@body)) - (if (null bindings) (cons 'progn body) - (let* ((name (caar bindings)) - (res (cl--transform-lambda (cdar bindings) name))) - (eval (car res)) - (macroexpand-all (cons 'progn body) - (cons (cons name `(lambda ,@(cdr res))) - macroexpand-all-environment)))))) + (let ((progn-maybe (lambda (body) + (if (cdr body) (cons 'progn body) (car body))))) + (if (null bindings) (funcall progn-maybe body) + (let* ((name (caar bindings)) + (res (cl--transform-lambda (cdar bindings) name))) + (eval (car res)) + (macroexpand-all (funcall progn-maybe body) + (cons (cons name `(lambda ,@(cdr res))) + macroexpand-all-environment))))))) (defconst cl--old-macroexpand (if (and (boundp 'cl--old-macroexpand) -- 2.39.2