1.0.19.22: fix bug #425
[sbcl.git] / tests / setf.impure.lisp
index f14fce5..0b8a867 100644 (file)
@@ -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))
   (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)