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

Frode Vatvedt Fjeld ffjeld at common-lisp.net
Thu Jul 22 01:09:44 UTC 2004


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

Modified Files:
	arrays.lisp 
Log Message:
Improved array-element-type, make-array, and array typep.

Date: Wed Jul 21 18:09:44 2004
Author: ffjeld

Index: movitz/losp/muerte/arrays.lisp
diff -u movitz/losp/muerte/arrays.lisp:1.39 movitz/losp/muerte/arrays.lisp:1.40
--- movitz/losp/muerte/arrays.lisp:1.39	Wed Jul 21 15:33:55 2004
+++ movitz/losp/muerte/arrays.lisp	Wed Jul 21 18:09:44 2004
@@ -10,7 +10,7 @@
 ;;;; Author:        Frode Vatvedt Fjeld <frodef at acm.org>
 ;;;; Created at:    Sun Feb 11 23:14:04 2001
 ;;;;                
-;;;; $Id: arrays.lisp,v 1.39 2004/07/21 22:33:55 ffjeld Exp $
+;;;; $Id: arrays.lisp,v 1.40 2004/07/22 01:09:44 ffjeld Exp $
 ;;;;                
 ;;;;------------------------------------------------------------------
 
@@ -60,7 +60,7 @@
     (#.(bt:enum-value 'movitz::movitz-vector-element-type :character)
        'character)
     (#.(bt:enum-value 'movitz::movitz-vector-element-type :u8)
-       'muerte::u8)
+       '(unsigned-byte 8))
     (#.(bt:enum-value 'movitz::movitz-vector-element-type :u16)
        '(unsigned-byte 16))
     (#.(bt:enum-value 'movitz::movitz-vector-element-type :u32)
@@ -737,19 +737,20 @@
                      (car dimensions))
                     (t
                      (error "Multi-dimensional arrays not supported.")))))
-    (cond
-      ;; These should be replaced by subtypep sometime.
-      ((eq element-type 'character)
-       (make-basic-vector%character size fill-pointer initial-element initial-contents))
-      ((member element-type '(bit (unsigned-byte 1)) :test #'equal)
-       (make-basic-vector%bit size fill-pointer initial-element initial-contents))
-      ((member element-type '(u8 (unsigned-byte 8)) :test #'equal)
-       (make-basic-vector%u8 size fill-pointer initial-element initial-contents))
-      ((member element-type '(u32 (unsigned-byte 32)) :test #'equal)
-       (make-basic-vector%u32 size fill-pointer initial-element initial-contents))
-      ((eq element-type 'code)
-       (make-basic-vector%code size fill-pointer initial-element initial-contents))
-      (t (make-basic-vector%t size fill-pointer initial-element initial-contents)))))
+    (let ((upgraded-element-type (upgraded-array-element-type element-type)))
+      (cond
+       ;; These should be replaced by subtypep sometime.
+       ((eq upgraded-element-type 'character)
+	(make-basic-vector%character size fill-pointer initial-element initial-contents))
+       ((eq upgraded-element-type 'bit)
+	(make-basic-vector%bit size fill-pointer initial-element initial-contents))
+       ((member upgraded-element-type '(u8 (unsigned-byte 8)) :test #'equal)
+	(make-basic-vector%u8 size fill-pointer initial-element initial-contents))
+       ((member upgraded-element-type '(u32 (unsigned-byte 32)) :test #'equal)
+	(make-basic-vector%u32 size fill-pointer initial-element initial-contents))
+       ((eq upgraded-element-type 'code)
+	(make-basic-vector%code size fill-pointer initial-element initial-contents))
+       (t (make-basic-vector%t size fill-pointer initial-element initial-contents))))))
 
 (defun vector (&rest objects)
   "=> vector"
@@ -829,8 +830,14 @@
 	   (and (integerp dimension-spec)
 		(= dimension-spec (array-dimensions x)))
 	   (and (listp dimension-spec)
-		(do ((d 0 (1+ d))
+		(do ((array-rank (array-dimensions x))
+		     (d 0 (1+ d))
 		     (q dimension-spec))
-		    ((null q) t)
-		  (unless (= (pop q) (array-dimension x d))
-		    (return nil)))))))
+		    ((null q) (= d array-rank))
+		  (let ((dim (pop q)))
+		    (cond
+		     ((>= d array-rank)
+		      (return nil))
+		     ((eq dim '*))
+		     ((= dim (array-dimension x d)))
+		     (t (return nil)))))))))





More information about the Movitz-cvs mailing list