X-Git-Url: http://repo.macrolet.net/gitweb/?a=blobdiff_plain;f=src%2Fcompiler%2Fpolicy.lisp;h=0e7a4ebe08e2e58c75d64427a5e5aa1d4e40c4e5;hb=1071bf1ca8292aeeef4a684d277f1e6b4693865a;hp=bef5b88cc17cc01ebef50745518b1d9f0e59fe2e;hpb=3b3086ad5ad36a66302e1e6c5b7c8246c7963462;p=sbcl.git diff --git a/src/compiler/policy.lisp b/src/compiler/policy.lisp index bef5b88..0e7a4eb 100644 --- a/src/compiler/policy.lisp +++ b/src/compiler/policy.lisp @@ -42,7 +42,7 @@ ;;; Inside the scope of declarations, new entries are added at the ;;; head of the alist. (declaim (type policy *policy*)) -(defvar *policy*) ; initialized in cold init +(defvar *policy*) ; initialized in cold init ;;; This is to be called early in cold init to set things up, and may ;;; also be called again later in cold init in order to reset default @@ -50,31 +50,31 @@ ;;; OPTIMIZE forms have messed with it. (defun !policy-cold-init-or-resanify () (setf *policy-qualities* - '(;; ANSI standard qualities - compilation-speed - debug - safety - space - speed - ;; SBCL extensions - ;; - ;; FIXME: INHIBIT-WARNINGS is a misleading name for this. - ;; Perhaps BREVITY would be better. But the ideal name would - ;; have connotations of suppressing not warnings but only - ;; optimization-related notes, which is already mostly the - ;; behavior, and should probably become the exact behavior. - ;; Perhaps INHIBIT-NOTES? - inhibit-warnings)) + '(;; ANSI standard qualities + compilation-speed + debug + safety + space + speed + ;; SBCL extensions + ;; + ;; FIXME: INHIBIT-WARNINGS is a misleading name for this. + ;; Perhaps BREVITY would be better. But the ideal name would + ;; have connotations of suppressing not warnings but only + ;; optimization-related notes, which is already mostly the + ;; behavior, and should probably become the exact behavior. + ;; Perhaps INHIBIT-NOTES? + inhibit-warnings)) (setf *policy* - (mapcar (lambda (name) - ;; CMU CL didn't use 1 as the default for - ;; everything, but since ANSI says 1 is the ordinary - ;; value, we do. - (cons name 1)) - *policy-qualities*)) + (mapcar (lambda (name) + ;; CMU CL didn't use 1 as the default for + ;; everything, but since ANSI says 1 is the ordinary + ;; value, we do. + (cons name 1)) + *policy-qualities*)) ;; not actually POLICY, but very similar (setf *handled-conditions* nil - *disabled-package-locks* nil)) + *disabled-package-locks* nil)) ;;; On the cross-compilation host, we initialize immediately (not ;;; waiting for "cold init", since cold init doesn't exist on @@ -97,21 +97,20 @@ ;;; referring to them by name, e.g. (> SPEED SPACE). (defmacro policy (thing expr) (let* ((n-policy (gensym "N-POLICY-")) - (binds (mapcar (lambda (name) - `(,name (policy-quality ,n-policy ',name))) - *policy-qualities*)) + (binds (mapcar (lambda (name) + `(,name (policy-quality ,n-policy ',name))) + *policy-qualities*)) (dependent-binds (loop for (name . info) in *policy-dependent-qualities* - collect `(,name (policy-quality ,n-policy ',name)) - collect `(,name (if (= ,name 1) - ,(policy-dependent-quality-expression info) - ,name))))) - `(let* ((,n-policy (%coerce-to-policy ,thing)) - ,@binds - ,@dependent-binds) - (declare (ignorable ,@*policy-qualities* - ,@(mapcar #'car *policy-dependent-qualities*))) - ,expr))) + collect `(,name (let ((,name (policy-quality ,n-policy ',name))) + (if (= ,name 1) + ,(policy-dependent-quality-expression info) + ,name)))))) + `(let* ((,n-policy (%coerce-to-policy ,thing))) + (declare (ignorable ,n-policy)) + (symbol-macrolet (,@binds + ,@dependent-binds) + ,expr)))) ;;; Dependent qualities (defmacro define-optimization-quality