Index: /trunk/source/level-1/l1-clos-boot.lisp
===================================================================
--- /trunk/source/level-1/l1-clos-boot.lisp	(revision 13979)
+++ /trunk/source/level-1/l1-clos-boot.lisp	(revision 13980)
@@ -745,8 +745,7 @@
         (when (and doc-p *save-doc-strings*)
           (set-documentation method t documentation))
-        (record-source-file method 'method)
         (when old-method (%move-method-encapsulations-maybe old-method method))
         method))))
-        
+
 
 (defun %anonymous-method (function specializers qualifiers  lambda-list &optional documentation
Index: /trunk/source/level-1/l1-dcode.lisp
===================================================================
--- /trunk/source/level-1/l1-dcode.lisp	(revision 13979)
+++ /trunk/source/level-1/l1-dcode.lisp	(revision 13980)
@@ -711,5 +711,5 @@
 
 (let* ((eql-specializers-lock (make-lock))
-       (eql-specializers-hash (make-hash-table :test #'eql)))
+       (eql-specializers-hash (make-hash-table :test #'eql  :weak :value)))
   (defun intern-eql-specializer (object)
     (with-lock-grabbed (eql-specializers-lock)
Index: /trunk/source/lib/macros.lisp
===================================================================
--- /trunk/source/lib/macros.lisp	(revision 13979)
+++ /trunk/source/lib/macros.lisp	(revision 13980)
@@ -1830,21 +1830,24 @@
 
 (defmacro defmethod (name &rest args &environment env)
-  (multiple-value-bind (function-form specializers-form qualifiers lambda-list documentation specializers)
-      (parse-defmethod name args env)
-    `(progn
-       (eval-when (:compile-toplevel)
-         (record-function-info ',(maybe-setf-function-name name)
-                               ',(multiple-value-bind (bits keyvect) (encode-lambda-list lambda-list t)
-                                   (unless bits ;; verify failed
-                                     (signal-program-error "Invalid lambda list ~s"
-                                                           (find-if #'listp args)))
-                                   (%cons-def-info 'defmethod bits keyvect nil specializers qualifiers))
-                               ,env))
-       (compiler-let ((*nx-method-warning-name* '(,name ,@qualifiers ,specializers)))
-         (ensure-method ',name ,specializers-form
-                        :function ,function-form
-                        :qualifiers ',qualifiers
-                        :lambda-list ',lambda-list
-                        ,@(if documentation `(:documentation ,documentation)))))))
+  (let* ((method (gensym)))
+    (multiple-value-bind (function-form specializers-form qualifiers lambda-list documentation specializers)
+        (parse-defmethod name args env)
+      `(progn
+        (eval-when (:compile-toplevel)
+          (record-function-info ',(maybe-setf-function-name name)
+                                ',(multiple-value-bind (bits keyvect) (encode-lambda-list lambda-list t)
+                                                       (unless bits;; verify failed
+                                                         (signal-program-error "Invalid lambda list ~s"
+                                                                               (find-if #'listp args)))
+                                                       (%cons-def-info 'defmethod bits keyvect nil specializers qualifiers))
+                                ,env))
+        (compiler-let ((*nx-method-warning-name* '(,name ,@qualifiers ,specializers)))
+          (let* ((,method (ensure-method ',name ,specializers-form
+                                         :function ,function-form
+                                         :qualifiers ',qualifiers
+                                         :lambda-list ',lambda-list
+                                         ,@(if documentation `(:documentation ,documentation)))))
+            (record-source-file ,method 'method)
+            ,method))))))
 
 
