X-Git-Url: http://repo.macrolet.net/gitweb/?a=blobdiff_plain;f=src%2Fpcl%2Fboot.lisp;h=d995810cbda7dc6f99adcdea126d3384ed16b3c0;hb=17532463fa19f2fc2aba53b65c32e200a27ccd6a;hp=8c4e28efb50f7a55bf84b5a27a6571949c3efbac;hpb=7474a620a5538091b9c1cba877156f5645d78aa6;p=sbcl.git diff --git a/src/pcl/boot.lisp b/src/pcl/boot.lisp index 8c4e28e..d995810 100644 --- a/src/pcl/boot.lisp +++ b/src/pcl/boot.lisp @@ -1600,17 +1600,21 @@ bootstrapping. (declare (ignore environment)) (let ((existing (and (fboundp fun-name) (gdefinition fun-name)))) - (if (and existing - (eq *boot-state* 'complete) - (null (generic-function-p existing))) - (generic-clobbers-function fun-name) - (apply #'ensure-generic-function-using-class - existing fun-name all-keys)))) + (cond ((and existing + (eq *boot-state* 'complete) + (null (generic-function-p existing))) + (generic-clobbers-function fun-name) + (fmakunbound fun-name) + (apply #'ensure-generic-function fun-name all-keys)) + (t + (apply #'ensure-generic-function-using-class + existing fun-name all-keys))))) (defun generic-clobbers-function (fun-name) - (error 'simple-program-error - :format-control "~S already names an ordinary function or a macro." - :format-arguments (list fun-name))) + (cerror "Replace the function binding" + 'simple-program-error + :format-control "~S already names an ordinary function or a macro." + :format-arguments (list fun-name))) (defvar *sgf-wrapper* (boot-make-wrapper (early-class-size 'standard-generic-function)