Update of /project/movitz/cvsroot/movitz/losp/muerte
In directory common-lisp.net:/tmp/cvs-serv7297
Modified Files:
more-macros.lisp
Log Message:
New dolist macro.
Date: Fri Feb 20 10:38:29 2004
Author: ffjeld
Index: movitz/losp/muerte/more-macros.lisp
diff -u movitz/losp/muerte/more-macros.lisp:1.2 movitz/losp/muerte/more-macros.lisp:1.3
--- movitz/losp/muerte/more-macros.lisp:1.2 Mon Jan 19 06:23:47 2004
+++ movitz/losp/muerte/more-macros.lisp Fri Feb 20 10:38:28 2004
@@ -10,7 +10,7 @@
;;;; Author: Frode Vatvedt Fjeld <frodef(a)acm.org>
;;;; Created at: Fri Jun 7 15:05:57 2002
;;;;
-;;;; $Id: more-macros.lisp,v 1.2 2004/01/19 11:23:47 ffjeld Exp $
+;;;; $Id: more-macros.lisp,v 1.3 2004/02/20 15:38:28 ffjeld Exp $
;;;;
;;;;------------------------------------------------------------------
@@ -129,26 +129,15 @@
,@declarations-and-body)))
(defmacro dolist ((var list-form &optional result-form) &body declarations-and-body)
- (let ((cons-var (gensym "dolist-cons-var-"))
+ (let ((cons-var (gensym (format nil "dolist-cons-var-~A-" var)))
(loop-tag (gensym "dolist-loop-tag-")))
- (multiple-value-bind (body declarations)
- (movitz::parse-declarations-and-body declarations-and-body 'muerte.cl:declare)
- `(let ((,cons-var ,list-form) ,var)
- (declare ,@declarations)
- (block nil
- (tagbody
- ,loop-tag
- (when ,cons-var
- (setq ,var (pop ,cons-var))
- ,@body
- (go ,loop-tag)))
- ,result-form))
- #+ignore
- `(do* ((,cons-var ,list-form (cdr ,cons-var))
- (,var (car ,cons-var) (car ,cons-var)))
- ((null ,cons-var) ,result-form)
- ,@declarations-and-body))))
-
+ `(prog ((,cons-var ,list-form))
+ ,loop-tag
+ (when ,cons-var
+ (let ((,var (pop ,cons-var)))
+ ,@declarations-and-body)
+ (go ,loop-tag))
+ ,(when result-form `(return ,result-form)))))
(defmacro letf* (bindings &body body &environment env)
"Does what one might expect, saving the old values and setting the generalized