;;; -*- Mode:LISP; Readtable:ZL; Package:USER; Base:8; Patch-File:T -*-
;;; Patch file for System version 126.16
;;; Reason:
;;;  Added *FASD-INDIRECT-ARRAY* in preparation for further cross-compilation changes.
;;; Written 8-Aug-88 16:48:36 by smh (Steve Haflich) at site Gigamos Cambridge
;;; while running on Harpo from band 3
;;; with Experimental System 126.15, ZWEI 125.11, ZMail 73.2, Local-File 75.2, File-Server 24.1, Unix-Interface 13.0, Tape 24.2, Lambda-Diag 17.0, microcode 1762, SDU Boot Tape 3.12, SDU ROM 102, kold 4aug88.



; From modified file DJ: L.SYS; QCFASD.LISP#261 at 8-Aug-88 16:49:58
#8R COMPILER#: 
(COMPILER-LET ((*PACKAGE* (PKG-FIND-PACKAGE "COMPILER")))
  (PATCH-SOURCE-FILE "SYS: SYS; QCFASD  "


(defvar *fasd-indirect-array* nil
  "Bind to an indirect array if we use an 8-bit output stream")

))

; From modified file DJ: L.SYS; QCFASD.LISP#261 at 8-Aug-88 16:50:09
#8R COMPILER#: 
(COMPILER-LET ((*PACKAGE* (PKG-FIND-PACKAGE "COMPILER")))
  (PATCH-SOURCE-FILE "SYS: SYS; QCFASD  "

(defmacro with-open-fasd-file ((stream-variable filename &optional attribute-list) &body body)
  "Open filename and bind stream-variable to a fasd-stream.
No output operations should be performed on the fasd-stream except as a side-affect of
invoking dump-forms-to-fasd-stream."
  (once-only (attribute-list)
    `(with-open-stream (,stream-variable (open-fasd-file ,filename))
       (let ((fasd-stream ,stream-variable))
	 (with-fasd-indirect-array (,stream-variable)
	   (let ((fasd-package nil))		;in case fasd-attributes-list bashes it
	     (locking-resources
	       (fasd-initialize)
	       (fasd-start-file)
	       (fasd-attributes-list
		 (if (getl (locf ,attribute-list) '(:package))
		     ,attribute-list
		   (list* ':package ':user ,attribute-list)))
	       ,@body
	       (fasd-end-whack)
	       (fasd-end-file))))))))

))

; From modified file DJ: L.SYS; QCFASD.LISP#261 at 8-Aug-88 16:50:11
#8R COMPILER#: 
(COMPILER-LET ((*PACKAGE* (PKG-FIND-PACKAGE "COMPILER")))
  (PATCH-SOURCE-FILE "SYS: SYS; QCFASD  "


(defmacro with-fasd-indirect-array ((stream) &body body)
  `(let ((*fasd-indirect-array* (ecase (send ,stream :get :byte-size)
				  (8. (make-array 4096 :element-type '(unsigned-byte 8) :displaced-to "" 
						  :displaced-index-offset 0.))
				  (16. nil))))
     ,@body))


;; Copied from LAD: RELEASE-3.SYS; QCFASD.LISP#258 on 2-Oct-86 05:07:34

))
