0.8.21.34:
[sbcl.git] / src / code / cross-type.lisp
index 557f6db..0f34ee9 100644 (file)
@@ -23,7 +23,7 @@
   ((call :initarg :call
         :reader cross-type-style-warning-call)
    (message :reader cross-type-style-warning-message
-           #+cmu :initarg #+cmu :message ; (to stop bogus non-STYLE WARNING)
+           #+cmu #+cmu :initarg :message ; (to stop bogus non-STYLE WARNING)
            ))
   (:report (lambda (c s)
             (format
@@ -38,7 +38,7 @@
 (define-condition cross-type-giving-up-conservatively
     (cross-type-style-warning)
   ((message :initform "giving up conservatively"
-           #+cmu :reader #+cmu #.(gensym) ; (to stop bogus non-STYLE WARNING)
+           #+cmu #+cmu :reader #.(gensym) ; (to stop bogus non-STYLE WARNING)
            )))
 
 ;;; This warning refers to the flexibility in the ANSI spec with
                  'fixnum)
                 (t
                  'integer)))
+          ((subtypep raw-result 'simple-string)
+           `(simple-base-string ,(length object)))
+          ((subtypep raw-result 'string) 'base-string)
          ((some (lambda (type) (subtypep raw-result type))
                 '(array character list symbol))
           raw-result)
          (t
-          (error "can't handle TYPE-OF ~S in cross-compilation")))))
+          (error "can't handle TYPE-OF ~S in cross-compilation" object)))))
 
 ;;; Is SYMBOL in the CL package? Note that we're testing this on the
 ;;; cross-compilation host, which could do things any old way. In
      (make-member-type :members (list x)))
     (number
      (ctype-of-number x))
+    (string
+     (make-array-type :dimensions (array-dimensions x)
+                      :complexp (not (typep x 'simple-array))
+                      :element-type (specifier-type 'base-char)
+                      :specialized-element-type (specifier-type 'base-char)))
     (array
      (let ((etype (specifier-type (array-element-type x))))
        (make-array-type :dimensions (array-dimensions x)
      (cond ((typep x 'standard-char)
            ;; (Note that SBCL doesn't distinguish between BASE-CHAR and
            ;; CHARACTER.)
-           (find-classoid 'base-char))
+           (specifier-type 'base-char))
           ((not (characterp x))
            nil)
           (t