X-Git-Url: http://repo.macrolet.net/gitweb/?a=blobdiff_plain;f=src%2Fcompiler%2Fnode.lisp;h=9896b0659da6e58a24077bc386f2dc90248c8266;hb=edf8d3701ba59bd9f0c1bd027f3179b98250cfd0;hp=3467f60b74a08989317c6ee7a9becb893caf56bd;hpb=cb83aa22932bf4b9bc74ac6f0fcd91db1702ad33;p=sbcl.git diff --git a/src/compiler/node.lisp b/src/compiler/node.lisp index 3467f60..9896b06 100644 --- a/src/compiler/node.lisp +++ b/src/compiler/node.lisp @@ -86,6 +86,7 @@ (format stream "~D" (cont-num x)))) (def!struct (node (:constructor nil) + (:include sset-element (number (incf *compiler-sset-counter*))) (:copier nil)) ;; unique ID for debugging #!+sb-show (id (new-object-id) :read-only t) @@ -248,7 +249,10 @@ ;; some kind of info used by the back end (info nil) ;; what macroexpansions happened "in" this block, used for xref - (macroexpands nil :type list)) + (macroexpands 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)))) (def!method print-object ((cblock cblock) stream) (print-unreadable-object (cblock stream :type t :identity t) (format stream "~W :START c~W" @@ -391,7 +395,9 @@ ;; this is filled by physical environment analysis (dx-lvars nil :type list) ;; The default LOOP in the component. - (outer-loop (missing-arg) :type cloop)) + (outer-loop (missing-arg) :type cloop) + ;; The current sset index + (sset-number 0 :type fixnum)) (defprinter (component :identity t) name #!+sb-show id @@ -585,6 +591,7 @@ ;;; allows us to easily substitute one for the other without actually ;;; hacking the flow graph. (def!struct (leaf (:make-load-form-fun ignore-it) + (:include sset-element (number (incf *compiler-sset-counter*))) (:constructor nil)) ;; unique ID for debugging #!+sb-show (id (new-object-id) :read-only t) @@ -932,7 +939,7 @@ ;; objects (closed-over LAMBDA-VARs and XEPs) which this lambda ;; depends on in such a way that DFO shouldn't put them in separate ;; components. - (calls-or-closes nil :type list) + (calls-or-closes (make-sset) :type (or null sset)) ;; the TAIL-SET that this LAMBDA is in. This is null during creation. ;; ;; In CMU CL, and old SBCL, this was also NILed out when LET @@ -955,7 +962,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 @@ -1100,7 +1108,10 @@ ;; 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)) + ;; 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