;;; -*- Mode:Lisp; Readtable:ZL; Package:USER; Base:8; Patch-File:T -*- ;;; Patch file for System version 121.1 ;;; Reason: ;;; * Changes from Release 3: ;;; 218: ;;; Describing a symbol uses better criteria for figuring out when ;;; it is interned in other packages. ;;; MACROLET'ed macros are now seen by local functions. ;;; 210: ;;; OK, so LISP:TIME is a macro. Sue me. ;;; 222: ;;; Fix COMPILER::FIX-SYNONYM-SPECIAL-FORM, which wasn't rewriting forms ;;; using special forms aliased to other special forms correctly. ;;; The most common lossage occured when advising a function after binding ;;; ZL:COMPILE-ENCAPSULATIONS-FLAG non-NIL. ;;; 237: ;;; Fix redisplayer of RH buffer to call :STRING-OUT with the ;;; END argument supplied, avoiding possible bombouts due to ;;; STRING-LENGTH. ;;; SI::SET-DOCUMENTATION doesn't add an entry on the alist if the ;;; documentation is null. ;;; Written 29-Dec-86 15:53:24 by rg at site LMI Cambridge ;;; while running on Curley from band 2 ;;; with Experimental System 121.0, Experimental Lambda-Diag 15.0, Experimental ZMail 70.0, Experimental KERMIT 32.0, Experimental Unix-Interface 10.0, Experimental Local-File 72.0, Experimental FILE-Server 21.0, Experimental Tape 13.0, Experimental IMicro 19.0, microcode 1729, SDU Boot Tape 3.14, SDU ROM 103. ; From modified file DJ: L.WINDOW; RH.LISP#178 at 29-Dec-86 15:53:26 #8R TV#: (COMPILER-LET ((*PACKAGE* (PKG-FIND-PACKAGE "TV"))) (COMPILER::PATCH-SOURCE-FILE "SYS: WINDOW; RH  " (DEFUN-RH RH-REPRINT-INPUT (&OPTIONAL CHAR DONT-SET-PROMPT-CURSORPOS) "Reprint the contents of the rubout handler buffer at the current cursor position." (if (characterp char) (setq char (char-int char))) (UNLESS DONT-SET-PROMPT-CURSORPOS (multiple-value-setq (PROMPT-STARTING-X PROMPT-STARTING-Y) (SEND SELF :READ-CURSORPOS))) (LET ((PROMPT (OR (ASSQ ':REPROMPT RUBOUT-HANDLER-OPTIONS) (ASSQ ':PROMPT RUBOUT-HANDLER-OPTIONS)))) (IF PROMPT (RUBOUT-HANDLER-PROMPT (CADR PROMPT) SELF CHAR))) (MULTIPLE-VALUE-SETQ (RUBOUT-HANDLER-STARTING-X RUBOUT-HANDLER-STARTING-Y) (SEND SELF :READ-CURSORPOS)) (LET ((MORE-PROCESSING-GLOBAL-ENABLE NIL)) (SEND SELF :STRING-OUT RUBOUT-HANDLER-BUFFER 0 (length rubout-handler-buffer))) (RH-CURSOR-MOTION (RH-TYPEIN-POINTER)) NIL) )) ; From modified file DJ: L.SYS; QRAND.LISP#492 at 29-Dec-86 15:55:52 #8R SYSTEM-INTERNALS#: (COMPILER-LET ((*PACKAGE* (PKG-FIND-PACKAGE "SYSTEM-INTERNALS"))) (COMPILER::PATCH-SOURCE-FILE "SYS: SYS; QRAND  " (defun cli:make-array (dimensions &rest options &key element-type initial-element initial-contents adjustable fill-pointer displaced-to displaced-index-offset) (declare (arglist dimensions &key element-type initial-element initial-contents adjustable fill-pointer displaced-to displaced-index-offset) ;; Just using &KEY for checking. (ignore element-type initial-element initial-contents adjustable fill-pointer displaced-index-offset) (values array)) ;; Don't allow fixnums for displaced location. (check-type displaced-to (or null array)) ;; ZL:MAKE-ARRAY returns three values. (values (apply #'zl:make-array dimensions options))) )) ; From modified file DJ: L.SYS; QRAND.LISP#492 at 29-Dec-86 15:56:18 #8R SYSTEM-INTERNALS#: (COMPILER-LET ((*PACKAGE* (PKG-FIND-PACKAGE "SYSTEM-INTERNALS"))) (COMPILER::PATCH-SOURCE-FILE "SYS: SYS; QRAND  " (defmacro cli:time (form) "Evaluate FORM in the current lexical environment, returning the values it returns, while printing to *TRACE-OUTPUT* a message saying how long it took." (let ((xtime (gensym)) (otime (gensym)) (ntime (gensym)) (values (gensym))) `(let ((,xtime (time:microsecond-time)) (,otime (time:microsecond-time)) (,values (multiple-value-list ,form)) (,ntime (time:microsecond-time))) (format *trace-output* "~&Evaluation of ~S took ~:D microseconds." ',form (- (+ ,ntime ,xtime) ,otime ,otime)) (values-list ,values)))) (defun time (&optional form) "Time in 60'ths of a second. Only differences between values are significant. Time values wrap around about once a day, so use TIME-LESSP, TIME-INCREMENT and TIME-DIFFERENCE to compare and compute times. If FORM is specified, we evaluate it, return the values it returns, while printing to *TRACE-OUTPUT* a message saying how long it took." (if form (eval `(cli:time ,form)) ;; Blech, but I don't really care (time-in-60ths))) )) ; From modified file DJ: L.SYS; QRAND.LISP#492 at 29-Dec-86 15:57:55 #8R SYSTEM-INTERNALS#: (COMPILER-LET ((*PACKAGE* (PKG-FIND-PACKAGE "SYSTEM-INTERNALS"))) (COMPILER::PATCH-SOURCE-FILE "SYS: SYS; QRAND  " (DEFUN SET-DOCUMENTATION (SYMBOL DOC-TYPE VALUE) (LET* ((S (SYMBOL-NAME DOC-TYPE)) (C (ASSOC-EQUAL S (GET SYMBOL 'DOCUMENTATION-PROPERTY)))) (IF C (SETF (CDR C) VALUE) (when value ;; don't make an entry if it's null (LET ((DEFAULT-CONS-AREA (IF (= (%AREA-NUMBER SYMBOL) NR-SYM) PROPERTY-LIST-AREA BACKGROUND-CONS-AREA))) (PUSH (CONS S VALUE) (GET SYMBOL 'DOCUMENTATION-PROPERTY)))))) VALUE) )) ; From modified file DJ: L.SYS; QCOPT.LISP#172 at 29-Dec-86 15:58:31 #8R COMPILER#: (COMPILER-LET ((*PACKAGE* (PKG-FIND-PACKAGE "COMPILER"))) (PATCH-SOURCE-FILE "SYS: SYS; QCOPT  " (defun fix-synonym-special-form (form) (cons (let ((original (si::interpreter-special-form (car form)))) (if (null original) ;; not really a special form ?? Well... (function-name (symbol-function (car form))) (si::interpreter-special-form-name original))) (cdr form))) )) ; From modified file DJ: L.SYS; QCP1.LISP#674 at 29-Dec-86 16:00:30 #8R COMPILER#: (COMPILER-LET ((*PACKAGE* (PKG-FIND-PACKAGE "COMPILER"))) (PATCH-SOURCE-FILE "SYS: SYS; QCP1  " (defun (:property lambda p1) (form) (breakoff form *function-environment*)) )) ; From modified file DJ: L.SYS; QCP1.LISP#674 at 29-Dec-86 16:01:10 #8R COMPILER#: (COMPILER-LET ((*PACKAGE* (PKG-FIND-PACKAGE "COMPILER"))) (PATCH-SOURCE-FILE "SYS: SYS; QCP1  " (DEFUN P1FUNCTION (FORM &AUX (FUNCTION (CADR FORM))) (COND ((SYMBOLP FUNCTION) (LET ((TM (ASSQ FUNCTION *LOCAL-FUNCTIONS*))) (IF TM ;Ref to a local fn made by FLET or LABELS: (TRY-REF-LEXICAL-HOME ;Really ref the local var that holds it. (CADR TM) `(FUNCTION ,function)) FORM))) ;Global function definition. ;;>> Should barf about macros and special forms! ((FUNCTIONP FUNCTION T) ;Functional constant (SETQ FUNCTION (LAMBDA-MACRO-EXPAND FUNCTION)) (IF (MEMQ (CAR-SAFE FUNCTION) '(LAMBDA NAMED-LAMBDA)) (BREAKOFF FUNCTION *function-environment*) `',FUNCTION)) ((AND (CONSP FUNCTION) ;Function spec (VALIDATE-FUNCTION-SPEC FUNCTION)) FORM) (T (WARN 'BAD-ARGUMENT :IMPOSSIBLE "The argument of ~S is ~S, neither a function nor the name of one." 'FUNCTION (CADR FORM)) ''NIL))) )) ; From modified file DJ: L.SYS; DESCRIBE.LISP#21 at 29-Dec-86 16:01:55 #10R SYSTEM-INTERNALS#: #!:CL (COMPILER-LET ((*PACKAGE* (PKG-FIND-PACKAGE "SYSTEM-INTERNALS"))) (COMPILER::PATCH-SOURCE-FILE "SYS: SYS; DESCRIBE  " (defun describe-symbol (sym) (let ((symbol-package (symbol-package sym))) (format t "~%Symbol ~S is in ~:[no~;the ~:*~A~] package." sym (symbol-package sym)) (let ((tem nil)) (dolist (p *all-packages*) (unless (eq p symbol-package) (multiple-value-bind (s flag) (find-symbol sym p) (when (and flag (eq s sym) ;; are we talking about the same symbol ? (not (eq flag :inherited))) (push p tem))))) (when tem (format t "~% It is ~:[strangely~;also~] interned in package~P ~{~A~^, ~}" symbol-package (length tem) tem)))) (when (and (boundp sym) (not (keywordp sym))) (let ((*print-level* *describe-print-level*) (*print-length* *describe-print-length*)) (format t "~%The value of ~S is ~S" sym (symbol-value sym))) (describe-1 (symbol-value sym))) (when (fboundp sym) (let ((*print-level* *describe-print-level*) (*print-length* *describe-print-length*)) (ignore-errors (format t "~%The function definition of ~S is ~S: ~S" sym (symbol-function sym) (arglist sym)))) (describe-1 (symbol-function sym))) (do ((pl (symbol-plist sym) (cddr pl)) (*print-level* *describe-print-level*) (*print-length* *describe-print-length*)) ((null pl)) (format t "~%~S has property ~S: ~S" sym (car pl) (cadr pl)) (describe-1 (cadr pl))) (if (not (or (boundp sym) (fboundp sym) (symbol-plist sym))) (format t "~%It has no value, definition or properties")) nil) ))