From 031e657d115f0af72dc70b3c50213f2b6470ff8a Mon Sep 17 00:00:00 2001 From: Juan Jose Garcia Ripoll Date: Sun, 1 Jan 2012 14:53:55 +0100 Subject: [PATCH] In LOOP, propagate the unsafe declarations to the whole assignment. --- src/lsp/loop2.lsp | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/src/lsp/loop2.lsp b/src/lsp/loop2.lsp index a9c241017..b95444ca9 100755 --- a/src/lsp/loop2.lsp +++ b/src/lsp/loop2.lsp @@ -565,6 +565,14 @@ a LET-like macro, and a SETQ-like macro, which perform LOOP-style destructuring. (do ((tail var)) ((not (consp tail)) tail) (when (find-non-null (pop tail)) (return t)))) (loop-desetq-internal (var val &optional temp) + ;; if the value is declared 'unsafe', then the assignemnt + ;; is also unsafe. + (when (and (consp val) + (eq (first val) 'LOOP-UNSAFE)) + (let ((forms (rest val))) + (setf forms (if (rest forms) `(progn ,@forms) (first forms))) + (return-from loop-desetq-internal + `((LOOP-UNSAFE ,@(loop-desetq-internal var forms)))))) ;; returns a list of actions to be performed (typecase var (null