0.8.19.30: less COMPILE-FILE verbosity
[sbcl.git] / src / compiler / node.lisp
index 2a7aaf1..14c3444 100644 (file)
   ;; For :DYNAMIC-EXTENT: a list of all DX LVARs, preserved by this
   ;; cleanup. This is filled when the cleanup is created (now by
   ;; locall call analysis) and is rechecked by physical environment
-  ;; analysis.
+  ;; analysis. (For closures this is a list of the allocating node -
+  ;; during IR1, and a list of the argument LVAR of the allocator -
+  ;; after physical environment analysis.)
   (info nil :type list))
 (defprinter (cleanup :identity t)
   kind
 (def!struct (nlx-info
             (:constructor make-nlx-info (cleanup
                                          exit
-                                         &aux (lvar (node-lvar exit))))
+                                         &aux
+                                          (block (first (block-succ
+                                                         (node-block exit))))))
             (:make-load-form-fun ignore-it))
   ;; the cleanup associated with this exit. In a catch or
   ;; unwind-protect, this is the :CATCH or :UNWIND-PROTECT cleanup,
   ;; this thus provides a good indication of what kind of exit is
   ;; being done.
   (cleanup (missing-arg) :type cleanup)
-  ;; the continuation exited to (the CONT of the EXIT nodes). If this
-  ;; exit is from an escape function (CATCH or UNWIND-PROTECT), then
-  ;; physical environment analysis deletes the escape function and
-  ;; instead has the %NLX-ENTRY use this continuation.
+  ;; the ``continuation'' exited to (the block, succeeding the EXIT
+  ;; nodes). If this exit is from an escape function (CATCH or
+  ;; UNWIND-PROTECT), then physical environment analysis deletes the
+  ;; escape function and instead has the %NLX-ENTRY use this
+  ;; continuation.
   ;;
-  ;; This slot is primarily an indication of where this exit delivers
-  ;; its values to (if any), but it is also used as a sort of name to
-  ;; allow us to find the NLX-INFO that corresponds to a given exit.
-  ;; For this purpose, the ENTRY must also be used to disambiguate,
-  ;; since exits to different places may deliver their result to the
-  ;; same continuation.
-  (exit (missing-arg) :type exit)
-  (lvar (missing-arg) :type (or lvar null))
+  ;; This slot is used as a sort of name to allow us to find the
+  ;; NLX-INFO that corresponds to a given exit. For this purpose, the
+  ;; ENTRY must also be used to disambiguate, since exits to different
+  ;; places may deliver their result to the same continuation.
+  (block (missing-arg) :type cblock)
   ;; the entry stub inserted by physical environment analysis. This is
   ;; a block containing a call to the %NLX-ENTRY funny function that
   ;; has the original exit destination as its successor. Null only
   ;; temporarily.
   (target nil :type (or cblock null))
+  ;; for a lexical exit it determines whether tag existence check is
+  ;; needed
+  (safe-p nil :type boolean)
   ;; some kind of info used by the back end
   info)
 (defprinter (nlx-info :identity t)
-  exit
+  block
   target
   info)
 \f
   ;; the original function or macro lambda list, or :UNSPECIFIED if
   ;; this is a compiler created function
   (arg-documentation nil :type (or list (member :unspecified)))
+  ;; Node, allocating closure for this lambda. May be NIL when we are
+  ;; sure that no closure is needed.
+  (allocator nil :type (or null combination))
   ;; various rare miscellaneous info that drives code generation & stuff
   (plist () :type list))
 (defprinter (functional :identity t)
   (entry nil :type (or entry null))
   ;; the lvar yielding the value we are to exit with. If NIL, then no
   ;; value is desired (as in GO).
-  (value nil :type (or lvar null)))
+  (value nil :type (or lvar null))
+  (nlx-info nil :type (or nlx-info null)))
 (defprinter (exit :identity t)
   #!+sb-show id
   (entry :test entry)