0.pre7.86.flaky7.2:
[sbcl.git] / src / compiler / ir1util.lisp
index 31f8748..c8709fb 100644 (file)
 \f
 ;;;; miscellaneous shorthand functions
 
-;;; Return the home (i.e. enclosing non-let) lambda for Node. Since the
-;;; LEXENV-LAMBDA may be deleted, we must chain up the LAMBDA-CALL-LEXENV
-;;; thread until we find a lambda that isn't deleted, and then return its home.
+;;; Return the home (i.e. enclosing non-LET) CLAMBDA for NODE. Since
+;;; the LEXENV-LAMBDA may be deleted, we must chain up the
+;;; LAMBDA-CALL-LEXENV thread until we find a CLAMBDA that isn't
+;;; deleted, and then return its home.
 (declaim (maybe-inline node-home-lambda))
 (defun node-home-lambda (node)
   (declare (type node node))
       (return fun))))
 
 #!-sb-fluid (declaim (inline node-block node-tlf-number))
-(declaim (maybe-inline node-environment))
+(declaim (maybe-inline node-physenv))
 (defun node-block (node)
   (declare (type node node))
   (the cblock (continuation-block (node-prev node))))
-(defun node-environment (node)
+(defun node-physenv (node)
   (declare (type node node))
   #!-sb-fluid (declare (inline node-home-lambda))
-  (the environment (lambda-environment (node-home-lambda node))))
-
-;;; Return the enclosing cleanup for environment of the first or last node
-;;; in BLOCK.
+  (the physenv (lambda-physenv (node-home-lambda node))))
+
+#!-sb-fluid (declaim (maybe-inline lambda-block))
+(defun lambda-block (clambda)
+  (declare (type clambda clambda))
+  (node-block (lambda-bind clambda)))
+(defun lambda-component (clambda)
+  (declare (inline lambda-block))
+  (block-component (lambda-block clambda)))
+
+;;; Return the enclosing cleanup for environment of the first or last
+;;; node in BLOCK.
 (defun block-start-cleanup (block)
   (declare (type cblock block))
   (node-enclosing-cleanup (continuation-next (block-start block))))
   #!-sb-fluid (declare (inline node-home-lambda))
   (node-home-lambda (block-last block)))
 
-;;; Return the IR1 environment for BLOCK.
-(defun block-environment (block)
+;;; Return the IR1 physical environment for BLOCK.
+(defun block-physenv (block)
   (declare (type cblock block))
   #!-sb-fluid (declare (inline node-home-lambda))
-  (lambda-environment (node-home-lambda (block-last block))))
+  (lambda-physenv (node-home-lambda (block-last block))))
 
 ;;; Return the Top Level Form number of PATH, i.e. the ordinal number
