Fix my previous commit on setf expansions.
authorStas Boukarev <stassats@gmail.com>
Mon, 5 Dec 2011 11:47:13 +0000 (15:47 +0400)
committerStas Boukarev <stassats@gmail.com>
Mon, 5 Dec 2011 11:47:13 +0000 (15:47 +0400)
Fix the case when `default' in (setf (getf x y default) z) isn't provided.

Add tests.

src/code/early-setf.lisp
tests/setf.impure.lisp

index fdcac0c..3cddab4 100644 (file)
 (sb!xc:define-setf-expander get (symbol prop &optional default)
   (let ((symbol-temp (gensym))
         (prop-temp (gensym))
-        (def-temp (gensym))
+        (def-temp (if default (gensym)))
         (newval (gensym)))
     (values `(,symbol-temp ,prop-temp ,@(if default `(,def-temp)))
             `(,symbol ,prop ,@(if default `(,default)))
 (sb!xc:define-setf-expander gethash (key hashtable &optional default)
   (let ((key-temp (gensym))
         (hashtable-temp (gensym))
-        (default-temp (gensym))
+        (default-temp (if default (gensym)))
         (new-value-temp (gensym)))
     (values
      `(,key-temp ,hashtable-temp ,@(if default `(,default-temp)))
index b34349a..b6b7d2f 100644 (file)
               (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