0.7.3.1:
[sbcl.git] / src / code / cross-type.lisp
index 6af0388..7fc1393 100644 (file)
@@ -14,9 +14,7 @@
 ;;; Is X a fixnum in the target Lisp?
 (defun fixnump (x)
   (and (integerp x)
-       (<= sb!vm:*target-most-negative-fixnum*
-          x
-          sb!vm:*target-most-positive-fixnum*)))
+       (<= sb!xc:most-negative-fixnum x sb!xc:most-positive-fixnum)))
 
 ;;; (This was a useful warning when trying to get bootstrapping
 ;;; to work, but it's mostly irrelevant noise now that the system
             ;; Common Lisp. (Some array types are too, but they
             ;; were picked off earlier.)
             (target-type-is-in
-             '(bit character complex cons float function integer keyword
-                   list nil null number rational real signed-byte symbol t
-                   unsigned-byte))
+             '(atom bit character complex cons float function integer keyword
+               list nil null number rational real signed-byte symbol t
+               unsigned-byte))
             (values (typep host-object target-type) t))
            (;; Floating point types are guaranteed to correspond,
             ;; too, but less exactly.
                    (values (typep host-object target-type) t))
                   (t
                    (values nil t))))
+           (;; Complexes suffer the same kind of problems as arrays
+            (and (not (unknown-type-p (values-specifier-type target-type)))
+                 (sb!xc:subtypep target-type 'cl:complex))
+            (if (complexp host-object)
+                (warn-and-give-up) ; general-case complexes being way too hard
+                (values nil t))) ; but "obviously not a complex" being easy
            ;; Some types require translation between the cross-compilation
            ;; host Common Lisp and the target SBCL.
            ((target-type-is-in '(sb!xc:class))
         ;; There's no ANSI way to find out what the function is
         ;; declared to be, so we just return the CTYPE for the
         ;; most-general function.
-        *universal-function-type*))
+        *universal-fun-type*))
     (symbol
      (make-member-type :members (list x)))
     (number