From: Richard M K. <kr...@us...> - 2009-02-05 18:27:42
|
Update of /cvsroot/sbcl/sbcl/tests In directory fdv4jf1.ch3.sourceforge.com:/tmp/cvs-serv18221/tests Modified Files: full-eval.impure.lisp Log Message: 1.0.25.10: Fix package locks checks for local functions in the interpeter. * Package lock checks were being performed in the function binding form's body's lexical environment, causing lossage for forms like (locally (declare (disable-package-locks foo:bar)) (flet ((foo:bar ...)) (declare (enable-package-locks foo:bar)) ...)) In particular, this broke some TRACE extensions. Index: full-eval.impure.lisp =================================================================== RCS file: /cvsroot/sbcl/sbcl/tests/full-eval.impure.lisp,v retrieving revision 1.2 retrieving revision 1.3 diff -u -d -r1.2 -r1.3 --- full-eval.impure.lisp 2 Jun 2008 15:19:15 -0000 1.2 +++ full-eval.impure.lisp 5 Feb 2009 18:27:31 -0000 1.3 @@ -55,3 +55,22 @@ (assert (eql #c(1.0 2.0) (evaluated-struct-csingle *evaluated-struct*))) (assert (eql #c(2.0d0 3.0d0) (evaluated-struct-cdouble *evaluated-struct*)))))) +;;; Prior to 1.0.25, the interpreter checked for package lock +;;; violation for a local function in the fbinding form's body's +;;; lexical environment. +(let ((sb-ext:*evaluator-mode* :interpret)) + (assert + (ignore-errors + (eval + '(eql + (locally (declare (disable-package-locks + ;; rather than create a whole new package + ;; just to test this corner case, we'll + ;; lexically shadow something innocuous in + ;; the CL package. + cl:ed)) + (flet ((cl:ed () + 42)) + (declare (enable-package-locks cl:ed)) + (cl:ed))) + 42))))) |