;;; -*- Mode:Lisp; Readtable:ZL; Package:USER; Base:8; Patch-File:T -*-
;;; Patch file for System version 123.279
;;; Reason:
;;;  GO from inside a LET that did special bindings, to a higher level,
;;;  wasn't always doing an UNBIND.  GO itself was fine, this only happened
;;;  when COND thought it could optimize this branch.  Fix SIMPLEGOP to
;;;  not claim this case is simple.
;;; Written 12-May-88 21:39:05 by RWK (Robert W. Kerns) at site Gigamos Cambridge
;;; while running on Claude Debussy from band 3
;;; with Experimental System 123.267, Experimental Local-File 73.5, Experimental FILE-Server 22.5, Experimental Unix-Interface 11.0, Experimental Tape 18.2, Experimental KERMIT 34.3, Experimental ZMail 71.2, Experimental Lambda-Diag 15.0, microcode 1756, SDU Boot Tape 3.14, SDU ROM 102, LOADED Landscape GC'd.



; From file DJ: L.SYS; QCP2.LISP#316 at 12-May-88 21:39:08
#8R COMPILER#: 
(COMPILER-LET ((*PACKAGE* (PKG-FIND-PACKAGE "COMPILER")))
  (PATCH-SOURCE-FILE "SYS: SYS; QCP2  "

(defun unbinds-needed-p (tag)
  (let ((gotag (find tag *gotag-environment* :key #'gotag-prog-tag)))
    (when gotag
      (let ((progdesc (gotag-progdesc gotag)))
	(loop for desc in *progdesc-environment*
	      thereis (not (zerop (progdesc-nbinds desc)))
	      until (eq progdesc desc))))))

))

; From file DJ: L.SYS; QCP2.LISP#316 at 12-May-88 21:41:13
#8R COMPILER#: 
(COMPILER-LET ((*PACKAGE* (PKG-FIND-PACKAGE "COMPILER")))
  (PATCH-SOURCE-FILE "SYS: SYS; QCP2  "

(DEFUN SIMPLEGOP (FORM)
  (AND (EQ (CAR-SAFE FORM) 'GO)
       (not (unbinds-needed-p (second form)))
       (= PDLLVL (GPDLLVL (second FORM)))))

))
