- (or (not (eq *boot-state* 'complete))
- ;; If COMPUTE-APPLICABLE-METHODS is specialized, we
- ;; can't use this, of course, because we can't tell
- ;; which methods will be considered applicable.
- ;;
- ;; Also, don't use this dfun method if the generic
- ;; function has a non-standard method combination,
- ;; because if it has, it's not sure that method
- ;; functions are used directly as effective methods,
- ;; which CONSTANT-VALUE-MISS depends on. The
- ;; pre-defined method combinations like LIST are
- ;; examples of that.
- (and (compute-applicable-methods-emf-std-p gf)
- (eq (generic-function-method-combination gf)
- *standard-method-combination*)))
- ;; Check that no method is eql-specialized, and that all
- ;; methods return a constant value. If BOOLEAN-VALUES-P,
- ;; check that all return T or NIL. Also, check that no
- ;; method has qualifiers, to make sure that emfs are really
- ;; method functions; see above.
- (dolist (method methods t)
- (when (eq *boot-state* 'complete)
- (when (or (some #'eql-specializer-p
- (method-specializers method))
- (method-qualifiers method))
- (return nil)))
- (let ((value (method-function-get
- (if early-p
- (or (third method) (second method))
- (or (method-fast-function method)
- (method-function method)))
- :constant-value default)))
- (when (or (eq value default)
- (and boolean-values-p
- (not (member value '(t nil)))))
- (return nil))))))))
+ (or (not (eq **boot-state** 'complete))
+ ;; If COMPUTE-APPLICABLE-METHODS is specialized, we
+ ;; can't use this, of course, because we can't tell
+ ;; which methods will be considered applicable.
+ ;;
+ ;; Also, don't use this dfun method if the generic
+ ;; function has a non-standard method combination,
+ ;; because if it has, it's not sure that method
+ ;; functions are used directly as effective methods,
+ ;; which CONSTANT-VALUE-MISS depends on. The
+ ;; pre-defined method combinations like LIST are
+ ;; examples of that.
+ (and (compute-applicable-methods-emf-std-p gf)
+ (eq (generic-function-method-combination gf)
+ *standard-method-combination*)))
+ ;; Check that no method is eql-specialized, and that all
+ ;; methods return a constant value. If BOOLEAN-VALUES-P,
+ ;; check that all return T or NIL. Also, check that no
+ ;; method has qualifiers, to make sure that emfs are really
+ ;; method functions; see above.
+ (dolist (method methods t)
+ (when (eq **boot-state** 'complete)
+ (when (or (some #'eql-specializer-p
+ (safe-method-specializers method))
+ (safe-method-qualifiers method))
+ (return nil)))
+ (let ((value (method-plist-value method :constant-value default)))
+ (when (or (eq value default)
+ (and boolean-values-p
+ (not (member value '(t nil)))))
+ (return nil))))))))