X-Git-Url: http://repo.macrolet.net/gitweb/?a=blobdiff_plain;f=src%2Fcode%2Ffdefinition.lisp;h=0dd857c99b5b08657b94ad5a0998cbf146a67687;hb=95591ed483dbb8c0846c129953acac1554f28809;hp=710b24cd5f7edf997411945945a6ccd9768dcff6;hpb=146ca8325e1d9e206a6c14e76442543267dbbc51;p=sbcl.git diff --git a/src/code/fdefinition.lisp b/src/code/fdefinition.lisp index 710b24c..0dd857c 100644 --- a/src/code/fdefinition.lisp +++ b/src/code/fdefinition.lisp @@ -120,18 +120,16 @@ ;;; This is like FIND-IF, except that we do it on a compiled closure's ;;; environment. -(defun find-if-in-closure (test fun) - (declare (type function test)) - (dotimes (index (1- (get-closure-length fun))) - (let ((elt (%closure-index-ref fun index))) - (when (funcall test elt) - (return elt))))) +(defun find-if-in-closure (test closure) + (declare (closure closure)) + (do-closure-values (value closure) + (when (funcall test value) + (return value)))) ;;; Find the encapsulation info that has been closed over. (defun encapsulation-info (fun) - (and (functionp fun) - (= (widetag-of fun) sb!vm:closure-header-widetag) - (find-if-in-closure #'encapsulation-info-p fun))) + (when (closurep fun) + (find-if-in-closure #'encapsulation-info-p fun))) ;;; When removing an encapsulation, we must remember that ;;; encapsulating definitions close over a reference to the