Fix make-array transforms.
[sbcl.git] / tests / setf.impure.lisp
index 62c7987..677318a 100644 (file)
       local
       global))
 
-(aver (eq :local (macrolet ((defsetf-env-trick ()))
-                   (setf (test-defsetf-env-1) 13))))
-
-(aver (eq :global (setf (test-defsetf-env-1) 13)))
-
-(aver (eq :local (macrolet ((defsetf-env-trick ()))
-                   (setf (test-defsetf-env-2 :local :oops) 13))))
-
-(aver (eq :global (setf (test-defsetf-env-2 :oops :global) 13)))
-
-(aver (eq :error
-          (handler-case
-              (eval '(defsetf test-defsetf-aux (&aux aux) (new) nil))
-            (error ()
-              :error))))
+(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)))))
+
+;;; Not required by the spec, but allowes compiler-macros for SETF-functiosn
+;;; to see their constant argument forms.
+(with-test (:name :constantp-aware-get-setf-expansion)
+  (multiple-value-bind (temps values stores set get)
+      (get-setf-expansion '(foo 1 2 3))
+    (assert (not temps))
+    (assert (not values))
+    (assert (equal `(funcall #'(setf foo) ,@stores 1 2 3) set))
+    (assert (equal '(foo 1 2 3) get))))
+
+(with-test (:name :update-fn-should-be-a-symbol-in-defsetf)
+  (assert (eq :error
+            (handler-case
+                (eval '(defsetf access-fn 5))
+              (error ()
+                :error)))))
+
+(with-test (:name :getf-unused-default-variable)
+  (handler-bind ((style-warning #'error))
+    (compile nil `(lambda (x y)
+                    (setf (gethash :x x 0) 4)
+                    (setf (getf y :y 0) 4)
+                    (setf (get 'z :z 0) 4)))))
 
 ;;; success