0.8alpha.0.32:
[sbcl.git] / src / compiler / ir2tran.lisp
index 3d848ac..c614cbc 100644 (file)
        (bug "full call to ~S" fname)))
 
     (when (consp fname)
-      (destructuring-bind (setf stem) fname
-       (aver (eq setf 'setf))
-       (setf (gethash stem *setf-assumed-fboundp*) t)))))
+      (destructuring-bind (setfoid &rest stem) fname
+       (aver (member setfoid
+                     '(setf sb!pcl::class-predicate sb!pcl::slot-accessor)))
+       (when (eq setfoid 'setf)
+         (setf (gethash (car stem) *setf-assumed-fboundp*) t))))))
 
 ;;; If the call is in a tail recursive position and the return
 ;;; convention is standard, then do a tail full call. If one or fewer
 (def-ir1-translator progv ((vars vals &body body) start cont)
   (ir1-convert
    start cont
-   (let ((bind (gensym "BIND"))
-         (unbind (gensym "UNBIND")))
+   (with-unique-names (bind unbind)
      (once-only ((n-save-bs '(%primitive current-binding-pointer)))
                 `(unwind-protect
                       (progn
                                    (declare (optimize (speed 2) (debug 0)))
                                    (cond ((null vars))
                                          ((null vals) (,unbind vars))
-                                         (t (%primitive bind (car vals) (car vars))
+                                         (t (%primitive bind
+                                                       (car vals)
+                                                       (car vars))
                                             (,bind (cdr vars) (cdr vals))))))
                           (,bind ,vars ,vals))
                         nil