;;; -*- Mode:Lisp; Readtable:CL; Package:USER; Base:8; Patch-File:T -*- ;;; Patch file for System version 121.62 ;;; Reason: ;;; Fix the DO macros for the postultimate time. ;;; Written 4-May-87 10:50:39 by rauen at site LMI Cambridge ;;; while running on Debtor in Possession from band 2 ;;; with Experimental System 121.60, Experimental Lambda-Diag 15.0, Experimental ZMail 70.2, Experimental KERMIT 32.0, Experimental Unix-Interface 10.0, Experimental Local-File 72.0, Experimental FILE-Server 21.0, Experimental Tape 13.0, microcode 1730, SDU Boot Tape 3.14, SDU ROM 103, 121.53. ; From file DJ: L.SYS2; CLMAC.LISP#20 at 4-May-87 10:50:46 #8R SYSTEM-INTERNALS#: (COMPILER-LET ((*PACKAGE* (PKG-FIND-PACKAGE "SYSTEM-INTERNALS"))) (COMPILER::PATCH-SOURCE-FILE "SYS: SYS2; CLMAC  " (defun expand-do-macro (let-type setq-type) #'(lambda (do-form ignore) (separate-do-bindings (second do-form) #'(lambda (binding-names initial-values iteration-clauses) (let* ((loop-tag (gensym)) (test-form (third do-form)) (test (first test-form)) (result (if (null (rest test-form)) '(PROGN NIL) `(PROGN ,@(rest test-form)))) (body (rest (rest (rest do-form))))) (labels ((interleave (x y) (cond ((null x) y) ((null y) x) (t (cons (car x) (interleave y (cdr x))))))) `(BLOCK NIL (,let-type ,(mapcar #'list binding-names initial-values) (TAGBODY ,loop-tag (WHEN ,test (RETURN-FROM NIL ,result)) (PROGN ,@body) (,setq-type ,@(interleave binding-names iteration-clauses)) (GO ,loop-tag)))))))))) ))