X-Git-Url: http://repo.macrolet.net/gitweb/?a=blobdiff_plain;f=src%2Fcompiler%2Fir2tran.lisp;h=c614cbcf6333de8c4f66fffa6d9bfc3b5d14d896;hb=df679ed627975948b1cee190f4d79c397588c43e;hp=3d848ac4d2085d26a1f7726ee01587f06bb9d230;hpb=7ce2c42adf3d62f03086de940adaee48e6161a40;p=sbcl.git diff --git a/src/compiler/ir2tran.lisp b/src/compiler/ir2tran.lisp index 3d848ac..c614cbc 100644 --- a/src/compiler/ir2tran.lisp +++ b/src/compiler/ir2tran.lisp @@ -1039,9 +1039,11 @@ (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 @@ -1333,8 +1335,7 @@ (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 @@ -1347,7 +1348,9 @@ (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