[movitz-cvs] CVS movitz/losp/muerte
ffjeld
ffjeld at common-lisp.net
Mon Apr 21 19:30:40 UTC 2008
Update of /project/movitz/cvsroot/movitz/losp/muerte
In directory clnet:/tmp/cvs-serv22228
Modified Files:
arrays.lisp
Log Message:
Change upgraded-array-element-type for type NIL.
--- /project/movitz/cvsroot/movitz/losp/muerte/arrays.lisp 2008/04/18 09:55:13 1.67
+++ /project/movitz/cvsroot/movitz/losp/muerte/arrays.lisp 2008/04/21 19:30:40 1.68
@@ -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.67 2008/04/18 09:55:13 ffjeld Exp $
+;;;; $Id: arrays.lisp,v 1.68 2008/04/21 19:30:40 ffjeld Exp $
;;;;
;;;;------------------------------------------------------------------
@@ -21,6 +21,10 @@
(in-package muerte)
+(defconstant array-total-size-limit most-positive-fixnum)
+(defconstant array-dimension-limit most-positive-fixnum)
+(defconstant array-rank-limit 1024)
+
(defmacro/cross-compilation vector-double-dispatch ((s1 s2) &rest clauses)
(flet ((make-double-dispatch-value (et1 et2)
(+ (* #x100 (bt:enum-value 'movitz::movitz-vector-element-type et1))
@@ -85,42 +89,42 @@
"=> upgraded-type-specifier"
;; We're in dire need of subtypep..
(cond
- ((symbolp type-specifier)
- (case type-specifier
- ((character base-char standard-char)
- 'character)
- ((code)
- 'code)
- (t (let ((deriver (gethash type-specifier *derived-typespecs*)))
- (if (not deriver)
- t
- (upgraded-array-element-type (funcall deriver)))))))
- ((null type-specifier)
- t)
- ((consp type-specifier)
- (case (car type-specifier)
- ((integer)
- (let* ((q (cdr type-specifier))
- (min (if q (pop q) '*))
- (max (if q (pop q) '*)))
- (let ((min (if (consp min) (1+ (car min)) min))
- (max (if (consp max) (1- (car max)) max)))
- (cond
- ((or (eq min '*) (eq max '*))
- t)
- ((<= 0 min max 1)
- 'bit)
- ((<= 0 min max #xff)
- '(unsigned-byte 8))
- ((<= 0 min max #xffff)
- '(unsigned-byte 16))
- ((<= 0 min max #xffffffff)
- '(unsigned-byte 32))))))
- (t (let ((deriver (gethash (car type-specifier) *derived-typespecs*)))
- (if (not deriver)
- t
- (upgraded-array-element-type (apply deriver (cdr type-specifier)) environment))))))
- (t t)))
+ ((symbolp type-specifier)
+ (case type-specifier
+ ((nil character base-char standard-char)
+ 'character)
+ ((code)
+ 'code)
+ (t (let ((deriver (gethash type-specifier *derived-typespecs*)))
+ (if (not deriver)
+ t
+ (upgraded-array-element-type (funcall deriver)))))))
+ ((null type-specifier)
+ t)
+ ((consp type-specifier)
+ (case (car type-specifier)
+ ((integer)
+ (let* ((q (cdr type-specifier))
+ (min (if q (pop q) '*))
+ (max (if q (pop q) '*)))
+ (let ((min (if (consp min) (1+ (car min)) min))
+ (max (if (consp max) (1- (car max)) max)))
+ (cond
+ ((or (eq min '*) (eq max '*))
+ t)
+ ((<= 0 min max 1)
+ 'bit)
+ ((<= 0 min max #xff)
+ '(unsigned-byte 8))
+ ((<= 0 min max #xffff)
+ '(unsigned-byte 16))
+ ((<= 0 min max #xffffffff)
+ '(unsigned-byte 32))))))
+ (t (let ((deriver (gethash (car type-specifier) *derived-typespecs*)))
+ (if (not deriver)
+ t
+ (upgraded-array-element-type (apply deriver (cdr type-specifier)) environment))))))
+ (t t)))
(defun array-dimension (array axis-number)
@@ -407,14 +411,16 @@
(:compile-form (:result-mode :edx) index)
(:testb 7 :cl)
(:jnz '(:sub-program (not-a-vector)
- (:compile-form (:result-mode :ignore)
- (error "Not a vector: ~S." vector))))
+ (:movl :ebx :eax)
+ (:load-constant vector :edx)
+ (:int 59)))
(:movl (:ebx ,movitz:+other-type-offset+) :ecx)
(:andl #xffff :ecx)
(:testb ,movitz:+movitz-fixnum-zmask+ :dl)
(:jnz '(:sub-program (not-an-index)
- (:compile-form (:result-mode :ignore)
- (error "Not a vector index: ~S." index))))
+ (:movl :edx :eax)
+ (:load-constant index :edx)
+ (:int 59)))
(:cmpl (:ebx ,(bt:slot-offset 'movitz:movitz-basic-vector 'movitz::num-elements))
:edx)
(:jnc '(:sub-program (illegal-index)
@@ -434,8 +440,8 @@
(:jne 'not-character-vector)
(:cmpb ,(movitz:tag :character) :al)
(:jne '(:sub-program (not-a-character)
- (:compile-form (:result-mode :ignore)
- (error "Not a character: ~S" value))))
+ (:load-constant character :edx)
+ (:int 59)))
(:movl :edx :ecx)
(:shrl ,movitz:+movitz-fixnum-shift+ :ecx)
(:movb :ah (:ebx :ecx ,(bt:slot-offset 'movitz:movitz-basic-vector 'movitz::data)))
@@ -1163,7 +1169,7 @@
(make-basic-vector%code size fill-pointer initial-element initial-contents))
(t (make-basic-vector%t size fill-pointer initial-element initial-contents)))))
-(defun make-array (dimensions &key element-type initial-element initial-contents adjustable
+(defun make-array (dimensions &key (element-type t) initial-element initial-contents adjustable
fill-pointer displaced-to displaced-index-offset)
(let ((size (cond ((integerp dimensions)
dimensions)
More information about the Movitz-cvs
mailing list