[movitz-cvs] CVS update: movitz/losp/muerte/inspect.lisp
Frode Vatvedt Fjeld
ffjeld at common-lisp.net
Mon Mar 29 14:33:29 UTC 2004
Update of /project/movitz/cvsroot/movitz/losp/muerte
In directory common-lisp.net:/tmp/cvs-serv25952
Modified Files:
inspect.lisp
Log Message:
Some new functions required by GC functionality.
Date: Mon Mar 29 09:33:29 2004
Author: ffjeld
Index: movitz/losp/muerte/inspect.lisp
diff -u movitz/losp/muerte/inspect.lisp:1.4 movitz/losp/muerte/inspect.lisp:1.5
--- movitz/losp/muerte/inspect.lisp:1.4 Fri Mar 26 09:05:20 2004
+++ movitz/losp/muerte/inspect.lisp Mon Mar 29 09:33:29 2004
@@ -10,7 +10,7 @@
;;;; Author: Frode Vatvedt Fjeld <frodef at acm.org>
;;;; Created at: Fri Oct 24 09:50:41 2003
;;;;
-;;;; $Id: inspect.lisp,v 1.4 2004/03/26 14:05:20 ffjeld Exp $
+;;;; $Id: inspect.lisp,v 1.5 2004/03/29 14:33:29 ffjeld Exp $
;;;;
;;;;------------------------------------------------------------------
@@ -168,6 +168,24 @@
(when (member :catch types)
(format t "~&catch: ~Z: ~S" tag tag))))))
+(defun shallow-copy (old)
+ "Allocate a new object that is similar to the old one."
+ (etypecase old
+ (cons
+ (cons (car old) (cdr old)))
+ (std-instance
+ (allocate-std-instance (std-instance-class old)
+ (std-instance-slots old)))
+ (symbol
+ (copy-symbol old t))
+ (vector
+ (make-array (array-dimension old 0)
+ :element-type (array-element-type old)
+ :initial-contents old
+ :fill-pointer (fill-pointer old)))
+ (function
+ (copy-funobj old))
+ ))
(defun malloc-words (words)
(malloc-clumps (1+ (truncate (1+ words) 2))))
@@ -182,3 +200,60 @@
(setf (memref x -6 (* i 2) :lisp) nil
(memref x -2 (* i 2) :lisp) nil))
x))
+
+(defun malloc-data-clumps (clumps)
+ "Allocate clumps for non-pointer data (i.e. doesn't require initialization)."
+ (malloc-clumps clumps))
+
+(defun location-in-object-p (object location)
+ "Is location inside object?"
+ (let ((object-location (object-location object)))
+ (etypecase object
+ ((or number null character)
+ nil)
+ (cons
+ (<= object-location
+ location
+ (+ object-location 1)))
+ (symbol
+ (<= object-location
+ location
+ (+ -1 object-location #.(movitz::movitz-type-word-size :movitz-symbol))))
+ (run-time-context
+ (<= object-location
+ location
+ (+ -1 object-location #.(movitz::movitz-type-word-size :movitz-constant-block))))
+ (std-instance
+ (<= object-location
+ location
+ (+ -1 object-location #.(movitz::movitz-type-word-size :movitz-std-instance))))
+ (function
+ (<= object-location
+ location
+ (+ -1 object-location
+ #.(movitz::movitz-type-word-size :movitz-funobj)
+ (funobj-num-constants object))))
+ ((or vector-u8 string)
+ (<= object-location
+ location
+ (+ -1 object-location
+ #.(movitz::movitz-type-word-size :movitz-vector)
+ (* 2 (truncate (+ (array-dimension object 0) 7) 8)))))
+ (vector-u16
+ (<= object-location
+ location
+ (+ -1 object-location
+ #.(movitz::movitz-type-word-size :movitz-vector)
+ (* 2 (truncate (+ (array-dimension object 0) 3) 4)))))
+ ((or vector-u32 simple-vector)
+ (<= object-location
+ location
+ (+ -1 object-location
+ #.(movitz::movitz-type-word-size :movitz-vector)
+ (* 2 (truncate (+ (array-dimension object 0) 1) 2)))))
+ (structure-object
+ (<= object-location
+ location
+ (+ -1 object-location
+ #.(movitz::movitz-type-word-size :movitz-struct)
+ (* 2 (truncate (+ (structure-object-length object) 1) 2))))))))
More information about the Movitz-cvs
mailing list