diff --git a/src/compiler/globaldb.lisp b/src/compiler/globaldb.lisp index 6ce3c3c6c..8035168a7 100644 --- a/src/compiler/globaldb.lisp +++ b/src/compiler/globaldb.lisp @@ -294,8 +294,10 @@ ;;; :DEFINED = from examination of the definition ;;; :DEFINED-METHOD = implicit, incremental declaration by CLOS. ;;; :DECLARED = from a declaration -;;; :DEFINED trumps :ASSUMED, :DEFINED-METHOD trumps :DEFINED, -;;; and :DECLARED trumps :DEFINED-METHOD. +;;; :DEFINED trumps :ASSUMED, :DEFINED-METHOD trumps :DEFINED. +;;; We'd like :DECLARED to trump :DEFINED-METHOD, but we unconditionally +;;; override it to :DEFINED-METHOD in DEFGENERIC and DEFMETHOD. (See FIXME +;;; in pcl/boot.lisp NOTE-GF-SIGNATURE.) ;;; :DEFINED and :ASSUMED are useful for issuing compile-time warnings, ;;; :DEFINED-METHOD and :DECLARED are useful for ANSIly specializing ;;; code which implements the function, or which uses the function's diff --git a/src/pcl/boot.lisp b/src/pcl/boot.lisp index 6aa09e656..3747b8419 100644 --- a/src/pcl/boot.lisp +++ b/src/pcl/boot.lisp @@ -2482,6 +2482,8 @@ bootstrapping. earlier ~S proclamation ~/sb-impl:print-type/ for ~ the same name with ~/sb-impl:print-type/.~:@>" fun-name 'ftype old-type gf-type)) + ;; FIXME: In similar vein, don't attempt to preserve :WHERE-FROM even + ;; if it is already set to :DECLARED. (setf (info :function :type fun-name) gf-type (info :function :where-from fun-name) :defined-method) fun-name))