summaryrefslogtreecommitdiff
path: root/control-flow.lisp
diff options
context:
space:
mode:
authorMatthias Andreas Benkard <matthias@benkard.de>2008-07-31 15:03:55 +0200
committerMatthias Andreas Benkard <matthias@benkard.de>2008-07-31 15:03:55 +0200
commit44694422755e946fd07ea2228259bbeebdb3302b (patch)
tree49afc596414915daabdf36acf1af4f2315fc2a09 /control-flow.lisp
parent4b66494c7bd3c0dd7757e75b282267c51d7129c0 (diff)
Add MACROLET.
Diffstat (limited to 'control-flow.lisp')
-rw-r--r--control-flow.lisp19
1 files changed, 18 insertions, 1 deletions
diff --git a/control-flow.lisp b/control-flow.lisp
index c8c18cb..b03a666 100644
--- a/control-flow.lisp
+++ b/control-flow.lisp
@@ -19,7 +19,7 @@
(in-package #:common-lisp)
(export '(identity constantly complement tagbody go block return-from
- defconstant prog prog*))
+ defconstant prog prog* macrolet flet))
(defun identity (x)
@@ -158,3 +158,20 @@
,@declarations
(tagbody
,@body))))
+
+
+(defmacro macrolet (bindings &body body)
+ `(%macrolet ,(mapcar (lambda (binding)
+ `(,(car binding)
+ ,@(make-defmacro-body (cadr binding)
+ (cddr binding))))
+ bindings)
+ ,@body))
+
+(defmacro flet (bindings &body body)
+ `(%flet ,(mapcar (lambda (binding)
+ `(,(car binding)
+ ,@(make-defun-body (cadr binding)
+ (cddr binding))))
+ bindings)
+ ,@body))