(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)
;; entire initial component just to clear the flags.
(flag nil)
;; some kind of info used by the back end
- (info nil))
+ (info nil)
+ ;; what macroexpansions happened "in" this block, used for xref
+ (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"
;; 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
;;; 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)
;; sure that no closure is needed.
(allocator nil :type (or null combination))
;; various rare miscellaneous info that drives code generation & stuff
- (plist () :type list))
+ (plist () :type list)
+ ;; xref information for this functional (only used for functions with an
+ ;; XEP)
+ (xref () :type list))
(defprinter (functional :identity t)
%source-name
%debug-name
;; 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
;; 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