diff --git a/contrib/sb-cltl2/env.lisp b/contrib/sb-cltl2/env.lisp index 9a0d2f4..dc14ca4 100644 --- a/contrib/sb-cltl2/env.lisp +++ b/contrib/sb-cltl2/env.lisp @@ -219,7 +219,7 @@ CARS of the alist include: (let ((policy (sb-c::lexenv-policy env))) (collect ((res)) (dolist (name sb-c::*policy-qualities*) - (res (list name (cdr (assoc name policy))))) + (res (list name (sb-c::policy-quality policy name)))) (loop for (name . nil) in sb-c::*policy-dependent-qualities* do (res (list name (sb-c::policy-quality policy name)))) (res)))) diff --git a/contrib/sb-cltl2/tests.lisp b/contrib/sb-cltl2/tests.lisp index 0788260..a69da30 100644 --- a/contrib/sb-cltl2/tests.lisp +++ b/contrib/sb-cltl2/tests.lisp @@ -65,6 +65,8 @@ (macroexpand-all '(symbol-macrolet ((srlt '(nil zool))) (testr))) (symbol-macrolet ((srlt '(nil zool))) 'zool)) +;;;; DECLARATION-INFORMATION + (defmacro dinfo (thing &environment env) `',(declaration-information thing env)) @@ -90,6 +92,34 @@ (def compilation-speed) (def space)) + +(defmacro with-restricted-policy ((qual . val) &body body) + (let ((policy (gensym "OLD-POLICY+"))) + `(let ((,policy (sb-ext:restrict-compiler-policy))) + (unwind-protect + (progn (restrict-compiler-policy ',qual ,val) + ,@body) + (loop for (qual . val) in ,policy + do (sb-ext:restrict-compiler-policy qual val)))))) + +(deftest declaration-information.restrict-compiler-policy.1 + (with-restricted-policy (speed . 3) + (cadr (assoc 'speed (dinfo optimize)))) + 3) + +(deftest declaration-information.restrict-compiler-policy.2 + (locally (declare (optimize (speed 2))) + (with-restricted-policy (speed . 3) + (cadr (assoc 'speed (dinfo optimize))))) + 2) + +(deftest declaration-information.restrict-compiler-policy.3 + (with-restricted-policy (speed . 2) + (locally (declare (optimize speed)) + (cadr (assoc 'speed (dinfo optimize))))) + 3) + + (deftest declaration-information.muffle-conditions.default (dinfo sb-ext:muffle-conditions) nil)