projects
/
kmrcl.git
/ commitdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
| commitdiff |
tree
raw
|
patch
|
inline
| side by side (parent:
d98ff15
)
Mild macro optimizations
author
Kevin Rosenberg
<kevin@rosenberg.net>
Sat, 24 Apr 2010 23:42:02 +0000
(17:42 -0600)
committer
Kevin Rosenberg
<kevin@rosenberg.net>
Sat, 24 Apr 2010 23:42:02 +0000
(17:42 -0600)
macros.lisp
patch
|
blob
|
history
diff --git
a/macros.lisp
b/macros.lisp
index cc39ad41b871947c57f85f3edfde6aa983463c4b..bf47c63bb005f95e00fbe86f043e37aa296658c9 100644
(file)
--- a/
macros.lisp
+++ b/
macros.lisp
@@
-86,13
+86,28
@@
(let ((it ,val)) ,@(cdr cl1))
(acond2 ,@(cdr clauses)))))))
(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)
(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
;;; Loop macros
@@
-107,16
+122,16
@@
,@body))
(defmacro for ((var start stop) &body body)
,@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)
`(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)))
`(let ((,strm ,stream)
(,eof ',eof-value))
(do ((,var (read-line ,strm nil ,eof) (read-line ,strm nil ,eof)))