;;; -*- Mode:Lisp; Readtable:ZL; Package:USER; Base:8; Patch-File:T -*-
;;; Private patches made by rg
;;; Reason:
;;;  lap quote stuff.
;;; Written 24-Jan-86 11:02:00 by rg of LMI Cambridge
;;; while running on Explorer Two from band 3
;;; with Experimental System 109.92, Experimental Local-File 64.1, Experimental FILE-Server 17.1, Experimental MagTape 3.5, microcode 1346, GC5 FS LAM.



; From modified file DJ: L.SYS; QCLAP.LISP#265 at 24-Jan-86 11:02:11
#8R COMPILER#:
(COMPILER-LET ((*PACKAGE* (PKG-FIND-PACKAGE "COMPILER")))
  (PATCH-SOURCE-FILE "SYS: SYS; QCLAP  "

(DEFUN LAP-QUOTE-ADR (ITEM &AUX TM)
  (COND ((SETQ TM (QFIND-CONSTANTS-PAGE ITEM))
	 (+ TM (GET 'CONST-PAGE 'QLVAL)))
	((DO ((IDX 0 (1+ IDX))
	       (QUOTE-LIST QUOTE-LIST (CDR QUOTE-LIST))
	       (contains-load-time-eval (CONTAINS-LOAD-TIME-EVAL ITEM)))
	     ((NULL QUOTE-LIST) (SETQ TM NIL))
	   (cond ((TREE-EQUAL ITEM (CAR QUOTE-LIST)
			     :TEST ;;>> EQUALP is such a complete dog.
			     (LAMBDA (X Y) (IF (STRINGP X) (EQUAL X Y) (EQL X Y))))
		  (if contains-load-time-eval
		      (rplaca quote-list (list '**used-load-time-eval**)))
		  (RETURN (SETQ TM IDX)))))
	 (+ TM (QLEVAL 'QUOTE-BASE T)))
	(T (BARF ITEM "not on quote-list" 'BARF)
	   0)))

))

; From modified file DJ: L.SYS; QCLAP.LISP#265 at 24-Jan-86 11:02:22
#8R COMPILER#:
(COMPILER-LET ((*PACKAGE* (PKG-FIND-PACKAGE "COMPILER")))
  (PATCH-SOURCE-FILE "SYS: SYS; QCLAP  "

(DEFUN QADD (X) 
  (cond	((QFIND-CONSTANTS-PAGE X))
	((or (CONTAINS-LOAD-TIME-EVAL X)
	     (null (CL:member X QUOTE-LIST
	       ;; EQUALP is such as dog
			     :TEST (LAMBDA (X Y)
				     (TREE-EQUAL X Y
						 :TEST (LAMBDA (X Y) (IF (STRINGP X)
									 (EQUAL X Y)
								       (EQL X Y))))))))
	 (PUSH X QUOTE-LIST)))
    X)

(DEFUN QLP2-Q (WD)				;Pass 2 for Q area
  (IF (ATOM WD)
      (IF (EQ WD 'PROGSA)
	  T					;Advance to unboxed area
	(BARF WD "Tag in q-area" 'BARF)
	NIL)
    (CASE (CAR WD)
      (QTAG
       (QLP2-DEFSYM (CADR WD) (TRUNCATE ADR 2))
       (IF (EQ (CADR WD) 'QUOTE-BASE)
	   (MAPC 'QLP2-Q QUOTE-LIST)))			;Dump quote table
      (PARAM)
      (ENDLIST				;Terminate list that has just been assembled
       (LAP-STORE-NXTNIL-CDR-CODE))
      (MFEF
       (LAP-MFEF WD))
      (S-V-BLOCK
       (SETQ ADR (QLP2-S-V-BLOCK ADR)))
      (CONSTRUCT-MACRO
       (SETQ LAP-MACRO-FLAG T))
      (A-D-L
       (SETQ ADR (QLP-A-D-L ADR T)))
      (DEBUG-INFO
       (LAP-D-OUT (CDR WD))
       (LAP-STORE-NXTNIL-CDR-CODE)
       (INCF ADR 2))
      (VARIABLES-USED-IN-LEXICAL-CLOSURES
       (LAP-D-OUT (CDR WD))
       (LAP-STORE-NXTNIL-CDR-CODE)
       (INCF ADR 2))
      (SELF-FLAVOR
       (LAP-D-OUT (CADR WD))
       (LAP-STORE-NXTNIL-CDR-CODE)
       (INCF ADR 2))
      (BREAKOFFS
       ;; When we see the BREAKOFFS command,
       ;; we copy the fef offsets of where the ptrs to broken-off fns should go
       ;; into the cars of the list which is the cadr of the breakoffs command.
       ;; That list is shared with a debug-info item
       ;; which is supposed to contain a list of those offsets.
       (DOLIST (OFFSET *BREAKOFF-FUNCTION-OFFSETS*)
	 (SETF (NTH (CDR OFFSET) (CADR WD)) (CAR OFFSET)))
       (WHEN (MEMQ NIL (CADR WD))
	 (BARF NIL "Missing breakoff-function, position"
	       (FIND-POSITION-IN-LIST NIL (CADR WD)))))
      (QUOTE
       (LAP-D-OUT (CADR WD))
       (INCF ADR 2))
      (LOCATIVE-TO-S-V-CELL
       (LAP-Q-OUT NIL 'QZLOC '1 (CADR WD))
       (INCF ADR 2))
      (FUNCTION
       (IF (SYMBOLP (CADR WD))
	   (LAP-Q-OUT NIL 'QZEVCP '2 (CADR WD))
	   (LAP-Q-OUT NIL 'QZEVCP NIL 
		      (IF (EQ LAP-MODE 'COMPILE-TO-CORE)
			  (FDEFINITION-LOCATION (CADR WD))
			(CONS EVAL-AT-LOAD-TIME-MARKER
			      `(FDEFINITION-LOCATION ',(CADR WD))))))
       (FUNCTION-REFERENCED (CADR WD) FCTN-NAME)
       (INCF ADR 2))
      (SELF-REF
       (LAP-Q-OUT NIL 'QZSRP NIL
		  (IF (EQ LAP-MODE 'COMPILE-TO-CORE)
		      (SI:FLAVOR-VAR-SELF-REF-INDEX (CDR WD))
		      (CONS EVAL-AT-LOAD-TIME-MARKER
			    `(SI:FLAVOR-VAR-SELF-REF-INDEX ',(CDR WD)))))
       (INCF ADR 2))
      (BREAKOFF-FUNCTION
       (PUSH (CONS (TRUNCATE ADR 2) (CADDR (CADR WD))) *BREAKOFF-FUNCTION-OFFSETS*)
       (LAP-D-OUT (CADR WD))
       (INCF ADR 2))
      (TAG
       (LAP-D-OUT (QLEVAL (CADR WD) T))
       (INCF ADR 2))
      (FIXE
       (LAP-D-OUT (LAP-WORD-EVAL `(EXTENDED-ADDRESS 0 ,(CADR WD))))
       (INCF ADR 2))
      (T
       (BARF WD "Unknown op in q-area lap" 'BARF)))
    NIL))
))
