0.pre7.129:
[sbcl.git] / src / compiler / ir1final.lisp
index 2eab275..055322b 100644 (file)
@@ -20,7 +20,7 @@
 (defun note-failed-optimization (node failures)
   (declare (type combination node) (list failures))
   (unless (or (node-deleted node)
-             (not (function-info-p (combination-kind node))))
+             (not (fun-info-p (combination-kind node))))
     (let ((*compiler-error-context* node))
       (dolist (failure failures)
        (let ((what (cdr failure))
           ((consp what)
            (compiler-note "~@<unable to ~2I~_~A ~I~_because: ~2I~_~?~:>"
                           note (first what) (rest what)))
-          ((valid-function-use node what
-                               :argument-test #'types-equal-or-intersect
-                               :result-test #'values-types-equal-or-intersect)
+          ((valid-fun-use node what
+                          :argument-test #'types-equal-or-intersect
+                          :result-test #'values-types-equal-or-intersect)
            (collect ((messages))
-             (flet ((frob (string &rest stuff)
+             (flet ((give-grief (string &rest stuff)
                       (messages string)
                       (messages stuff)))
-               (valid-function-use node what
-                                   :warning-function #'frob
-                                   :error-function #'frob))
+               (valid-fun-use node what
+                              :unwinnage-fun #'give-grief
+                              :lossage-fun #'give-grief))
              (compiler-note "~@<unable to ~
                               ~2I~_~A ~
                               ~I~_due to type uncertainty: ~
 
 ;;; For each named function with an XEP, note the definition of that
 ;;; name, and add derived type information to the INFO environment. We
-;;; also delete the FUNCTIONAL from *FREE-FUNCTIONS* to eliminate the
+;;; also delete the FUNCTIONAL from *FREE-FUNS* to eliminate the
 ;;; possibility that new references might be converted to it.
 (defun finalize-xep-definition (fun)
-  (let* ((leaf (functional-entry-function fun))
-        (name (leaf-name leaf))
+  (let* ((leaf (functional-entry-fun fun))
         (defined-ftype (definition-type leaf)))
     (setf (leaf-type leaf) defined-ftype)
-    (when (legal-fun-name-p name)
-      (let* ((where (info :function :where-from name))
-            (*compiler-error-context* (lambda-bind (main-entry leaf)))
-            (global-def (gethash name *free-functions*))
-            (global-p (defined-function-p global-def)))
-       (note-name-defined name :function)
-       (when global-p
-         (remhash name *free-functions*))
-       (ecase where
-         (:assumed
-          (let ((approx-type (info :function :assumed-type name)))
-            (when (and approx-type (fun-type-p defined-ftype))
-              (valid-approximate-type approx-type defined-ftype))
-            (setf (info :function :type name) defined-ftype)
-            (setf (info :function :assumed-type name) nil))
-          (setf (info :function :where-from name) :defined))
-         (:declared
-          (let ((declared-ftype (info :function :type name)))
-            (unless (defined-ftype-matches-declared-ftype-p
-                      defined-ftype declared-ftype)
-              (note-lossage "~@<The previously declared FTYPE~2I ~_~S~I ~_~
+    (when (leaf-has-source-name-p leaf)
+      (let ((source-name (leaf-source-name leaf)))
+       (let* ((where (info :function :where-from source-name))
+              (*compiler-error-context* (lambda-bind (main-entry leaf)))
+              (global-def (gethash source-name *free-funs*))
+              (global-p (defined-fun-p global-def)))
+         (note-name-defined source-name :function)
+         (when global-p
+           (remhash source-name *free-funs*))
+         (ecase where
+           (:assumed
+            (let ((approx-type (info :function :assumed-type source-name)))
+              (when (and approx-type (fun-type-p defined-ftype))
+                (valid-approximate-type approx-type defined-ftype))
+              (setf (info :function :type source-name) defined-ftype)
+              (setf (info :function :assumed-type source-name) nil))
+            (setf (info :function :where-from source-name) :defined))
+           (:declared
+            (let ((declared-ftype (info :function :type source-name)))
+              (unless (defined-ftype-matches-declared-ftype-p
+                        defined-ftype declared-ftype)
+                (note-lossage "~@<The previously declared FTYPE~2I ~_~S~I ~_~
                               conflicts with the definition type ~2I~_~S~:>"
-                            (type-specifier declared-ftype)
-                            (type-specifier defined-ftype)))))
-         (:defined
-           (when global-p
-             (setf (info :function :type name) defined-ftype)))))))
+                              (type-specifier declared-ftype)
+                              (type-specifier defined-ftype)))))
+           (:defined
+            (when global-p
+              (setf (info :function :type source-name) defined-ftype))))))))
   (values))
 
 ;;; Find all calls in COMPONENT to assumed functions and update the
 ;;; types.
 (defun note-assumed-types (component name var)
   (when (and (eq (leaf-where-from var) :assumed)
-            (not (and (defined-function-p var)
-                      (eq (defined-function-inlinep var) :notinline)))
+            (not (and (defined-fun-p var)
+                      (eq (defined-fun-inlinep var) :notinline)))
             (eq (info :function :where-from name) :assumed)
             (eq (info :function :kind name) :function))
     (let ((atype (info :function :assumed-type name)))
       (dolist (ref (leaf-refs var))
        (let ((dest (continuation-dest (node-cont ref))))
-         (when (and (eq (block-component (node-block ref)) component)
+         (when (and (eq (node-component ref) component)
                     (combination-p dest)
                     (eq (continuation-use (basic-combination-fun dest)) ref))
-           (setq atype (note-function-use dest atype)))))
+           (setq atype (note-fun-use dest atype)))))
       (setf (info :function :assumed-type name) atype))))
 
 ;;; Do miscellaneous things that we want to do once all optimization
   (maphash #'note-failed-optimization
           (component-failed-optimizations component))
 
-  (maphash #'(lambda (k v)
-              (note-assumed-types component k v))
-          *free-functions*)
+  (maphash (lambda (k v)
+            (note-assumed-types component k v))
+          *free-funs*)
   (values))