From baa9f58d849dfeee2fa14c5889d42a626c88699e Mon Sep 17 00:00:00 2001
From: Kevin Rosenberg <kevin@rosenberg.net>
Date: Sat, 24 Apr 2010 17:42:02 -0600
Subject: [PATCH] Mild macro optimizations

---
 macros.lisp | 33 ++++++++++++++++++++++++---------
 1 file changed, 24 insertions(+), 9 deletions(-)

diff --git a/macros.lisp b/macros.lisp
index cc39ad4..bf47c63 100644
--- a/macros.lisp
+++ b/macros.lisp
@@ -86,13 +86,28 @@
                (let ((it ,val)) ,@(cdr cl1))
                (acond2 ,@(cdr clauses)))))))
 
-(defmacro mac (expr)
-"Expand a macro"
-  `(pprint (macroexpand-1 ',expr)))
+(defmacro mac (form &key (stream *standard-output*) (full nil) (width 80)
+               (downcase t)
+               &environment env)
+  (multiple-value-bind (expanded expanded-p)
+      (funcall (if full #'macroexpand #'macroexpand-1) form env)
+    (write expanded
+           :stream stream
+           :pretty t
+           :right-margin width
+           :case (if downcase :downcase :upcase)
+           :length nil
+           :level nil
+           :circle nil
+           :gensym nil)
+    (fresh-line stream)
+    expanded-p))
 
 (defmacro print-form-and-results (form)
-  `(format t "~&~A --> ~S~%" (write-to-string ',form) ,form))
-
+  (let ((r (gensym "RES-")))
+    `(let ((r ,form))
+       (format t "~&~A --> ~S~%" ',form r)
+       r)))
 
 ;;; Loop macros
 
@@ -107,16 +122,16 @@
      ,@body))
 
 (defmacro for ((var start stop) &body body)
-  (let ((gstop (gensym)))
+  (let ((gstop (gensym "STOP-")))
     `(do ((,var ,start (1+ ,var))
           (,gstop ,stop))
          ((> ,var ,gstop))
        ,@body)))
 
 (defmacro with-each-stream-line ((var stream) &body body)
-  (let ((eof (gensym))
-        (eof-value (gensym))
-        (strm (gensym)))
+  (let ((eof (gensym "EOF-"))
+        (eof-value (gensym "EOF-VALUE-"))
+        (strm (gensym "STREAM-")))
     `(let ((,strm ,stream)
            (,eof ',eof-value))
       (do ((,var (read-line ,strm nil ,eof) (read-line ,strm nil ,eof)))
-- 
GitLab