X-Git-Url: http://repo.macrolet.net/gitweb/?a=blobdiff_plain;f=src%2Fcompiler%2Fnode.lisp;h=ff67c6678281ef2c7df97fc98e4de3153b17059d;hb=9ce73d3eeef7ed9dda2f8029c5f42cc17798ad51;hp=eff4303691ac0c71cef4f3865d0f95ddf159f776;hpb=ae97d229fa1b74032a5c7cba21840598da6726c8;p=sbcl.git diff --git a/src/compiler/node.lisp b/src/compiler/node.lisp index eff4303..ff67c66 100644 --- a/src/compiler/node.lisp +++ b/src/compiler/node.lisp @@ -127,6 +127,8 @@ ;; This is computed lazily by CONTINUATION-DERIVED-TYPE, so use ;; CONTINUATION-TYPE-CHECK instead of the %'ed slot accessor. (%type-check t :type (member t nil :deleted :no-check)) + ;; Asserted type, weakend according to policies + (type-to-check *wild-type* :type ctype) ;; Cached type which is checked by DEST. If NIL, then this must be ;; recomputed: see CONTINUATION-EXTERNALLY-CHECKABLE-TYPE. (%externally-checkable-type nil :type (or null ctype)) @@ -219,7 +221,7 @@ ;;; is set when a continuation type assertion is strengthened. ;;; TEST-MODIFIED is set whenever the test for the ending IF has ;;; changed (may be true when there is no IF.) -(def-boolean-attribute block +(!def-boolean-attribute block reoptimize flush-p type-check delete-p type-asserted test-modified) ;;; FIXME: Tweak so that definitions of e.g. BLOCK-DELETE-P is @@ -274,19 +276,9 @@ (flags (block-attributes reoptimize flush-p type-check type-asserted test-modified) :type attributes) - ;; CMU CL had a KILL slot here, documented as "set used by - ;; constraint propagation", which was used in constraint propagation - ;; as a list of LAMBDA-VARs killed, and in copy propagation as an - ;; SSET, representing I dunno what. I (WHN) found this confusing, - ;; and furthermore it caused type errors when I was trying to make - ;; the compiler produce fully general LAMBDA functions directly - ;; (instead of doing as CMU CL always did, producing extra little - ;; functions which return the LAMDBA you need) and therefore taking - ;; a new path through the compiler. So I split this into two: - ;; KILL-LIST = list of LAMBDA-VARs killed, used in constraint propagation - ;; KILL-SSET = an SSET value, used in copy propagation - (kill-list nil :type list) - (kill-sset nil :type (or sset null)) + ;; in constraint propagation: list of LAMBDA-VARs killed in this block + ;; in copy propagation: list of killed TNs + (kill nil) ;; other sets used in constraint propagation and/or copy propagation (gen nil) (in nil) @@ -304,12 +296,14 @@ (flag nil) ;; some kind of info used by the back end (info nil) - ;; If true, then constraints that hold in this block and its - ;; successors by merit of being tested by its IF predecessor. + ;; constraints that hold in this block and its successors by merit + ;; of being tested by its IF predecessors. (test-constraint nil :type (or sset null))) (def!method print-object ((cblock cblock) stream) (print-unreadable-object (cblock stream :type t :identity t) - (format stream ":START c~W" (cont-num (block-start cblock))))) + (format stream "~W :START c~W" + (block-number cblock) + (cont-num (block-start cblock))))) ;;; The BLOCK-ANNOTATION class is inherited (via :INCLUDE) by ;;; different BLOCK-INFO annotation structures so that code @@ -698,8 +692,7 @@ (sets () :type list)) ;;; The GLOBAL-VAR structure represents a value hung off of the symbol -;;; NAME. We use a :CONSTANT VAR when we know that the thing is a -;;; constant, but don't know what the value is at compile time. +;;; NAME. (def!struct (global-var (:include basic-var)) ;; kind of variable described (kind (missing-arg)