;;; -*- Mode:Lisp; Readtable:ZL; Package:USER; Base:8; Patch-File:T -*- ;;; Patch file for System version 126.40 ;;; Reason: ;;; Add FASD-INDEX, and make FASL-OP-K-IMMEDIATES and FASD-K-LOAD-TIME-EVALS. ;;; Written 11-Aug-88 13:33:41 by wkf (William K. Foster) at site Gigamos Cambridge ;;; while running on Love from band 2 ;;; with Experimental System 126.32, ZWEI 125.14, 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.13, SDU ROM 102, Kcold Loaded -- 8/3/88. ; From modified file DJ: L.SYS; QCFASD.LISP#263 at 11-Aug-88 13:33:41 #8R COMPILER#: (COMPILER-LET ((*PACKAGE* (PKG-FIND-PACKAGE "COMPILER"))) (PATCH-SOURCE-FILE "SYS: SYS; QCFASD  " (defun fasd-index (idx) (cond (( idx (lsh 1 16.)) (fasd-start-group nil 2 si:fasl-op-large-index) (fasd-nibble (ldb (byte 8. 16.) idx)) (fasd-nibble (ldb (byte 16. 0) idx))) (t (fasd-start-group nil 1 si::fasl-op-index) ;Just reference it in the FASL TABLE. (fasd-nibble idx)))) )) ; From modified file DJ: L.SYS; QCFASD.LISP#263 at 11-Aug-88 13:33:54 #8R COMPILER#: (COMPILER-LET ((*PACKAGE* (PKG-FIND-PACKAGE "COMPILER"))) (PATCH-SOURCE-FILE "SYS: SYS; QCFASD  " (DEFUN FASD-CONSTANT (S-EXP &OPTIONAL (LIST-OP SI::FASL-OP-LIST)) (BLOCK NIL (AND FASD-NEW-SYMBOL-FUNCTION ;For FASD-SYMBOLS-PROPERTIES, (SYMBOLP S-EXP) ;make sure we examine all symbols in (FUNCALL FASD-NEW-SYMBOL-FUNCTION S-EXP)) ;the data that we dump. (LET ((idx (FASD-TABLE-LOOKUP S-EXP))) ;Check if this object already dumped (WHEN idx ;Yup. (fasd-index idx) (RETURN idx))) (TYPECASE S-EXP (INTEGER (FASD-FIXED S-EXP)) (CHARACTER (FASD-CHARACTER S-EXP)) (SHORT-FLOAT (FASD-SHORT-FLOAT S-EXP)) (SINGLE-FLOAT (FASD-SINGLE-FLOAT S-EXP)) (SYMBOL (FASD-SYMBOL S-EXP)) (STRING (RETURN (FASD-STRING S-EXP))) (ARRAY (RETURN (FASD-ARRAY S-EXP))) #+(target lambda) (COMPILED-FUNCTION (FASD-FEF S-EXP)) #+(target falcon) (compiled-function ;; Close approximation; as close as could make any sense anyway, really, ;; except for anonymous compiled functions! (let ((name (function-name s-exp))) (unless name (ferror "We cannot yet dump anonymous compiled functions as constants on the Falcon.")) (fasd-k-compiled-function name))) (CONS (RETURN (FASD-LIST S-EXP LIST-OP))) (INSTANCE (FASD-EVAL-CONSTRUCT-CONSTANT (OR (SEND S-EXP ':SEND-IF-HANDLES ':FASD-FORM) (and (send s-exp :get-handler-for :reconstruction-init-plist) `(APPLY 'MAKE-INSTANCE '(,(TYPE-OF S-EXP) . ,(SEND S-EXP ':RECONSTRUCTION-INIT-PLIST)))) (ferror "The instance ~S cannot be compiled.~ ~&It is an instance of a type which does not provide a way to make a fast-load representation." s-exp)))) (RATIO (RETURN (FASD-RATIONAL S-EXP))) (COMPLEX (RETURN (FASD-COMPLEX S-EXP))) (T (FERROR "The constant ~S cannot be compiled.~ ~&The data-type ~S is not suitable for compiling as a fast-load constant (FASD-CONSTANT)." S-EXP (TYPE-OF S-EXP)))) (FASD-TABLE-ADD S-EXP))) )) ; From modified file DJ: L.SYS; QCFASD.LISP#263 at 11-Aug-88 13:34:00 #8R COMPILER#: (COMPILER-LET ((*PACKAGE* (PKG-FIND-PACKAGE "COMPILER"))) (PATCH-SOURCE-FILE "SYS: SYS; QCFASD  " (defun fasd-k-immediates (function-index immediates) (let ((len (length immediates))) (fasd-start-group nil 0 si::fasl-op-k-immediates) (fasd-index function-index) (fasd-fixed (// len 2)) (do ((i 0 (+ i 2))) ((>= i len)) (fasd-fixed (svref immediates i)) ;ref offset (fasd-constant (svref immediates (1+ i)))))) ;immediate object )) ; From modified file DJ: L.SYS; QCFASD.LISP#263 at 11-Aug-88 13:34:04 #8R COMPILER#: (COMPILER-LET ((*PACKAGE* (PKG-FIND-PACKAGE "COMPILER"))) (PATCH-SOURCE-FILE "SYS: SYS; QCFASD  " (defun fasd-k-load-time-evals (function-index items) (let ((len (length items))) (fasd-start-group nil 0 si::fasl-op-k-load-time-evals) (fasd-index function-index) (fasd-fixed len) (loop for (offset form) in items do (fasd-fixed offset) ;ref offset (fasd-constant form)))) ))