X-Git-Url: http://repo.macrolet.net/gitweb/?a=blobdiff_plain;ds=sidebyside;f=src%2Fcompiler%2Fnode.lisp;h=41964ad7358435dd30de5ebbe82e364605a0ec5d;hb=f31bc323d5bfc205f94164b203833f35033df3cd;hp=ed0676e5c81bf095cf96730a1236763df9e02bb0;hpb=e3113504fca73ebd1b992930315386d9d3ae5d18;p=sbcl.git diff --git a/src/compiler/node.lisp b/src/compiler/node.lisp index ed0676e..41964ad 100644 --- a/src/compiler/node.lisp +++ b/src/compiler/node.lisp @@ -248,8 +248,9 @@ (flag nil) ;; some kind of info used by the back end (info nil) - ;; what macroexpansions happened "in" this block, used for xref - (macroexpands nil :type list) + ;; what macroexpansions and source transforms happened "in" this block, used + ;; for xref + (xrefs nil :type list) ;; Cache the physenv of a block during lifetime analysis. :NONE if ;; no cached value has been stored yet. (physenv-cache :none :type (or null physenv (member :none)))) @@ -465,8 +466,6 @@ kind mess-up (info :test info)) -(defmacro cleanup-nlx-info (cleanup) - `(cleanup-info ,cleanup)) ;;; A PHYSENV represents the result of physical environment analysis. ;;; @@ -691,7 +690,7 @@ (def!struct (global-var (:include basic-var)) ;; kind of variable described (kind (missing-arg) - :type (member :special :global-function :global))) + :type (member :special :global-function :global :unknown))) (defprinter (global-var :identity t) %source-name #!+sb-show id @@ -711,16 +710,16 @@ ;; global environment. (inlinep nil :type inlinep) (inline-expansion nil :type (or cons null)) - ;; the block-local definition of this function (either because it - ;; was semi-inline, or because it was defined in this block). If - ;; this function is not an entry point, then this may be deleted or - ;; LET-converted. Null if we haven't converted the expansion yet. - (functional nil :type (or functional null))) + ;; List of functionals corresponding to this DEFINED-FUN: either from the + ;; conversion of a NAMED-LAMBDA, or from inline-expansion (see + ;; RECOGNIZE-KNOWN-CALL) - we need separate functionals for each policy in + ;; which the function is used. + (functionals nil :type list)) (defprinter (defined-fun :identity t) %source-name #!+sb-show id inlinep - (functional :test functional)) + (functionals :test functionals)) ;;;; function stuff @@ -863,6 +862,8 @@ ;; the original function or macro lambda list, or :UNSPECIFIED if ;; this is a compiler created function (arg-documentation nil :type (or list (member :unspecified))) + ;; the documentation string for the lambda + (documentation nil :type (or null string)) ;; Node, allocating closure for this lambda. May be NIL when we are ;; sure that no closure is needed. (allocator nil :type (or null combination)) @@ -871,8 +872,9 @@ ;; xref information for this functional (only used for functions with an ;; XEP) (xref () :type list) - ;; True if this functional was created from an inline expansion - (inline-expanded nil :type boolean)) + ;; True if this functional was created from an inline expansion. This + ;; is either T, or the GLOBAL-VAR for which it is an expansion. + (inline-expanded nil)) (defprinter (functional :identity t) %source-name %debug-name @@ -1163,7 +1165,7 @@ (%source-name (missing-arg) :type symbol :read-only t)) (defprinter (ref :identity t) #!+sb-show id - %source-name + (%source-name :test (neq %source-name '.anonymous.)) leaf) ;;; Naturally, the IF node always appears at the end of a block.