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

Frode Vatvedt Fjeld ffjeld at common-lisp.net
Fri Sep 24 09:33:17 UTC 2004


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

Modified Files:
	inspect.lisp 
Log Message:
shallow-copy had a bug wrt. vectors, because the elements were copied
by considering the original vector as a sequence, and therefore any
elements beyond the fill-pointer were not copied. Also, the new
copying strategy should be considerably faster.

Date: Fri Sep 24 11:33:16 2004
Author: ffjeld

Index: movitz/losp/muerte/inspect.lisp
diff -u movitz/losp/muerte/inspect.lisp:1.41 movitz/losp/muerte/inspect.lisp:1.42
--- movitz/losp/muerte/inspect.lisp:1.41	Thu Sep 23 11:32:15 2004
+++ movitz/losp/muerte/inspect.lisp	Fri Sep 24 11:33:16 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.41 2004/09/23 09:32:15 ffjeld Exp $
+;;;; $Id: inspect.lisp,v 1.42 2004/09/24 09:33:16 ffjeld Exp $
 ;;;;                
 ;;;;------------------------------------------------------------------
 
@@ -178,12 +178,24 @@
     (:cmpl :esi :edx)
     (:jne 'copy-loop)
     (:movl (:ebp -4) :esi)
-;;;    ;; Copy tag from EBX onto EAX
-;;;    (:movl :ebx :ecx)
-;;;    (:andl 7 :ecx)
-;;;    (:andl -8 :eax)
-;;;    (:orl :ecx :eax)
-    ;; Load word-count into ECX
+    (:movl :edx :ecx)))
+
+(defun %shallow-copy-non-pointer-object (object word-count)
+  "Copy any object with size word-count."
+  (check-type word-count (integer 2 *))
+  (with-non-pointer-allocation-assembly (word-count
+					 :object-register :eax
+					 :size-register :ecx)
+    (:load-lexical (:lexical-binding object) :ebx)
+    (:load-lexical (:lexical-binding word-count) :edx)
+    (:xorl :esi :esi)			; counter
+    copy-loop
+    (:movl (:ebx :esi #.movitz:+other-type-offset+) :ecx)
+    (:movl :ecx (:eax :esi #.movitz:+other-type-offset+))
+    (:addl 4 :esi)
+    (:cmpl :esi :edx)
+    (:jne 'copy-loop)
+    (:movl (:ebp -4) :esi)
     (:movl :edx :ecx)))
 
 (defun shallow-copy (old)
@@ -199,12 +211,7 @@
     (symbol
      (copy-symbol old t))
     (vector
-     (let ((new (make-array (array-dimension old 0)
-			    :element-type (array-element-type old)
-			    :initial-contents old)))
-       (when (array-has-fill-pointer-p old)
-	 (setf (fill-pointer new) (fill-pointer old)))
-       new))
+     (copy-vector old))
     (function
      (copy-funobj old))
     (structure-object





More information about the Movitz-cvs mailing list