;;; -*- Mode:Lisp; Readtable:ZL; Package:USER; Base:8; Patch-File:T -*- ;;; Patch file for System version 126.102 ;;; Reason: ;;; Forms returned by DEFSTRUCT, for structures that include byte fields, no ;;; longer include pre-digested (numeric constant) byte specifiers. That ;;; was not portable. The new behaviour is, in a way, more consistent with ;;; documentation describing how byte fields are computed. ;;; ;;; Tests indicate that this change does not affect behaviour of DEFSTRUCT. ;;; (Testing also revealed other severe bugs in this feature.) ;;; Written 6-Oct-88 17:04:26 by keith (Keith Corbett) at site Gigamos Cambridge ;;; while running on Breaking Glass from band 3 ;;; with Experimental System 126.101, Experimental ZWEI 126.14, Experimental ZMail 74.8, Experimental Local-File 76.0, Experimental File-Server 25.0, Experimental Lambda-Diag 18.0, Experimental Unix-Interface 15.0, Experimental Tape 26.4, microcode 1762, SDU Boot Tape 3.14, SDU ROM 103. ; From modified file DJ: L.SYS2; STRUCT.LISP#338 at 6-Oct-88 17:04:27 #8R SYSTEM-INTERNALS#: (COMPILER-LET ((*PACKAGE* (PKG-FIND-PACKAGE "SYSTEM-INTERNALS"))) (COMPILER::PATCH-SOURCE-FILE "SYS: SYS2; STRUCT  " (DEFUN DEFSTRUCT-PARSE-ONE-FIELD (IT NUMBER PPSS REST CONC-NAME #+MACLISP-10 CHARS &OPTIONAL SLOT-DESCRIPTION) (LET* ((MNAME (IF CONC-NAME #+MACLISP-10 (IMPLODE (APPEND CHARS (EXPLODEN IT))) #-MACLISP-10 (DEFSTRUCT-APPEND-SYMBOLS CONC-NAME IT) IT)) (TYPE T) (ALIST NIL) (READ-ONLY NIL) (BITS NIL) (DOCUMENTATION NIL) TYPEP INITP DOCP ROP (INIT-CODE (IF (NULL REST) (DEFSTRUCT-MAKE-EMPTY) (SETQ INITP T) (DO ((L (CDR REST) (CDDR L))) ((NULL L) (CAR REST)) (SELECTQ (CAR L) (:DOCUMENTATION (SETQ DOCUMENTATION (CADR L) DOCP T)) (:READ-ONLY (SETQ READ-ONLY (CADR L) ROP T)) (:TYPE (SETQ TYPE (CADR L) TYPEP T)) (T (DEFSTRUCT-ERROR "Unknown DEFSTRUCT slot-option" (CAR L)))))))) ;;;;;;How to lose when porting between machines that ;;;;;;have differing representations for byte specs: ;;; ;;; (LET (PP SS) ;;; (IF (LIST-MATCH-P PPSS `(BYTE ,SS ,PP)) (SETQ PPSS ;;; (BYTE SS PP)))) ;;;;;; (IF (NULL SLOT-DESCRIPTION) (CONS IT (MAKE-DEFSTRUCT-SLOT-DESCRIPTION :NUMBER NUMBER :PPSS PPSS :INIT-CODE INIT-CODE :REF-MACRO-NAME MNAME :TYPE TYPE :PROPERTY-ALIST ALIST :READ-ONLY READ-ONLY :BITS BITS :DOCUMENTATION DOCUMENTATION)) (SETF (DEFSTRUCT-SLOT-DESCRIPTION-REF-MACRO-NAME) MNAME) (if ppss (setf (defstruct-slot-description-ppss) ppss)) (IF INITP (SETF (DEFSTRUCT-SLOT-DESCRIPTION-INIT-CODE) INIT-CODE)) (IF DOCP (SETF (DEFSTRUCT-SLOT-DESCRIPTION-DOCUMENTATION) DOCUMENTATION)) (IF TYPEP (IF (SUBTYPEP TYPE (LET ((TEM (DEFSTRUCT-SLOT-DESCRIPTION-TYPE))) (IF (EQ TEM 'NOTYPE) T TEM))) (SETF (DEFSTRUCT-SLOT-DESCRIPTION-TYPE) TYPE) (DEFSTRUCT-ERROR "The slot :TYPE specified is incompatible with the :INCLUDEd slot type" IT))) (IF ROP (IF (AND (DEFSTRUCT-SLOT-DESCRIPTION-READ-ONLY) (NOT READ-ONLY)) (DEFSTRUCT-ERROR "A slot is not :READ-ONLY, but the :INCLUDEd slot is" IT) (SETF (DEFSTRUCT-SLOT-DESCRIPTION-READ-ONLY) READ-ONLY)))))) ))