X-Git-Url: http://repo.macrolet.net/gitweb/?a=blobdiff_plain;ds=sidebyside;f=src%2Fcompiler%2Fnode.lisp;h=852199e4a7816e722ea00441dd5a46ac85d36ad0;hb=67f44c921881037d272c5245f0ca2ab74ce1f763;hp=f9de3162befd8ca300d4eabe28781c047857a9d9;hpb=df3969ab67c07fddeffadf1ffef414074a43d9ba;p=sbcl.git diff --git a/src/compiler/node.lisp b/src/compiler/node.lisp index f9de316..852199e 100644 --- a/src/compiler/node.lisp +++ b/src/compiler/node.lisp @@ -632,10 +632,15 @@ ;; be true when REFS and SETS are null, since code can be deleted. (ever-used nil :type boolean) ;; is it declared dynamic-extent, or truly-dynamic-extent? - (dynamic-extent nil :type (member nil t :truly)) + (extent nil :type (member nil :maybe-dynamic :always-dynamic :indefinite)) ;; some kind of info used by the back end (info nil)) +(defun leaf-dynamic-extent (leaf) + (let ((extent (leaf-extent leaf))) + (unless (member extent '(nil :indefinite)) + extent))) + ;;; LEAF name operations ;;; ;;; KLUDGE: wants CLOS.. @@ -671,7 +676,9 @@ (where-from :defined))) (:include leaf)) ;; the value of the constant - (value (missing-arg) :type t)) + (value (missing-arg) :type t) + ;; Boxed TN for this constant, if any. + (boxed-tn nil :type (or null tn))) (defprinter (constant :identity t) value) @@ -1073,6 +1080,9 @@ ;; the default for a keyword or optional, represented as the ;; original Lisp code. This is set to NIL in &KEY arguments that are ;; defaulted using the SUPPLIED-P arg. + ;; + ;; For &REST arguments this may contain information about more context + ;; the rest list comes from. (default nil :type t) ;; the actual key for a &KEY argument. Note that in ANSI CL this is ;; not necessarily a keyword: (DEFUN FOO (&KEY ((BAR BAR))) ...). @@ -1132,6 +1142,14 @@ ;; determine that this is a set closure variable, and is thus not a ;; good subject for flow analysis. (constraints nil :type (or null t #| FIXME: conset |#)) + ;; Content-addressed indices for the CONSTRAINTs on this variable. + ;; These are solely used by FIND-CONSTRAINT + (ctype-constraints nil :type (or null hash-table)) + (eq-constraints nil :type (or null hash-table)) + ;; sorted sets of constraints we like to iterate over + (eql-var-constraints nil :type (or null (array t 1))) + (inheritable-constraints nil :type (or null (array t 1))) + (private-constraints nil :type (or null (array t 1))) ;; 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