X-Git-Url: http://repo.macrolet.net/gitweb/?a=blobdiff_plain;f=src%2Fcode%2Fdefboot.lisp;h=f05fb0a8f104ba3ab49b9b7ace78a304020a8762;hb=f8893c7c658bf9d9e0757c63e47af2fdea810f04;hp=2cd77e906c61dee12e008efc6cbc7c38caa15937;hpb=ce18bcfe50994889a5e3245cacd8702b5a0ced89;p=sbcl.git diff --git a/src/code/defboot.lisp b/src/code/defboot.lisp index 2cd77e9..f05fb0a 100644 --- a/src/code/defboot.lisp +++ b/src/code/defboot.lisp @@ -304,18 +304,23 @@ ;; since we don't want to use IGNORABLE on what might be a special ;; var. (multiple-value-bind (forms decls) (parse-body body :doc-string-allowed nil) - (let ((n-list (gensym))) - `(do* ((,n-list ,list (cdr ,n-list))) - ((endp ,n-list) - ,@(if result - `((let ((,var nil)) - ,var - ,result)) - '(nil))) - (let ((,var (car ,n-list))) - ,@decls - (tagbody - ,@forms)))))) + (let ((n-list (gensym "N-LIST")) + (start (gensym "START"))) + `(block nil + (let ((,n-list ,list)) + (tagbody + ,start + (unless (endp ,n-list) + (let ((,var (car ,n-list))) + ,@decls + (setq ,n-list (cdr ,n-list)) + (tagbody ,@forms)) + (go ,start)))) + ,(if result + `(let ((,var nil)) + ,var + ,result) + nil))))) ;;;; conditions, handlers, restarts