X-Git-Url: http://repo.macrolet.net/gitweb/?a=blobdiff_plain;f=tests%2Fsetf.impure.lisp;h=0b8a86723d77ae0cbb02aec4431288907e59672a;hb=5d5894082c39ca44da75d38859d669c7b2108f6a;hp=f14fce57167704ea19129a1b8628b3a380ebe03f;hpb=dfe6138af5c38d92568b6dac48e852c01be0ec8e;p=sbcl.git diff --git a/tests/setf.impure.lisp b/tests/setf.impure.lisp index f14fce5..0b8a867 100644 --- a/tests/setf.impure.lisp +++ b/tests/setf.impure.lisp @@ -32,7 +32,7 @@ ;;; SETF of values with multiple-value place forms (let ((a t) (b t) (c t) (d t)) (let ((list (multiple-value-list - (setf (values (values a b) (values c d)) (values 1 2 3 4))))) + (setf (values (values a b) (values c d)) (values 1 2 3 4))))) (assert (equal list '(1 2))) (assert (eql a 1)) (assert (eql c 2)) @@ -51,5 +51,43 @@ (setf (macro-function 'nothing-at-all nil) fun) (assert (eq fun (macro-function 'nothing-at-all nil)))) + +;;; DEFSETF accepts &ENVIRONMENT but not &AUX +(defsetf test-defsetf-env-1 (&environment env) (new) + (declare (ignore new)) + (if (macro-function 'defsetf-env-trick env) + :local + :global)) + +(defsetf test-defsetf-env-2 (local global &environment env) (new) + (declare (ignore new)) + (if (macro-function 'defsetf-env-trick env) + local + global)) + +(assert (eq :local (macrolet ((defsetf-env-trick ())) + (setf (test-defsetf-env-1) 13)))) + +(assert (eq :global (setf (test-defsetf-env-1) 13))) + +(assert (eq :local (macrolet ((defsetf-env-trick ())) + (setf (test-defsetf-env-2 :local :oops) 13)))) + +(assert (eq :global (setf (test-defsetf-env-2 :oops :global) 13))) + +(assert (eq :error + (handler-case + (eval '(defsetf test-defsetf-aux (&aux aux) (new) nil)) + (error () + :error)))) + +(handler-bind ((style-warning #'error)) + (compile nil '(lambda () + (defsetf test-defsetf-no-env (foo) (new) + `(set-foo ,foo ,new)))) + (compile nil '(lambda () + (defsetf test-defsetf-ignore-env (foo &environment env) (new) + (declare (ignore env)) + `(set-foo ,foo ,new))))) + ;;; success -(quit :unix-status 104)