0.pre7.126:
[sbcl.git] / src / compiler / typetran.lisp
index e569f47..228bce0 100644 (file)
@@ -12,9 +12,6 @@
 ;;;; provided with absolutely no warranty. See the COPYING and CREDITS
 ;;;; files for more information.
 
-;;; FIXME: Many of the functions in this file could probably be
-;;; byte-compiled, since they're one-pass, cons-heavy code.
-
 (in-package "SB!C")
 \f
 ;;;; type predicate translation
@@ -80,7 +77,8 @@
 
 ;;; Flush %TYPEP tests whose result is known at compile time.
 (deftransform %typep ((object type))
-  (unless (constant-continuation-p type) (give-up-ir1-transform))
+  (unless (constant-continuation-p type)
+    (give-up-ir1-transform))
   (ir1-transform-type-predicate
    object
    (specifier-type (continuation-value type))))
@@ -89,7 +87,7 @@
 ;;; whether the single argument is known to (not) be of the
 ;;; appropriate type, expanding to T or NIL as appropriate.
 (deftransform fold-type-predicate ((object) * * :node node :defun-only t)
-  (let ((ctype (gethash (leaf-name
+  (let ((ctype (gethash (leaf-source-name
                         (ref-leaf
                          (continuation-use
                           (basic-combination-fun node))))
 ;;;;
 ;;;; See also VM dependent transforms.
 
-(def-source-transform atom (x)
+(define-source-transform atom (x)
   `(not (consp ,x)))
 \f
 ;;;; TYPEP source transform
             (satisfies `(if (funcall #',(second spec) ,object) t nil))
             ((not and)
              (once-only ((n-obj object))
-               `(,(first spec) ,@(mapcar #'(lambda (x)
-                                             `(typep ,n-obj ',x))
+               `(,(first spec) ,@(mapcar (lambda (x)
+                                           `(typep ,n-obj ',x))
                                          (rest spec))))))))))
 
 ;;; Do source transformation for TYPEP of a known union type. If a
 ;;; then we also check whether the layout for the object is invalid
 ;;; and signal an error if so. Otherwise, look up the indirect
 ;;; class-cell and call CLASS-CELL-TYPEP at runtime.
-;;;
-;;; KLUDGE: The :WHEN :BOTH option here is probably a suboptimal
-;;; solution to the problem of %INSTANCE-TYPEP forms in byte compiled
-;;; code; it'd probably be better just to have %INSTANCE-TYPEP forms
-;;; never be generated in byte compiled code, or maybe to have a DEFUN
-;;; %INSTANCE-TYPEP somewhere to handle them if they are. But it's not
-;;; terribly important because mostly, %INSTANCE-TYPEP forms *aren't*
-;;; generated in byte compiled code. (As of sbcl-0.6.5, they could
-;;; sometimes be generated when byte compiling inline functions, but
-;;; it's quite uncommon.) -- WHN 20000523
 (deftransform %instance-typep ((object spec) (* *) * :node node :when :both)
   (aver (constant-continuation-p spec))
   (let* ((spec (continuation-value spec))
 ;;; If the type is TYPE= to a type that has a predicate, then expand
 ;;; to that predicate. Otherwise, we dispatch off of the type's type.
 ;;; These transformations can increase space, but it is hard to tell
-;;; when, so we ignore policy and always do them. When byte-compiling,
-;;; we only do transforms that have potential for control
-;;; simplification. Instance type tests are converted to
-;;; %INSTANCE-TYPEP to allow type propagation.
-(def-source-transform typep (object spec)
+;;; when, so we ignore policy and always do them. 
+(define-source-transform typep (object spec)
   ;; KLUDGE: It looks bad to only do this on explicitly quoted forms,
   ;; since that would overlook other kinds of constants. But it turns
   ;; out that the DEFTRANSFORM for TYPEP detects any constant
                                 (cadr spec))
               `(%typep ,object ,spec))
              (t nil))
-           (and (not (byte-compiling))
-                (typecase type
-                  (numeric-type
-                   (source-transform-numeric-typep object type))
-                  (sb!xc:class
-                   `(%instance-typep ,object ,spec))
-                  (array-type
-                   (source-transform-array-typep object type))
-                  (cons-type
-                   (source-transform-cons-typep object type))
-                  (t nil)))
+           (typecase type
+             (numeric-type
+              (source-transform-numeric-typep object type))
+             (sb!xc:class
+              `(%instance-typep ,object ,spec))
+             (array-type
+              (source-transform-array-typep object type))
+             (cons-type
+              (source-transform-cons-typep object type))
+             (t nil))
            `(%typep ,object ,spec)))
       (values nil t)))
 \f