X-Git-Url: http://repo.macrolet.net/gitweb/?a=blobdiff_plain;f=src%2Fcompiler%2Fearly-c.lisp;h=022268910b49ab499569f4cc51d1be5589eed2ab;hb=4719b7d5d66c5930d3efd6a6d8e7572b16809f8d;hp=4e75b2353ed9d4da71d7fdccd28a7951682c7fe0;hpb=64bf93a97814ea1caf62bbdcc7ef43e2fbfc8f73;p=sbcl.git diff --git a/src/compiler/early-c.lisp b/src/compiler/early-c.lisp index 4e75b23..0222689 100644 --- a/src/compiler/early-c.lisp +++ b/src/compiler/early-c.lisp @@ -38,62 +38,6 @@ ;;; the type of LAYOUT-DEPTHOID slot values (def!type sb!kernel::layout-depthoid () '(or index (integer -1 -1))) - -;;; a value for an optimization declaration -(def!type sb!c::policy-quality () '(or (rational 0 3) null)) - -;;;; policy stuff - -;;; a map from optimization policy quality to corresponding POLICY -;;; slot name, used to automatically keep POLICY-related definitions -;;; in sync even if future maintenance changes POLICY slots -(eval-when (:compile-toplevel :load-toplevel :execute) - (defstruct (policy-quality-slot (:constructor %make-pqs (quality accessor))) - ;; the name of the quality - (quality (required-argument) :type symbol) - ;; the name of the structure slot accessor - (accessor (required-argument) :type symbol)) - (defparameter *policy-quality-slots* - (list (%make-pqs 'speed 'policy-speed) - (%make-pqs 'space 'policy-space) - (%make-pqs 'safety 'policy-safety) - (%make-pqs 'cspeed 'policy-cspeed) - (%make-pqs 'brevity 'policy-brevity) - (%make-pqs 'debug 'policy-debug))) - (defun named-policy-quality-slot (name) - (find name *policy-quality-slots* :key #'policy-quality-slot-quality))) - -;;; A POLICY object holds information about the compilation policy for -;;; a node. See the LEXENV definition for a description of how it is used. -#.`(def!struct (policy - (:copier nil)) ; (but see DEFUN COPY-POLICY) - ,@(mapcar (lambda (pqs) - `(,(policy-quality-slot-quality pqs) nil - :type policy-quality)) - *policy-quality-slots*)) - -;;; an annoyingly hairy way of doing COPY-STRUCTURE on POLICY objects -;;; -;;; (We need this explicit, separate, hairy DEFUN only because we need -;;; to be able to copy POLICY objects in cold init toplevel forms, -;;; earlier than the default copier closure created by DEFSTRUCT -;;; toplevel forms would be available, and earlier than LAYOUT-INFO is -;;; initialized (which is a prerequisite for COPY-STRUCTURE to work).) -#.`(defun copy-policy (policy) - (make-policy - ,@(mapcan (lambda (pqs) - `(,(keywordicate (policy-quality-slot-quality pqs)) - (,(policy-quality-slot-accessor pqs) policy))) - *policy-quality-slots*))) - -;;; *DEFAULT-POLICY* holds the current global compiler policy -;;; information. Whenever the policy is changed, we copy the structure -;;; so that old uses will still get the old values. -;;; *DEFAULT-INTERFACE-POLICY* holds any values specified by an -;;; OPTIMIZE-INTERFACE declaration. -(declaim (type policy *default-policy* *default-interface-policy*)) -(defvar *default-policy*) ; initialized in cold init -(defvar *default-interface-policy*) ; initialized in cold init ;;; possible values for the INLINE-ness of a function. (deftype inlinep () @@ -103,7 +47,7 @@ (notinline . :notinline) (maybe-inline . :maybe-inline))) -;;; The lexical environment we are currently converting in. +;;; the lexical environment we are currently converting in (defvar *lexenv*) (declaim (type lexenv *lexenv*)) @@ -112,13 +56,13 @@ ;;; *FREE-VARIABLES*, only it deals with function names. (defvar *free-variables*) (defvar *free-functions*) -(declaim (hash-table *free-variables* *free-functions*)) +(declaim (type hash-table *free-variables* *free-functions*)) -;;; We use the same Constant structure to represent all equal anonymous -;;; constants. This hashtable translates from constants to the Leafs that +;;; We use the same CONSTANT structure to represent all equal anonymous +;;; constants. This hashtable translates from constants to the LEAFs that ;;; represent them. (defvar *constants*) -(declaim (hash-table *constants*)) +(declaim (type hash-table *constants*)) ;;; miscellaneous forward declarations (defvar *code-segment*) @@ -129,12 +73,14 @@ (defvar *compiler-warning-count*) (defvar *compiler-style-warning-count*) (defvar *compiler-note-count*) +(defvar *compiler-trace-output*) +(defvar *constraint-number*) (defvar *converting-for-interpreter*) (defvar *count-vop-usages*) (defvar *current-path*) (defvar *current-component*) -(defvar *default-policy*) -(defvar *default-interface-policy*) +(defvar *delayed-ir1-transforms*) +(defvar *policy*) (defvar *dynamic-counts-tn*) (defvar *elsewhere*) (defvar *event-info*)