Update of /project/movitz/cvsroot/movitz/losp/muerte
In directory clnet:/tmp/cvs-serv1370
Modified Files:
basic-macros.lisp
Log Message:
Add a runtime do* macro.
--- /project/movitz/cvsroot/movitz/losp/muerte/basic-macros.lisp 2008/03/17 23:24:44 1.74
+++ /project/movitz/cvsroot/movitz/losp/muerte/basic-macros.lisp 2008/03/20 22:50:01 1.75
@@ -9,7 +9,7 @@
;;;; Created at: Wed Nov 8 18:44:57 2000
;;;; Distribution: See the accompanying file COPYING.
;;;;
-;;;; $Id: basic-macros.lisp,v 1.74 2008/03/17 23:24:44 ffjeld Exp $
+;;;; $Id: basic-macros.lisp,v 1.75 2008/03/20 22:50:01 ffjeld Exp $
;;;;
;;;;------------------------------------------------------------------
@@ -275,14 +275,14 @@
(unless ,end-test-form (go ,loop-tag)))
,@result-forms))))))
-(defmacro/cross-compilation do* (var-specs (end-test-form &rest result-forms) &body declarations-and-body)
+(defmacro do* (var-specs (end-test-form &rest result-forms) &body declarations-and-body)
(flet ((var-spec-let-spec (var-spec)
(cond
- ((symbolp var-spec)
- var-spec)
- ((cddr var-spec)
- (subseq var-spec 0 2))
- (t var-spec)))
+ ((symbolp var-spec)
+ var-spec)
+ ((cddr var-spec)
+ (subseq var-spec 0 2))
+ (t var-spec)))
(var-spec-var (var-spec)
(if (symbolp var-spec) var-spec (car var-spec)))
(var-spec-step-form (var-spec)
@@ -291,22 +291,24 @@
(or (third var-spec)
'(quote nil)))))
(multiple-value-bind (body declarations)
- (movitz::parse-declarations-and-body declarations-and-body 'cl:declare)
+ (parse-declarations-and-body declarations-and-body)
(let* ((loop-tag (gensym "do*-loop"))
(start-tag (gensym "do*-start")))
`(block nil
(let* ,(mapcar #'var-spec-let-spec var-specs)
(declare ,@declarations)
(tagbody
- (go ,start-tag)
- ,loop-tag
- ,@body
- (setq ,@(loop for var-spec in var-specs
- as step-form = (var-spec-step-form var-spec)
- when step-form
- append (list (var-spec-var var-spec) step-form)))
- ,start-tag
- (unless ,end-test-form (go ,loop-tag)))
+ (go ,start-tag)
+ ,loop-tag
+ ,@body
+ (setq ,@(mapcan (lambda (var-spec)
+ (let ((step-form (var-spec-step-form var-spec)))
+ (when step-form
+ (list (var-spec-var var-spec)
+ step-form))))
+ var-specs))
+ ,start-tag
+ (unless ,end-test-form (go ,loop-tag)))
,@result-forms))))))
(define-compiler-macro do* (var-specs (end-test-form &rest result-forms) &body declarations-and-body)