+(defmethod (setf documentation) (new-value (x symbol) (doc-type (eql 'compiler-macro)))
+ (awhen (compiler-macro-function x)
+ (setf (documentation it t) new-value)))
+
+(defmethod (setf documentation) (new-value (x symbol) (doc-type (eql 'setf)))
+ (setf (fdocumentation x 'setf) new-value))
+\f
+;;; method combinations
+(defmethod documentation ((x method-combination) (doc-type (eql 't)))
+ (slot-value x '%documentation))
+
+(defmethod documentation
+ ((x method-combination) (doc-type (eql 'method-combination)))
+ (slot-value x '%documentation))
+
+(defmethod documentation ((x symbol) (doc-type (eql 'method-combination)))
+ (random-documentation x 'method-combination))
+
+(defmethod (setf documentation)
+ (new-value (x method-combination) (doc-type (eql 't)))
+ (setf (slot-value x '%documentation) new-value))
+
+(defmethod (setf documentation)
+ (new-value (x method-combination) (doc-type (eql 'method-combination)))
+ (setf (slot-value x '%documentation) new-value))
+
+(defmethod (setf documentation)
+ (new-value (x symbol) (doc-type (eql 'method-combination)))
+ (setf (random-documentation x 'method-combination) new-value))
+\f
+;;; methods
+(defmethod documentation ((x standard-method) (doc-type (eql 't)))
+ (slot-value x '%documentation))
+
+(defmethod (setf documentation)
+ (new-value (x standard-method) (doc-type (eql 't)))
+ (setf (slot-value x '%documentation) new-value))
+\f