X-Git-Url: http://repo.macrolet.net/gitweb/?a=blobdiff_plain;f=src%2Fcompiler%2Fnode.lisp;h=ed0676e5c81bf095cf96730a1236763df9e02bb0;hb=e3113504fca73ebd1b992930315386d9d3ae5d18;hp=fb27f290d5dcb33f9b73122b89e8a48bc54d04cb;hpb=68664fcaa607ab61bc53bce1e9795622942135a4;p=sbcl.git diff --git a/src/compiler/node.lisp b/src/compiler/node.lisp index fb27f29..ed0676e 100644 --- a/src/compiler/node.lisp +++ b/src/compiler/node.lisp @@ -371,9 +371,6 @@ ;; on me (e.g. by using me as *CURRENT-COMPONENT*, or by pushing ;; LAMBDAs onto my NEW-FUNCTIONALS, as in sbcl-0.pre7.115). (info :no-ir2-yet :type (or ir2-component (member :no-ir2-yet :dead))) - ;; the SOURCE-INFO structure describing where this component was - ;; compiled from - (source-info *source-info* :type source-info) ;; count of the number of inline expansions we have done while ;; compiling this component, to detect infinite or exponential ;; blowups @@ -620,22 +617,26 @@ :read-only t) ;; the type which values of this leaf must have (type *universal-type* :type ctype) + ;; the type which values of this leaf have last been defined to have + ;; (but maybe won't have in future, in case of redefinition) + (defined-type *universal-type* :type ctype) ;; where the TYPE information came from: ;; :DECLARED, from a declaration. ;; :ASSUMED, from uses of the object. ;; :DEFINED, from examination of the definition. + ;; :DEFINED-METHOD, implicit, piecemeal declarations from CLOS. ;; FIXME: This should be a named type. (LEAF-WHERE-FROM? Or ;; perhaps just WHERE-FROM, since it's not just used in LEAF, ;; but also in various DEFINE-INFO-TYPEs in globaldb.lisp, ;; and very likely elsewhere too.) - (where-from :assumed :type (member :declared :assumed :defined)) + (where-from :assumed :type (member :declared :assumed :defined :defined-method)) ;; list of the REF nodes for this leaf (refs () :type list) ;; true if there was ever a REF or SET node for this leaf. This may ;; be true when REFS and SETS are null, since code can be deleted. (ever-used nil :type boolean) - ;; is it declared dynamic-extent? - (dynamic-extent nil :type boolean) + ;; is it declared dynamic-extent, or truly-dynamic-extent? + (dynamic-extent nil :type (member nil t :truly)) ;; some kind of info used by the back end (info nil)) @@ -971,7 +972,11 @@ ;; list of embedded lambdas (children nil :type list) (parent nil :type (or clambda null)) - (allow-instrumenting *allow-instrumenting* :type boolean)) + (allow-instrumenting *allow-instrumenting* :type boolean) + ;; True if this is a system introduced lambda: it may contain user code, but + ;; the lambda itself is not, and the bindings introduced by it are considered + ;; transparent by the nested DX analysis. + (system-lambda-p nil :type boolean)) (defprinter (clambda :conc-name lambda- :identity t) %source-name %debug-name @@ -1116,7 +1121,7 @@ ;; 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 null t #| FIXME: conset |#)) ;; 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 @@ -1172,9 +1177,9 @@ ;; the blocks that we execute next in true and false case, ;; respectively (may be the same) (consequent (missing-arg) :type cblock) - (consequent-constraints nil :type (or null sset)) + (consequent-constraints nil :type (or null t #| FIXME: conset |#)) (alternative (missing-arg) :type cblock) - (alternative-constraints nil :type (or null sset))) + (alternative-constraints nil :type (or null t #| FIXME: conset |#))) (defprinter (cif :conc-name if- :identity t) (test :prin1 (lvar-uses test)) consequent