0.7.1.3:
[sbcl.git] / src / compiler / globaldb.lisp
index 7c137a3..c960c69 100644 (file)
            (:print-object (lambda (x s)
                             (print-unreadable-object (x s)
                               (format s
-                                      "~S ~S, Number = ~D"
+                                      "~S ~S, Number = ~W"
                                       (class-info-name (type-info-class x))
                                       (type-info-name x)
                                       (type-info-number x)))))
            (:copier nil))
   ;; the name of this type
-  (name (required-argument) :type keyword)
+  (name (missing-arg) :type keyword)
   ;; this type's class
-  (class (required-argument) :type class-info)
+  (class (missing-arg) :type class-info)
   ;; a number that uniquely identifies this type (and implicitly its class)
-  (number (required-argument) :type type-number)
+  (number (missing-arg) :type type-number)
   ;; a type specifier which info of this type must satisfy
   (type nil :type t)
   ;; a function called when there is no information of this type
 ;;; calls to %DEFINE-INFO-TYPE must use the same type number.
 (#+sb-xc-host defmacro
  #-sb-xc-host sb!xc:defmacro
-    define-info-type (&key (class (required-argument))
-                          (type (required-argument))
-                          (type-spec (required-argument))
+    define-info-type (&key (class (missing-arg))
+                          (type (missing-arg))
+                          (type-spec (missing-arg))
                           default)
   (declare (type keyword class type))
   `(progn
                     (:copier nil))
   ;; some string describing what is in this environment, for
   ;; printing/debugging purposes only
-  (name (required-argument) :type string))
+  (name (missing-arg) :type string))
 (def!method print-object ((x info-env) stream)
   (print-unreadable-object (x stream :type t)
     (prin1 (info-env-name x) stream)))
   (cache-index nil :type (or compact-info-entries-index null))
   ;; hashtable of the names in this environment. If a bucket is
   ;; unused, it is 0.
-  (table (required-argument) :type simple-vector)
+  (table (missing-arg) :type simple-vector)
   ;; an indirection vector parallel to TABLE, translating indices in
   ;; TABLE to the start of the ENTRIES for that name. Unused entries
   ;; are undefined.
-  (index (required-argument)
-        :type (simple-array compact-info-entries-index (*)))
+  (index (missing-arg) :type (simple-array compact-info-entries-index (*)))
   ;; a vector contining in contiguous ranges the values of for all the
   ;; types of info for each name.
-  (entries (required-argument) :type simple-vector)
+  (entries (missing-arg) :type simple-vector)
   ;; a vector parallel to ENTRIES, indicating the type number for the
   ;; value stored in that location and whether this location is the
   ;; last type of info stored for this name. The type number is in the
   ;; low TYPE-NUMBER-BITS bits, and the next bit is set if this is the
   ;; last entry.
-  (entries-info (required-argument)
-               :type (simple-array compact-info-entry (*))))
+  (entries-info (missing-arg) :type (simple-array compact-info-entry (*))))
 
 (defconstant compact-info-entry-type-mask (ldb (byte type-number-bits 0) -1))
 (defconstant compact-info-entry-last (ash 1 type-number-bits))
   (cache-types nil :type list)
   ;; vector of alists of alists of the form:
   ;;    ((Name . ((Type-Number . Value) ...) ...)
-  (table (required-argument) :type simple-vector)
+  (table (missing-arg) :type simple-vector)
   ;; the number of distinct names currently in this table. Each name
   ;; may have multiple entries, since there can be many types of info.
   (count 0 :type index)
             (get-info-value ,name
                             ,(type-info-number info)
                             ,@(when env-list-p `(,env-list))) 
-          (values (the ,(type-info-type info) ,value)
-                  ,foundp)))
+          (declare (type ,(type-info-type info) ,value))
+          (values ,value ,foundp)))
       whole))
 (defun (setf info) (new-value
                    class
   :type :inline-expansion-designator
   :type-spec (or list function)
   :default nil)
-;;; Decode any raw (INFO :FUNCTION :INLINE-EXPANSION-DESIGNATOR FUN-NAME)
-;;; value into a lambda expression, or return NIL if there is none.
-(declaim (ftype (function ((or symbol cons)) list) fun-name-inline-expansion))
-(defun fun-name-inline-expansion (fun-name)
-  (let ((info (info :function :inline-expansion-designator fun-name)))
-    (if (functionp info)
-       (funcall info)
-       info)))
 
 ;;; This specifies whether this function may be expanded inline. If
 ;;; null, we don't care.
   :type :ir1-transform
   :type-spec (or function null))
 
-;;; If a function is "known" to the compiler, then this is a
-;;; FUNCTION-INFO structure containing the info used to special-case
-;;; compilation.
+;;; If a function is "known" to the compiler, then this is a FUN-INFO
+;;; structure containing the info used to special-case compilation.
 (define-info-type
   :class :function
   :type :info
-  :type-spec (or function-info null)
+  :type-spec (or fun-info null)
   :default nil)
 
 (define-info-type
   ;; instead.
   :default (if (symbol-self-evaluating-p name)
               name
-              (error "internal error: constant lookup of nonconstant ~S"
-                     name)))
+              (bug "constant lookup of nonconstant ~S" name)))
 
 (define-info-type
   :class :variable