; .EnTete "Le-Lisp (c) version 15.2" " " "Print GC Infos"
; .EnPied "prgcinfo.ll" "%" " "
;
; .Centre "$Header: prgcinfo.ll,v 1.1 89/01/04 19:12:46 chaillou Exp $"
; Print GC Infos in a more readable way than (GCINFO)
; CAUTION : (PRGCINFO) works only with 32bit pointers Le-Lisp
; Use : (PRGCINFO) prints in a readable form the actual sizes
; of the different types of objets present in memory.
(setq #:sys-package:colon 'prgcinfo)
(defvar :initial (gcinfo t))
(defvar :list-name '(cons symbol string vector float fix heap code))
(defvar :list-size '(10 12 14 16 18 20 22 24))
(defvar :list-freq '(1 2 3 4 5 6 7 ()))
(defvar :size-obj '(8 32 8 8 0 0 1 1))
(defun prgcinfo ()
(with ((outchan ()))
(print "Used memory in byte :")
(let ((:total 0.)
(:current (gcinfo)))
(mapc (lambda (name freq size sobj)
(let ((used (- (:intval (nth size :initial) sobj)
(:intval (nth size :current) sobj))))
(unless (or (= used 0) (= used 0.0))
(prin name " : ")
(outpos 10)
(prin (if (fixp freq)
(nth freq :current)
()))
(outpos 14)
(print used)
(incr :total used))))
:list-name
:list-freq
:list-size
:size-obj)
(print "Total = " :total))))
(defun :intval (n sobj)
(* sobj
(if (consp n)
(* (car n) 1024)
n)))