author | Alan Dipert
<alan@dipert.org> 2021-07-24 06:21:21 UTC |
committer | Alan Dipert
<alan@dipert.org> 2021-07-24 06:21:21 UTC |
parent | 05c84f87c7d4879571e2676943be8fe70af58afa |
boot.lisp | +9 | -24 |
jacl-tests.lisp | +6 | -1 |
diff --git a/boot.lisp b/boot.lisp index 323720c..a8d1110 100644 --- a/boot.lisp +++ b/boot.lisp @@ -503,39 +503,24 @@ (%mapcar (lambda (step-form) (when (caddr step-form) `(setq ,(car step-form) ,(caddr step-form)))) - step-forms))) - (end# (gensym "end"))) + step-forms)))) `(block nil (let ,bindings (tagbody ,begin# - (if ,end-test-form (go ,end#)) + (if ,end-test-form + (return (progn ,@result-forms))) ,@assignments ,@body - (go ,begin#) - ,end# - (progn ,@result-forms)))))) + (go ,begin#)))))) (%export 'dolist) (defmacro dolist (binding &rest body) - (let ((var (car binding)) - (list# (gensym "list")) - (result-form (caddr binding)) - (begin# (gensym "begin")) - (end# (gensym "end"))) - `(block nil - (let ((,var nil) - (,list# ,(cadr binding))) - (tagbody - ,begin# - (if (null ,list#) (go ,end#)) - (setq ,var (car ,list#)) - ,@body - (setq ,list# (cdr ,list#)) - (go ,begin#) - ,end#) - (setq ,var nil) - ,result-form)))) + (let ((list# (gensym "list"))) + `(do ((,(car binding) nil (car ,list#)) + (,list# ,(cadr binding) (cdr ,list#))) + ((not ,list#) ,(caddr binding)) + ,@body))) ;; designators diff --git a/jacl-tests.lisp b/jacl-tests.lisp index 33ac26e..00af486 100644 --- a/jacl-tests.lisp +++ b/jacl-tests.lisp @@ -159,7 +159,12 @@ (assert= (dolist (i '(1 2 3 4 5) x) (setq x (+ x i))) - 15))) + 15)) + (assert= + (dolist (i '(1 2 3)) + (when (eql i 2) + (return i))) + 2)) (start-tests)