X-Git-Url: http://repo.macrolet.net/gitweb/?a=blobdiff_plain;f=src%2Fcompiler%2Fnode.lisp;h=83b342122b8801d2d2d56289cb0a8054028828d8;hb=98a76d4426660876dec6649b1e228d2e5b47f579;hp=3423c37c975220a3cdf8145bb9836f83fa6530a4;hpb=ec735ab75335c1744b39190314142a7e6f1ecdb3;p=sbcl.git diff --git a/src/compiler/node.lisp b/src/compiler/node.lisp index 3423c37..83b3421 100644 --- a/src/compiler/node.lisp +++ b/src/compiler/node.lisp @@ -37,7 +37,7 @@ ;; until it is assigned a block, and may be also be temporarily ;; unused during later manipulations of IR1. In a consistent ;; state there should never be any mention of :UNUSED - ;; continuations. Next can have a non-null value if the next node + ;; continuations. NEXT can have a non-null value if the next node ;; has already been determined. ;; ;; :DELETED @@ -87,7 +87,7 @@ ;; the node where this continuation is used, if unique. This is always ;; null in :DELETED and :UNUSED continuations, and is never null in ;; :INSIDE-BLOCK continuations. In a :BLOCK-START continuation, the - ;; Block's START-USES indicate whether NIL means no uses or more + ;; BLOCK's START-USES indicate whether NIL means no uses or more ;; than one use. (use nil :type (or node null)) ;; the basic block this continuation is in. This is null only in @@ -330,7 +330,9 @@ ;;; size of flow analysis problems, this allows back-end data ;;; structures to be reclaimed after the compilation of each ;;; component. -(defstruct (component (:copier nil)) +(defstruct (component (:copier nil) + (:constructor + make-component (head tail &aux (last-block tail)))) ;; unique ID for debugging #!+sb-show (id (new-object-id) :read-only t) ;; the kind of component @@ -364,13 +366,15 @@ ;; the blocks that are the dummy head and tail of the DFO ;; ;; Entry/exit points have these blocks as their - ;; predecessors/successors. Null temporarily. The start and return - ;; from each non-deleted function is linked to the component head - ;; and tail. Until physical environment analysis links NLX entry - ;; stubs to the component head, every successor of the head is a - ;; function start (i.e. begins with a BIND node.) - (head nil :type (or null cblock)) - (tail nil :type (or null cblock)) + ;; predecessors/successors. The start and return from each + ;; non-deleted function is linked to the component head and + ;; tail. Until physical environment analysis links NLX entry stubs + ;; to the component head, every successor of the head is a function + ;; start (i.e. begins with a BIND node.) + (head (missing-arg) :type cblock) + (tail (missing-arg) :type cblock) + ;; New blocks are inserted before this. + (last-block (missing-arg) :type cblock) ;; This becomes a list of the CLAMBDA structures for all functions ;; in this component. OPTIONAL-DISPATCHes are represented only by ;; their XEP and other associated lambdas. This doesn't contain any