Update of /project/movitz/cvsroot/movitz/losp/muerte In directory common-lisp.net:/tmp/cvs-serv14528
Modified Files: inspect.lisp Log Message: Do a bit more safety checking in %bignum-canonicalize and %make-bignum.
Date: Fri Jul 16 03:43:26 2004 Author: ffjeld
Index: movitz/losp/muerte/inspect.lisp diff -u movitz/losp/muerte/inspect.lisp:1.22 movitz/losp/muerte/inspect.lisp:1.23 --- movitz/losp/muerte/inspect.lisp:1.22 Thu Jul 15 17:02:03 2004 +++ movitz/losp/muerte/inspect.lisp Fri Jul 16 03:43:26 2004 @@ -10,7 +10,7 @@ ;;;; Author: Frode Vatvedt Fjeld frodef@acm.org ;;;; Created at: Fri Oct 24 09:50:41 2003 ;;;; -;;;; $Id: inspect.lisp,v 1.22 2004/07/16 00:02:03 ffjeld Exp $ +;;;; $Id: inspect.lisp,v 1.23 2004/07/16 10:43:26 ffjeld Exp $ ;;;; ;;;;------------------------------------------------------------------
@@ -265,12 +265,15 @@ "Assuming x is a bignum, return the canonical integer value. That is, either return a fixnum, or destructively modify the bignum's length so that the msb isn't zero. DO NOT APPLY TO NON-BIGNUM VALUES!" + (check-type x bignum) (macrolet ((do-it () `(with-inline-assembly (:returns :eax) (:load-lexical (:lexical-binding x) :eax) (:movl (:eax ,movitz:+other-type-offset+) :ecx) (:shrl 16 :ecx) + (:jz '(:sub-program (should-never-happen) + (:int 107))) shrink-loop (:cmpl ,movitz:+movitz-fixnum-factor+ :ecx) (:je 'shrink-no-more) @@ -308,6 +311,7 @@ (:jnc 'copy-bignum-loop))))
(defun %make-bignum (bigits) + (assert (plusp bigits)) (macrolet ((do-it () `(with-inline-assembly (:returns :eax)