X-Git-Url: http://repo.macrolet.net/gitweb/?a=blobdiff_plain;f=src%2Fcompiler%2Fnode.lisp;h=37af448b3bc0d0f10c6e77cd23b0e9d8e61835f6;hb=83ce01b419da19b549eb76b0c3451f2b32a266d5;hp=5e9bd54526ae3e22e4271f5df0361fa35bbad543;hpb=1840d888d2ef13fe0ea5aaa06f1fef3300da682b;p=sbcl.git diff --git a/src/compiler/node.lisp b/src/compiler/node.lisp index 5e9bd54..37af448 100644 --- a/src/compiler/node.lisp +++ b/src/compiler/node.lisp @@ -660,6 +660,9 @@ ;; it looks as though it's never interesting to get debug names ;; from them, so it's moot. -- WHN) (leaf-source-name leaf))) +(defun leaf-%debug-name (leaf) + (when (functional-p leaf) + (functional-%debug-name leaf))) ;;; The CONSTANT structure is used to represent known constant values. ;;; If NAME is not null, then it is the name of the named constant @@ -669,7 +672,6 @@ ;; the value of the constant (value nil :type t)) (defprinter (constant :identity t) - (%source-name :test %source-name) value) ;;; The BASIC-VAR structure represents information common to all @@ -863,7 +865,9 @@ (plist () :type list) ;; xref information for this functional (only used for functions with an ;; XEP) - (xref () :type list)) + (xref () :type list) + ;; True if this functional was created from an inline expansion + (inline-expanded nil :type boolean)) (defprinter (functional :identity t) %source-name %debug-name @@ -962,7 +966,8 @@ (call-lexenv nil :type (or lexenv null)) ;; list of embedded lambdas (children nil :type list) - (parent nil :type (or clambda null))) + (parent nil :type (or clambda null)) + (allow-instrumenting *allow-instrumenting* :type boolean)) (defprinter (clambda :conc-name lambda- :identity t) %source-name %debug-name @@ -1107,7 +1112,12 @@ ;; propagation. This is left null by the lambda pre-pass if it ;; determine that this is a set closure variable, and is thus not a ;; good subject for flow analysis. - (constraints nil :type (or sset null))) + (constraints nil :type (or sset null)) + ;; Initial type of a LET variable as last seen by PROPAGATE-FROM-SETS. + (last-initial-type *universal-type* :type ctype) + ;; The FOP handle of the lexical variable represented by LAMBDA-VAR + ;; in the fopcompiler. + (fop-value nil)) (defprinter (lambda-var :identity t) %source-name #!+sb-show id @@ -1131,14 +1141,20 @@ (def!struct (ref (:include valued-node (reoptimize nil)) (:constructor make-ref (leaf + &optional (%source-name '.anonymous.) &aux (leaf-type (leaf-type leaf)) (derived-type (make-single-value-type leaf-type)))) (:copier nil)) ;; The leaf referenced. - (leaf nil :type leaf)) + (leaf nil :type leaf) + ;; CONSTANT nodes are always anonymous, since we wish to coalesce named and + ;; unnamed constants that are equivalent, we need to keep track of the + ;; reference name for XREF. + (%source-name (missing-arg) :type symbol :read-only t)) (defprinter (ref :identity t) #!+sb-show id + %source-name leaf) ;;; Naturally, the IF node always appears at the end of a block.