-;;; of its original source's top-level form in its compilation unit.
+;;; of its original source's top level form in its compilation unit.
 (defun source-path-tlf-number (path)
   (declare (list path))
   (car (last path)))
 ;;; DELETE-REF will handle the deletion.
 (defun delete-functional (fun)
   (aver (and (null (leaf-refs fun))
-            (not (functional-entry-function fun))))
+            (not (functional-entry-fun fun))))
   (etypecase fun
     (optional-dispatch (delete-optional-dispatch fun))
     (clambda (delete-lambda fun)))
 ;;; (it won't be there before local call analysis, but no matter.) If
 ;;; the lambda was never referenced, we give a note.
 ;;;
-;;; If the lambda is an XEP, then we null out the ENTRY-FUNCTION in its
-;;; ENTRY-FUNCTION so that people will know that it is not an entry point
+;;; If the lambda is an XEP, then we null out the ENTRY-FUN in its
+;;; ENTRY-FUN so that people will know that it is not an entry point
 ;;; anymore.
 (defun delete-lambda (leaf)
   (declare (type clambda leaf))
   (let ((kind (functional-kind leaf))
        (bind (lambda-bind leaf)))
-    (aver (not (member kind '(:deleted :optional :top-level))))
+    (aver (not (member kind '(:deleted :optional :toplevel))))
     (aver (not (functional-has-external-references-p leaf)))
     (setf (functional-kind leaf) :deleted)
     (setf (lambda-bind leaf) nil)
          (unless (leaf-ever-used leaf)
            (let ((*compiler-error-context* bind))
              (compiler-note "deleting unused function~:[.~;~:*~%  ~S~]"
-                            (leaf-name leaf))))
+                            (leaf-debug-name leaf))))
          (unlink-blocks (component-head component) bind-block)
          (when return
            (unlink-blocks (node-block return) (component-tail component)))
          (setf (component-reanalyze component) t)
          (let ((tails (lambda-tail-set leaf)))
-           (setf (tail-set-functions tails)
-                 (delete leaf (tail-set-functions tails)))
+           (setf (tail-set-funs tails)
+                 (delete leaf (tail-set-funs tails)))
            (setf (lambda-tail-set leaf) nil))
          (setf (component-lambdas component)
                (delete leaf (component-lambdas component)))))
 
     (when (eq kind :external)
-      (let ((fun (functional-entry-function leaf)))
-       (setf (functional-entry-function fun) nil)
+      (let ((fun (functional-entry-fun leaf)))
+       (setf (functional-entry-fun fun) nil)
        (when (optional-dispatch-p fun)
          (delete-optional-dispatch fun)))))
 
 ;;; or even converted to a let.
 (defun delete-optional-dispatch (leaf)
   (declare (type optional-dispatch leaf))
-  (let ((entry (functional-entry-function leaf)))
+  (let ((entry (functional-entry-fun leaf)))
     (unless (and entry (leaf-refs entry))
       (aver (or (not entry) (eq (functional-kind entry) :deleted)))
       (setf (functional-kind leaf) :deleted)
             (clambda
              (ecase (functional-kind leaf)
                ((nil :let :mv-let :assignment :escape :cleanup)
-                (aver (not (functional-entry-function leaf)))
+                (aver (not (functional-entry-fun leaf)))
                 (delete-lambda leaf))
                (:external
                 (delete-lambda leaf))
          ;; ANSI section "3.2.5 Exceptional Situations in the Compiler"
          ;; requires this to be a STYLE-WARNING.
          (compiler-style-warning "The variable ~S is defined but never used."
-                                 (leaf-name var)))
+                                 (leaf-debug-name var)))
        (setf (leaf-ever-used var) t))))
   (values))
 
 ;;; triggered by deletion.
 (defun delete-component (component)
   (declare (type component component))
-  (aver (null (component-new-functions component)))
+  (aver (null (component-new-funs component)))
   (setf (component-kind component) :deleted)
   (do-blocks (block component)
     (setf (block-delete-p block) t))
   (dolist (fun (component-lambdas component))
     (setf (functional-kind fun) nil)
-    (setf (functional-entry-function fun) nil)
+    (setf (functional-entry-fun fun) nil)
     (setf (leaf-refs fun) nil)
     (delete-functional fun))
   (do-blocks (block component)
     (unless (combination-p inside)
       (give-up-ir1-transform))
     (let ((inside-fun (combination-fun inside)))
-      (unless (eq (continuation-function-name inside-fun) fun)
+      (unless (eq (continuation-fun-name inside-fun) fun)
        (give-up-ir1-transform))
       (let ((inside-args (combination-args inside)))
        (unless (= (length inside-args) num-args)
 \f
 ;;;; leaf hackery
 
-;;; Change the Leaf that a Ref refers to.
+;;; Change the LEAF that a REF refers to.
 (defun change-ref-leaf (ref leaf)
   (declare (type ref ref) (type leaf leaf))
   (unless (eq (ref-leaf ref) leaf)
     (delete-ref ref)
     (setf (ref-leaf ref) leaf)
     (let ((ltype (leaf-type leaf)))
-      (if (function-type-p ltype)
+      (if (fun-type-p ltype)
          (setf (node-derived-type ref) ltype)
          (derive-node-type ref ltype)))
     (reoptimize-continuation (node-cont ref)))
 ;;; Return a LEAF which represents the specified constant object. If
 ;;; the object is not in *CONSTANTS*, then we create a new constant
 ;;; LEAF and enter it.
-#!-sb-fluid (declaim (maybe-inline find-constant))
 (defun find-constant (object)
-  (if (typep object '(or symbol number character instance))
-    (or (gethash object *constants*)
-       (setf (gethash object *constants*)
-             (make-constant :value object
-                            :name nil
-                            :type (ctype-of object)
-                            :where-from :defined)))
-    (make-constant :value object
-                  :name nil
-                  :type (ctype-of object)
-                  :where-from :defined)))
+  (if (typep object
+            ;; FIXME: What is the significance of this test? ("things
+            ;; that are worth uniquifying"?)
+            '(or symbol number character instance))
+      (or (gethash object *constants*)
+         (setf (gethash object *constants*)
+               (make-constant :value object
+                              :%source-name '.anonymous.
+                              :type (ctype-of object)
+                              :where-from :defined)))
+      (make-constant :value object
+                    :%source-name '.anonymous.
+                    :type (ctype-of object)
+                    :where-from :defined)))
 \f
 ;;; If there is a non-local exit noted in ENTRY's environment that
 ;;; exits to CONT in that entry, then return it, otherwise return NIL.
 (defun find-nlx-info (entry cont)
   (declare (type entry entry) (type continuation cont))
   (let ((entry-cleanup (entry-cleanup entry)))
-    (dolist (nlx (environment-nlx-info (node-environment entry)) nil)
+    (dolist (nlx (physenv-nlx-info (node-physenv entry)) nil)
       (when (and (eq (nlx-info-continuation nlx) cont)
                 (eq (nlx-info-cleanup nlx) entry-cleanup))
        (return nlx)))))
              (return nil)))))))
 
 ;;; Return true if function is an XEP. This is true of normal XEPs
-;;; (:EXTERNAL kind) and top-level lambdas (:TOP-LEVEL kind.)
+;;; (:EXTERNAL kind) and top level lambdas (:TOPLEVEL kind.)
 (defun external-entry-point-p (fun)
   (declare (type functional fun))
-  (not (null (member (functional-kind fun) '(:external :top-level)))))
+  (not (null (member (functional-kind fun) '(:external :toplevel)))))
 
 ;;; If CONT's only use is a non-notinline global function reference,
 ;;; then return the referenced symbol, otherwise NIL. If NOTINLINE-OK
 ;;; is true, then we don't care if the leaf is NOTINLINE.
-(defun continuation-function-name (cont &optional notinline-ok)
+(defun continuation-fun-name (cont &optional notinline-ok)
   (declare (type continuation cont))
   (let ((use (continuation-use cont)))
     (if (ref-p use)
        (let ((leaf (ref-leaf use)))
          (if (and (global-var-p leaf)
                   (eq (global-var-kind leaf) :global-function)
-                  (or (not (defined-function-p leaf))
-                      (not (eq (defined-function-inlinep leaf) :notinline))
+                  (or (not (defined-fun-p leaf))
+                      (not (eq (defined-fun-inlinep leaf) :notinline))
                       notinline-ok))
-             (leaf-name leaf)
+             (leaf-source-name leaf)
              nil))
        nil)))