- (eval `(defmethod ,name (new-value (.condition. ,condition))
- (condition-writer-function .condition. new-value ',slot-name))))
+ (let ((gf (if (fboundp name)
+ (ensure-generic-function name)
+ (ensure-generic-function name :lambda-list '(new-value condition)))))
+ (if (and (eq (class-of gf) (find-class 'standard-generic-function))
+ (eq (sb-mop:generic-function-method-class gf)
+ (find-class 'standard-method)))
+ (multiple-value-bind (method-fun initargs)
+ (standard-method-function
+ (lambda (new-value condition)
+ (condition-writer-function condition new-value slot-name)))
+ (add-method gf
+ (apply #'make-instance
+ 'standard-method
+ :specializers (list (find-class t)
+ (find-class condition))
+ :lambda-list '(new-value condition)
+ :function method-fun
+ initargs)))
+ (eval `(defmethod ,name (new-value (condition ,condition))
+ (condition-writer-function condition new-value ',slot-name))))))