;;; -*- Mode:Lisp; Readtable:ZL; Package:USER; Base:8; Patch-File:T -*-
;;; Patch file for System version 126.78
;;; Reason:
;;;  Change COMPILER:WARN to use COPY-TREE to push its &rest args onto list
;;;  of compiler warnings.  It was using SI:COPY-OBJECT-TREE to copy all
;;;  levels of its args in temporary areas.  With GC, this isn't needed; and,
;;;  compile-time forms are usually simple enough, that we shouldn't have to
;;;  be paranoid (and time-consuming) about copying 12 levels of structure!
;;;  Another benefit:  the modified definition will port.
;;;
;;;  Also improve doc string, and mention new severity keyword :NOT-PORTABLE.
;;; Written 13-Sep-88 15:35:56 by keith (Keith Corbett) at site Gigamos Cambridge
;;; while running on Breaking Glass from band 3
;;; with Experimental System 126.77, Experimental ZWEI 126.10, Experimental ZMail 74.1, Experimental Local-File 76.0, Experimental File-Server 25.0, Experimental Unix-Interface 14.0, Experimental Tape 25.1, Experimental Lambda-Diag 18.0, microcode 1762, SDU Boot Tape 3.14, SDU ROM 103, Lambda/Falcon Development System.



; From modified file DJ: L.SYS; QCFILE.LISP#377 at 13-Sep-88 15:35:56
#8R COMPILER#: 
(COMPILER-LET ((*PACKAGE* (PKG-FIND-PACKAGE "COMPILER")))
  (PATCH-SOURCE-FILE "SYS: SYS; QCFILE  "

(DEFUN COMPILER:WARN (TYPE SEVERITY FORMAT-STRING &REST ARGS)
  "Record and print a compiler warning.
TYPE describes the particular kind of problem, such as FUNCTION-NOT-VALID.
SEVERITY is a symbol in the keyword package giving a broader classification;
  see the source for a list of possible severities.
FORMAT-STRING and ARGS are used to print the warning.
/
Severities include /(though are not limited to/):
/
 :IMPLAUSIBLE - something that is not intrinsically wrong but is probably due
	to a mistake of some sort.
 :IMPOSSIBLE - something that cannot have a meaning.
 :MISSING-DECLARATION - free variable not declared special, usually.
 :PROBABLE-ERROR - something that is an error unless you have changed something else.
 :OBSOLETE - something that you shouldn't use any more.
 :VERY-OBSOLETE - similar to :OBSOLETE, only more so.
 :NOT-PORTABLE - code that may not be portable between LISP implementations.
 :ERROR - there was an error in reading or macro expansion.
 :FATAL - there was an error that prevents further compilation."
  (declare (zwei:indentation (2 1)))
  (APPLY #'SI:RECORD-AND-PRINT-WARNING TYPE SEVERITY NIL FORMAT-STRING
	 ;;;>>>Don't need to worry about temp areas with Lambda GC.
	 ;;	 (LET ((DEFAULT-CONS-AREA BACKGROUND-CONS-AREA))
	 ;;	   ;; Copy temp area data only; note that ARGS lives in PDL-AREA.
	 ;;	   ;; on error for nonexistent package refname.
	 ;;	   (MAPCAR (LAMBDA (ARG) (SI:COPY-OBJECT-TREE ARG T 12.)) ARGS))
	 ;;;Other systems don't put &rest args on stack, but args might get bashed
	 ;;;during RECORD-WARNING's list-munging.  So, 'tho I don't know if this is needed:
	 ;;;  -Keith
	 (copy-tree args)))

))
