-
-;;; a value for an optimization declaration
-(def!type sb!c::policy-quality () '(or (rational 0 3) null))
-\f
-;;;; 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