(FILECREATED "23-Apr-86 15:49:53" {DSK}<LISPFILES2>DCOMS>GC.;4 3727   

      changes to:  (FNS QP.TRIMCORE)
		   (VARS GCCOMS)

      previous date: " 9-Feb-86 23:32:18" {DSK}<LISPFILES2>DCOMS>GC.;2)


(* Copyright (c) 1986 by Quintus Computer Systems, Inc. All rights reserved.)

(PRETTYCOMPRINT GCCOMS)

(RPAQQ GCCOMS ((FNS QP.ADD.REF QP.SWEEP QP.TRIMCORE \GCSCANPROLOG\)
		 (ADDVARS (GLOBALVARS QP.REF.LIMIT)
			  (GLOBALVARS QP.REF.COUNT)
			  (GLOBALVARS QP.REF.TABLE))
		 (P (SETQ QP.REF.TABLE (HARRAY 40)))
		 (P (SETQ QP.REF.LIMIT (FIX (TIMES (HARRAYSIZE QP.REF.TABLE)
						   .8))))
		 (P (SETQ QP.REF.COUNT 0))))
(DEFINEQ

(QP.ADD.REF
  [LAMBDA (X)
    (if (NOT (OR (LITATOM X)
		       (SMALLP X)
		       (TYPENAMEP X (QUOTE QP.PROCEDURE.RECORD))
		       (\BLOCKDATAP X)
		       (GETHASH X QP.REF.TABLE)))
	then (PUTHASH X T QP.REF.TABLE)
	       (SETQ QP.REF.COUNT (ADD1 QP.REF.COUNT))
	       (if (IGEQ QP.REF.COUNT QP.REF.LIMIT)
		   then (QP.TRIMCORE X)))
    X])

(QP.SWEEP
  [LAMBDA (P Q TABLE COUNT)
    (PROG (Y)
	L   (if (NOT (OR (ILESSP (\GETBASE P 0)
					 other.tag.16)
			       (TYPENAMEP (SETQ Y (\GETBASEPTR P 0))
					    (QUOTE QP.PROCEDURE.RECORD))
			       (\BLOCKDATAP Y)
			       (GETHASH Y TABLE)))
		then (PUTHASH Y T TABLE)
		       (SETQ COUNT (ADD1 COUNT)))
	    (if (EQ P Q)
		then (RETURN COUNT))
	    (SETQ P (\ADDBASE P 2))
	    (GO L])

(QP.TRIMCORE
  (LAMBDA (X)                                                (* pds: "23-Apr-86 15:36")
    (PROG (TABLE COUNT LIMIT)
	    (SETQ LIMIT (HARRAYSIZE QP.REF.TABLE))
	    (SETQ TABLE (HARRAY LIMIT))
	    (SETQ COUNT 0)
	    (put.Amem 1 (get.Aval 1))
	    (put.Amem 2 (get.Aval 2))
	    (put.Amem 3 (get.Aval 3))
	    (put.Amem 4 (get.Aval 4))
	    (SETQ COUNT (QP.SWEEP (loc.Amem 1)
				      (loc.Amem 255)
				      TABLE COUNT))
	    (put.cell H 0 (tag.other X))
	    (SETQ COUNT (QP.SWEEP QP.init.H (get.24 H)
				      TABLE COUNT))
	    (SETQ COUNT (QP.SWEEP QP.init.E (if (before E B)
						    then (get.24 B)
						  else (E.plus.env.size.from.CP))
				      TABLE COUNT))
	    (SETQ QP.REF.COUNT COUNT)
	    (SETQ QP.REF.LIMIT (if (GREATERP COUNT (TIMES LIMIT .75))
				     then (FIX (TIMES LIMIT 1.5))
				   elseif (AND (LESSP COUNT (TIMES LIMIT .25))
						   (IGREATERP LIMIT 40))
				     then (FIX (TIMES LIMIT .7))
				   else LIMIT))
	    (if (EQ QP.REF.LIMIT LIMIT)
		then (SETQ QP.REF.TABLE TABLE)
	      else (SETQ QP.REF.TABLE (HARRAY QP.REF.LIMIT))
		     (MAPHASH TABLE (FUNCTION (LAMBDA (VAL KEY)
				    (PUTHASH KEY VAL QP.REF.TABLE)))))
	    (SETQ QP.REF.LIMIT (FIX (TIMES (HARRAYSIZE QP.REF.TABLE)
						 .8))))
    X))

(\GCSCANPROLOG\
  [LAMBDA NIL
    (if [AND (IGREATERP (ReadPrologTag T0)
			      immed.tag.8)
		 (NOT (SMALLP (ReadPrologPtr T0]
	then (\STKREF (ReadPrologPtr T0)))
    (if [AND (IGREATERP (ReadPrologTag T1)
			      immed.tag.8)
		 (NOT (SMALLP (ReadPrologPtr T1]
	then (\STKREF (ReadPrologPtr T1])
)

(ADDTOVAR GLOBALVARS QP.REF.LIMIT)

(ADDTOVAR GLOBALVARS QP.REF.COUNT)

(ADDTOVAR GLOBALVARS QP.REF.TABLE)
(SETQ QP.REF.TABLE (HARRAY 40))
(SETQ QP.REF.LIMIT (FIX (TIMES (HARRAYSIZE QP.REF.TABLE)
			       .8)))
(SETQ QP.REF.COUNT 0)
(PUTPROPS GC COPYRIGHT ("Quintus Computer Systems, Inc" 1986))
(DECLARE: DONTCOPY
  (FILEMAP (NIL (635 3395 (QP.ADD.REF 645 . 1065) (QP.SWEEP 1067 . 1563) (QP.TRIMCORE 1565 . 3015) (
\GCSCANPROLOG\ 3017 . 3393)))))
STOP