From: Nikodemus S. <de...@us...> - 2008-08-01 11:19:10
|
Update of /cvsroot/sbcl/sbcl/src/compiler In directory sc8-pr-cvs8.sourceforge.net:/tmp/cvs-serv18283/src/compiler Modified Files: policy.lisp proclaim.lisp Log Message: 1.0.19.12: give a warning for newly deprecated stack-allcation optimization policies * Most importantly, keep the symbols around for a while, since otherwise reading code that tries to twiddle them causes a package-lock violation. * Make it a refence condition for good measure. * Prettify the output in from other policy-related warnings while at it. Index: policy.lisp =================================================================== RCS file: /cvsroot/sbcl/sbcl/src/compiler/policy.lisp,v retrieving revision 1.20 retrieving revision 1.21 diff -u -d -r1.20 -r1.21 --- policy.lisp 6 May 2008 10:45:44 -0000 1.20 +++ policy.lisp 1 Aug 2008 11:19:06 -0000 1.21 @@ -72,6 +72,16 @@ (or (memq x *policy-qualities*) (assq x *policy-dependent-qualities*))) +;;; Is it deprecated? +(defun policy-quality-deprecation-warning (quality spec) + (when (member quality '(stack-allocate-dynamic-extent stack-allocate-vector + stack-allocate-value-cells)) + (make-instance 'simple-reference-warning + :format-control "~@<Ignoring deprecated optimization quality ~S in:~_ ~S~:>" + :format-arguments (list quality spec) + :references (list '(:sbcl :variable *stack-allocate-dynamic-extent*) + '(:sbcl :node "Dynamic-extent allocation"))))) + ;;; *POLICY* holds the current global compiler policy information, as ;;; an alist mapping from optimization quality name to quality value. ;;; Inside the scope of declarations, new entries are added at the Index: proclaim.lisp =================================================================== RCS file: /cvsroot/sbcl/sbcl/src/compiler/proclaim.lisp,v retrieving revision 1.36 retrieving revision 1.37 diff -u -d -r1.36 -r1.37 --- proclaim.lisp 8 Jul 2008 21:31:53 -0000 1.36 +++ proclaim.lisp 1 Aug 2008 11:19:06 -0000 1.37 @@ -45,11 +45,13 @@ (destructuring-bind (quality raw-value) q-and-v-or-just-q (values quality raw-value))) (cond ((not (policy-quality-name-p quality)) - (compiler-warn "ignoring unknown optimization quality ~ - ~S in ~S" - quality spec)) + (let ((deprecation-warning (policy-quality-deprecation-warning quality spec))) + (if deprecation-warning + (compiler-warn deprecation-warning) + (compiler-warn "~@<Ignoring unknown optimization quality ~S in:~_ ~S~:>" + quality spec)))) ((not (typep raw-value 'policy-quality)) - (compiler-warn "ignoring bad optimization value ~S in ~S" + (compiler-warn "~@<Ignoring bad optimization value ~S in:~_ ~S~:>" raw-value spec)) (t ;; we can't do this yet, because CLOS macros expand |