[movitz-cvs] CVS update: movitz/losp/los0-gc.lisp
Frode Vatvedt Fjeld
ffjeld at common-lisp.net
Sat Jul 17 01:56:53 UTC 2004
Update of /project/movitz/cvsroot/movitz/losp
In directory common-lisp.net:/tmp/cvs-serv5834
Modified Files:
los0-gc.lisp
Log Message:
Some cosmetics on gc.
Date: Fri Jul 16 18:56:52 2004
Author: ffjeld
Index: movitz/losp/los0-gc.lisp
diff -u movitz/losp/los0-gc.lisp:1.28 movitz/losp/los0-gc.lisp:1.29
--- movitz/losp/los0-gc.lisp:1.28 Thu Jul 15 14:06:33 2004
+++ movitz/losp/los0-gc.lisp Fri Jul 16 18:56:52 2004
@@ -10,7 +10,7 @@
;;;; Author: Frode Vatvedt Fjeld <frodef at acm.org>
;;;; Created at: Sat Feb 21 17:48:32 2004
;;;;
-;;;; $Id: los0-gc.lisp,v 1.28 2004/07/15 21:06:33 ffjeld Exp $
+;;;; $Id: los0-gc.lisp,v 1.29 2004/07/17 01:56:52 ffjeld Exp $
;;;;
;;;;------------------------------------------------------------------
@@ -19,6 +19,7 @@
(in-package muerte.init)
(defvar *gc-quiet* nil)
+(defvar *gc-running* nil)
(defun make-space (location size)
"Make a space vector at a fixed location."
@@ -246,15 +247,19 @@
(setf (exception-handler 113)
(lambda (exception interrupt-frame)
(declare (ignore exception interrupt-frame))
- (unless *gc-quiet*
- (format t "~&;; GC.. "))
- (stop-and-copy)
- (loop ; This is a nice opportunity to poll the keyboard..
- (case (muerte.x86-pc.keyboard:poll-char)
- ((#\esc)
- (break "Los0 GC keyboard poll."))
- ((nil)
- (return))))))
+ (when *gc-running*
+ (let ((muerte::*error-no-condition-for-debugger* t))
+ (error "Recursive GC triggered.")))
+ (let ((*gc-running t))
+ (unless *gc-quiet*
+ (format t "~&;; GC.. "))
+ (stop-and-copy)
+ (loop ; This is a nice opportunity to poll the keyboard..
+ (case (muerte.x86-pc.keyboard:poll-char)
+ ((#\esc)
+ (break "Los0 GC keyboard poll."))
+ ((nil)
+ (return)))))))
(let* ((actual-duo-space (or duo-space
(allocate-duo-space (* kb-size #x100))))
(last-location (object-location (cons 1 2))))
@@ -351,15 +356,14 @@
(cond
((not (object-in-space-p oldspace x))
x)
- #+ignore
- ((typep x 'muerte::tag6)
- (let ((fwi (position (object-location x) *x* :test #'eq)))
- (if fwi
- (muerte::%word-offset (aref *x* (1+ fwi)) 6)
- (let ((fw (shallow-copy x)))
- (vector-push (object-location x) *x*)
- (vector-push (object-location fw) *x*)
- fw))))
+ #+ignore ((typep x 'muerte::bignum)
+ (let ((fwi (position (object-location x) *x* :test #'eq)))
+ (if fwi
+ (muerte::%word-offset (aref *x* (1+ fwi)) 6)
+ (let ((fw (shallow-copy x)))
+ (vector-push (object-location x) *x*)
+ (vector-push (object-location fw) *x*)
+ fw))))
(t (let ((forwarded-x (memref (object-location x) 0 0 :lisp)))
(if (object-in-space-p newspace forwarded-x)
(progn
@@ -385,16 +389,15 @@
(+ newspace-location (space-fresh-pointer newspace)))
(setf scan-pointer fresh-pointer))
- #+ignore
- (dotimes (i (truncate (length *x*) 2))
- (let ((x (muerte::%word-offset (aref *x* (* i 2)) 6))
- (y (muerte::%word-offset (aref *x* (1+ (* i 2))) 6)))
- (assert (and (object-in-space-p newspace y)
- (object-in-space-p oldspace x)
- (or (typep x 'muerte::std-instance)
- (equalp x y)))
- ()
- "Fail: i=~D, x: ~S/~Z, y: ~S/~Z, o: ~Z, n: ~Z" i x x y y oldspace newspace)))
+ #+ignore (dotimes (i (truncate (length *x*) 2))
+ (let ((x (muerte::%word-offset (aref *x* (* i 2)) 6))
+ (y (muerte::%word-offset (aref *x* (1+ (* i 2))) 6)))
+ (assert (and (object-in-space-p newspace y)
+ (object-in-space-p oldspace x)
+ (or (typep x 'muerte::std-instance)
+ (equalp x y)))
+ ()
+ "Fail: i=~D, x: ~S/~Z, y: ~S/~Z, o: ~Z, n: ~Z" i x x y y oldspace newspace)))
;; GC completed, oldspace is evacuated.
(unless *gc-quiet*
More information about the Movitz-cvs
mailing list