X-Git-Url: http://repo.macrolet.net/gitweb/?a=blobdiff_plain;f=src%2Fcode%2Ffdefinition.lisp;h=a23c0e4886c31617482cc14f363e528f103733a1;hb=cd1b14acf6f548b28b8a14e554d779f0473122ec;hp=0dd857c99b5b08657b94ad5a0998cbf146a67687;hpb=df871446529da0e83d670f35a9566c11d814be32;p=sbcl.git diff --git a/src/code/fdefinition.lisp b/src/code/fdefinition.lisp index 0dd857c..a23c0e4 100644 --- a/src/code/fdefinition.lisp +++ b/src/code/fdefinition.lisp @@ -60,6 +60,10 @@ (setf (info :function :definition name) (make-fdefn name)) fdefn))) +(defun maybe-clobber-ftype (name) + (unless (eq :declared (info :function :where-from name)) + (clear-info :function :type name))) + ;;; Return the fdefinition of NAME, including any encapsulations. ;;; The compiler emits calls to this when someone tries to FUNCALL ;;; something. SETFable. @@ -69,6 +73,7 @@ (or (and fdefn (fdefn-fun fdefn)) (error 'undefined-function :name name)))) (defun (setf %coerce-name-to-fun) (function name) + (maybe-clobber-ftype name) (let ((fdefn (fdefinition-object name t))) (setf (fdefn-fun fdefn) function))) @@ -233,6 +238,7 @@ "Set NAME's global function definition." (declare (type function new-value) (optimize (safety 1))) (with-single-package-locked-error (:symbol name "setting fdefinition of ~A") + (maybe-clobber-ftype name) ;; Check for hash-table stuff. Woe onto him that mixes encapsulation ;; with this.