[movitz-cvs] CVS update: movitz/compiler-types.lisp

Frode Vatvedt Fjeld ffjeld at common-lisp.net
Wed Jun 9 17:18:36 UTC 2004


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

Modified Files:
	compiler-types.lisp 
Log Message:
Improved the type codec wrt. to bignums/fixnums, in particular.

Date: Wed Jun  9 10:18:36 2004
Author: ffjeld

Index: movitz/compiler-types.lisp
diff -u movitz/compiler-types.lisp:1.13 movitz/compiler-types.lisp:1.14
--- movitz/compiler-types.lisp:1.13	Mon Jun  7 15:09:24 2004
+++ movitz/compiler-types.lisp	Wed Jun  9 10:18:36 2004
@@ -10,7 +10,7 @@
 ;;;; Author:        Frode Vatvedt Fjeld <frodef at acm.org>
 ;;;; Created at:    Wed Sep 10 00:40:07 2003
 ;;;;                
-;;;; $Id: compiler-types.lisp,v 1.13 2004/06/07 22:09:24 ffjeld Exp $
+;;;; $Id: compiler-types.lisp,v 1.14 2004/06/09 17:18:36 ffjeld Exp $
 ;;;;                
 ;;;;------------------------------------------------------------------
 
@@ -224,8 +224,10 @@
      (typep x 'movitz-symbol))
     ((vector array)
      (typep x 'movitz-vector))
-    (integer
-     (typep x 'movitz-fixnum))))
+    (fixnum
+     (typep x 'movitz-fixnum))
+    (bignum
+     (typep x 'movitz-bignum))))
 
 (defun type-code (first-type &rest types)
   "Find the code (a bitmap) for (or , at types)."
@@ -317,16 +319,21 @@
     (= x (logand x code))))
 
 (defun encoded-typep (errorp undecided-value x code integer-range members include complement)
+  "Is the movitz-object x included in the encoded-type?"
   (let ((x (or (= -1 code)
 	       (and (member x members :test #'movitz-eql) t)
 	       (cond
 		((typep x 'movitz-nil)
 		 (type-code-p 'symbol code))
-		((basic-typep x 'integer)
+		((basic-typep x 'fixnum)
 		 (or (type-code-p 'integer code)
 		     (and integer-range
 			  (numscope-memberp integer-range (movitz-fixnum-value x)))))
-		(t (dolist (bt '(symbol character function cons hash-table)
+		((basic-typep x 'bignum)
+		 (or (type-code-p 'integer code)
+		     (and integer-range
+			  (numscope-memberp integer-range (movitz-bignum-value x)))))
+		(t (dolist (bt '(symbol character function cons hash-table vector)
 			     (error "Cant decide typep for ~S." x))
 		     (when (basic-typep x bt)
 		       (return (type-code-p bt code))))))
@@ -436,7 +443,10 @@
      ((atom type-specifier)
       (case type-specifier
 	(fixnum
-	 (type-values 'integer))
+	 (type-specifier-encode `(signed-byte ,+movitz-fixnum-bits+)))
+	(bignum
+	 (type-specifier-encode `(or (integer * ,(1- +movitz-most-negative-fixnum+))
+				     (integer ,(1+ +movitz-most-positive-fixnum+) *))))
 	((t nil cons symbol keyword function array vector integer hash-table character)
 	 (type-values type-specifier))
 	(null





More information about the Movitz-cvs mailing list