+;;; A PHYSENV represents the result of physical environment analysis.
+;;;
+;;; As far as I can tell from reverse engineering, this IR1 structure
+;;; represents the physical environment (which is probably not the
+;;; standard Lispy term for this concept, but I dunno what is the
+;;; standard term): those things in the lexical environment which a
+;;; LAMBDA actually interacts with. Thus in
+;;; (DEFUN FROB-THINGS (THINGS)
+;;; (DOLIST (THING THINGS)
+;;; (BLOCK FROBBING-ONE-THING
+;;; (MAPCAR (LAMBDA (PATTERN)
+;;; (WHEN (FITS-P THING PATTERN)
+;;; (RETURN-FROM FROB-THINGS (LIST :FIT THING PATTERN))))
+;;; *PATTERNS*))))
+;;; the variables THINGS, THING, and PATTERN and the block names
+;;; FROB-THINGS and FROBBING-ONE-THING are all in the inner LAMBDA's
+;;; lexical environment, but of those only THING, PATTERN, and
+;;; FROB-THINGS are in its physical environment. In IR1, we largely
+;;; just collect the names of these things; in IR2 an IR2-PHYSENV
+;;; structure is attached to INFO and used to keep track of
+;;; associations between these names and less-abstract things (like
+;;; TNs, or eventually stack slots and registers). -- WHN 2001-09-29
+(defstruct (physenv (:copier nil))
+ ;; the function that allocates this physical environment
+ (lambda (missing-arg) :type clambda :read-only t)
+ #| ; seems not to be used as of sbcl-0.pre7.51
+ ;; a list of all the lambdas that allocate variables in this
+ ;; physical environment