X-Git-Url: http://repo.macrolet.net/gitweb/?a=blobdiff_plain;f=tests%2Ffull-eval.impure.lisp;h=540e6de4561ef8a786b545ea4d5f034cecd130dd;hb=d7875c296a4988e9f27e2776237884deb1984c62;hp=98f345f725c4daea9d99929a30441b716747aed3;hpb=5214129a24e5876a1ad1af4fb6f09ecc353d1c31;p=sbcl.git diff --git a/tests/full-eval.impure.lisp b/tests/full-eval.impure.lisp index 98f345f..540e6de 100644 --- a/tests/full-eval.impure.lisp +++ b/tests/full-eval.impure.lisp @@ -12,7 +12,7 @@ ;;;; more information. #-sb-eval -(sb-ext:quit :unix-status 104) +(sb-ext:exit :code 104) (setf sb-ext:*evaluator-mode* :interpret) @@ -55,3 +55,52 @@ (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))))) + +(defvar *file* #p"full-eval-temp.lisp") +(with-test (:name (:full-eval :redefinition-warnings)) + (with-open-file (stream *file* :direction :output :if-exists :supersede) + (write '(defun function-for-redefinition () nil) :stream stream)) + (handler-bind ((warning #'error)) + (let ((sb-ext:*evaluator-mode* :interpret)) + (load *file*) + (load *file*)) + (let ((sb-ext:*evaluator-mode* :compile)) + (load *file*)))) +(delete-file *file*) + +(defvar *stash*) +(defun save-it (f) (setq *stash* f) 'whatever) +(with-test (:name (let* :nested-environments)) + (let ((z 'zee) (y 'y) (x 92)) + (let* ((baz (save-it (lambda (what) (assert (equal (list what x y z) + (list what 92 'y 'zee)))))) + (mum (funcall *stash* :after-binding-baz)) + (y 'new-y) + (z (progn (funcall *stash* :after-binding-y) 'new-z)) + (x (progn (funcall *stash* :after-binding-z) 'new-x))) + (funcall *stash* :in-body) + (values)))) + +(with-test (:name (let* :nested-environment-again)) + (let* ((foo 3) + (foo (lambda () (typep foo 'integer)))) + (assert (funcall foo))))