From 0ef2d924c3d394461d3fc362b8988bd4b855c8e3 Mon Sep 17 00:00:00 2001
From: pfdietz <pfdietz@localhost>
Date: Fri, 26 Sep 2003 01:18:01 +0000
Subject: [PATCH] Fixed bug in pruning let forms that contain assignments to
 their variables.

---
 ansi-tests/random-int-form.lsp | 10 +++++++++-
 1 file changed, 9 insertions(+), 1 deletion(-)

diff --git a/ansi-tests/random-int-form.lsp b/ansi-tests/random-int-form.lsp
index bececfff..138f9331 100644
--- a/ansi-tests/random-int-form.lsp
+++ b/ansi-tests/random-int-form.lsp
@@ -803,7 +803,8 @@
 		 (not (rest binding-list))
 		 (not (rest body)))
 	(let ((binding (first binding-list)))
-	  (unless (consp (second binding))
+	  (unless (or (consp (second binding))
+		      (has-assignment-to-var (first binding) body))
 	    (funcall try-fn `(let ()
 			       ,@(subst (second binding)
 					(first binding) body))))))
@@ -812,6 +813,13 @@
 		 (funcall try-fn
 			  `(,@(butlast form) ,form2)))))))
 
+(defun has-assignment-to-var (var form)
+  (when (consp form)
+    (or (and (member (car form) '(setq setf))
+	     (eq (cadr form) var))
+	(loop for subform in form
+	      thereis (has-assignment-to-var var subform)))))       
+
 (defun prune-flet (form try-fn)
   "Attempt to simplify a FLET form."
   (declare (function try-fn))
-- 
GitLab