[movitz-cvs] CVS update: movitz/losp/muerte/scavenge.lisp

Frode Vatvedt Fjeld ffjeld at common-lisp.net
Mon Jul 12 07:56:45 UTC 2004


Update of /project/movitz/cvsroot/movitz/losp/muerte
In directory common-lisp.net:/tmp/cvs-serv6681

Modified Files:
	scavenge.lisp 
Log Message:
Tweaks to map-heap-words, added some invariant assertions.

Date: Mon Jul 12 00:56:45 2004
Author: ffjeld

Index: movitz/losp/muerte/scavenge.lisp
diff -u movitz/losp/muerte/scavenge.lisp:1.13 movitz/losp/muerte/scavenge.lisp:1.14
--- movitz/losp/muerte/scavenge.lisp:1.13	Wed Jul  7 10:37:25 2004
+++ movitz/losp/muerte/scavenge.lisp	Mon Jul 12 00:56:45 2004
@@ -10,7 +10,7 @@
 ;;;; Author:        Frode Vatvedt Fjeld <frodef at acm.org>
 ;;;; Created at:    Mon Mar 29 14:54:08 2004
 ;;;;                
-;;;; $Id: scavenge.lisp,v 1.13 2004/07/07 17:37:25 ffjeld Exp $
+;;;; $Id: scavenge.lisp,v 1.14 2004/07/12 07:56:45 ffjeld Exp $
 ;;;;                
 ;;;;------------------------------------------------------------------
 
@@ -27,6 +27,7 @@
 ;; circumstances, i.e. when you know there is no outside GC
 ;; etc. involved.
 
+(defvar *scan*)
 
 (defun map-heap-words (function start-location end-location)
   "Map function over each potential pointer word between
@@ -49,11 +50,13 @@
 		  (:compile-form (:result-mode :eax) ,x)
 		  (:andl #xffff0000 :eax)
 		  (:shrl ,(- 16 movitz:+movitz-fixnum-shift+) :eax))))
-    (do ((scan start-location (1+ scan)))
+    (do ((*scan-last* nil)		; Last scanned object, for debugging.
+	 (scan start-location (1+ scan)))
 	((>= scan end-location))
-      (let (;; (*i* i)
+      (declare (special *scan-last*))
+      (let ((*scan* scan)
 	    (x (memref scan 0 0 :lisp)))
-	;; (declare (special *i*))
+	(declare (special *scan*))
 	(cond
 	 ((typep x '(or null fixnum character)))
 	 ((scavenge-typep x :illegal)
@@ -64,10 +67,12 @@
 	  ;; Just skip the bigits
 	  (let* ((bigits (word-upper16 x))
 		 (delta (1+ (logand bigits -2))))
+	    (setf *scan-last* (%word-offset scan #.(movitz:tag :other)))
 	    (incf scan delta)))
 	 ((scavenge-typep x :funobj)
 	  (assert (evenp scan) ()
 	    "Scanned #x~Z at odd address #x~X." x scan)
+	  (setf *scan-last* (%word-offset scan #.(movitz:tag :other)))
 	  ;; Process code-vector pointer specially..
 	  (let* ((funobj (%word-offset scan #.(movitz:tag :other)))
 		 (code-vector (funobj-code-vector funobj))
@@ -86,8 +91,6 @@
 	  (assert (evenp scan) ()
 	    "Scanned #x~Z at odd address #x~X." x scan)
 	  (error "Scanning an infant object ~Z at ~S (end ~S)." x scan end-location))
-	 ((scavenge-typep x :old-vector)
-	  (error "Scanned old-vector #x~Z at odd address #x~X." x scan))
 	 ((or (scavenge-wide-typep x :basic-vector
 				   #.(bt:enum-value 'movitz:movitz-vector-element-type :u8))
 	      (scavenge-wide-typep x :basic-vector
@@ -97,18 +100,29 @@
 	  (assert (evenp scan) ()
 	    "Scanned #x~Z at odd address #x~X." x scan)
 	  (let ((len (memref scan 0 1 :lisp)))
-	    ;; (warn "scavenge at #x~X u8 vector len ~D." scan len)
+	    (check-type len positive-fixnum)
+	    (setf *scan-last* (%word-offset scan #.(movitz:tag :other)))
 	    (incf scan (1+ (* 2 (truncate (+ 7 len) 8))))))
 	 ((scavenge-wide-typep x :basic-vector #.(bt:enum-value 'movitz:movitz-vector-element-type :u16))
 	  (assert (evenp scan) ()
 	    "Scanned #x~Z at odd address #x~X." x scan)
 	  (let ((len (memref scan 0 1 :lisp)))
+	    (check-type len positive-fixnum)
+	    (setf *scan-last* (%word-offset scan #.(movitz:tag :other)))
 	    (incf scan (1+ (* 2 (truncate (+ 3 len) 4))))))
 	 ((scavenge-wide-typep x :basic-vector #.(bt:enum-value 'movitz:movitz-vector-element-type :u32))
 	  (assert (evenp scan) ()
 	    "Scanned #x~Z at odd address #x~X." x scan)
 	  (let ((len (memref scan 0 1 :lisp)))
+	    (check-type len positive-fixnum)
+	    (setf *scan-last* (%word-offset scan #.(movitz:tag :other)))
 	    (incf scan (1+ (logand (1+ len) -2)))))
+	 ((and (scavenge-typep x :basic-vector)
+	       (not (scavenge-wide-typep x :basic-vector
+					 #.(bt:enum-value 'movitz:movitz-vector-element-type :any-t))))
+	  (error "Scanned unknown basic-vector #x~Z at address #x~X." x scan))
+	 ((scavenge-typep x :old-vector)
+	  (error "Scanned old-vector #x~Z at address #x~X." x scan))
 	 ((eq x (fixnum-word 3))
 	  (incf scan)
 	  (incf scan (memref scan 0 0 :lisp)))





More information about the Movitz-cvs mailing list