X-Git-Url: http://repo.macrolet.net/gitweb/?a=blobdiff_plain;f=src%2Fcompiler%2Fnode.lisp;h=f304f10390aeed1284b842fa1e2a672a28725736;hb=31361af9eb64344f521abbb245ea784c76c746e5;hp=502d4b56601790f3c536b1733c6c9291f50f4b59;hpb=a8fa26a6e9804d3548f5bca9361a91345a689099;p=sbcl.git diff --git a/src/compiler/node.lisp b/src/compiler/node.lisp index 502d4b5..f304f10 100644 --- a/src/compiler/node.lisp +++ b/src/compiler/node.lisp @@ -514,7 +514,10 @@ ;; :DECLARED, from a declaration. ;; :ASSUMED, from uses of the object. ;; :DEFINED, from examination of the definition. - ;; FIXME: This should be a named type. (LEAF-WHERE-FROM?) + ;; 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)) ;; list of the REF nodes for this leaf (refs () :type list) @@ -573,7 +576,7 @@ ;;; defined in the same compilation block, or that have inline ;;; expansions, or have a non-NIL INLINEP value. Whenever we change ;;; the INLINEP state (i.e. an inline proclamation) we copy the -;;; structure so that former inlinep values are preserved. +;;; structure so that former INLINEP values are preserved. (def!struct (defined-function (:include global-var (where-from :defined) (kind :global-function))) @@ -1070,6 +1073,22 @@ ;; *UNDEFINED-WARNING-LIMIT* calls. (warnings () :type list)) +;;; a helper for the POLICY macro, defined late here so that the +;;; various type tests can be inlined +(declaim (ftype (function ((or list lexenv node functional)) list) + %coerce-to-policy)) +(defun %coerce-to-policy (thing) + (let ((result (etypecase thing + (list thing) + (lexenv (lexenv-policy thing)) + (node (lexenv-policy (node-lexenv thing))) + (functional (lexenv-policy (functional-lexenv thing)))))) + ;; Test the first element of the list as a rudimentary sanity + ;; that it really does look like a valid policy. + (aver (or (null result) (policy-quality-name-p (caar result)))) + ;; Voila. + result)) + ;;;; Freeze some structure types to speed type testing. #!-sb-fluid