]> git.eshelyaron.com Git - emacs.git/commitdiff
eval-after-load fix for bug#10009
authorGlenn Morris <rgm@gnu.org>
Fri, 11 Nov 2011 01:46:03 +0000 (20:46 -0500)
committerGlenn Morris <rgm@gnu.org>
Fri, 11 Nov 2011 01:46:03 +0000 (20:46 -0500)
* lisp/subr.el (eval-after-load): If FILE is already loaded,
evaluate FORM before it gets wrapped in more stuff.

lisp/ChangeLog
lisp/subr.el

index 0b1572f9bce28e37d6198d5372b9686d2845723d..6df54fb45274824fe8b215c055426332900285e6 100644 (file)
@@ -1,3 +1,8 @@
+2011-11-11  Glenn Morris  <rgm@gnu.org>
+
+       * subr.el (eval-after-load): If FILE is already loaded,
+       evaluate FORM before it gets wrapped in more stuff.  (Bug#10009)
+
 2011-11-10  Glenn Morris  <rgm@gnu.org>
 
        * vc/vc-svn.el (vc-svn-create-repo, vc-svn-modify-change-comment):
index d5120826812e64e945b45415742980d88fbcbbe4..1cd6598eeb5f51c6f2052ad2defe7b508f29626e 100644 (file)
@@ -1797,30 +1797,29 @@ This function makes or adds to an entry on `after-load-alist'."
       (push elt after-load-alist))
     ;; Make sure `form' is evalled in the current lexical/dynamic code.
     (setq form `(funcall ',(eval `(lambda () ,form) lexical-binding)))
-    (when (symbolp regexp-or-feature)
-      ;; For features, the after-load-alist elements get run when `provide' is
-      ;; called rather than at the end of the file.  So add an indirection to
-      ;; make sure that `form' is really run "after-load" in case the provide
-      ;; call happens early.
-      (setq form
-            `(when load-file-name
-               (let ((fun (make-symbol "eval-after-load-helper")))
-                 (fset fun `(lambda (file)
-                              (if (not (equal file ',load-file-name))
-                                  nil
-                                (remove-hook 'after-load-functions ',fun)
-                                ,',form)))
-                 (add-hook 'after-load-functions fun)))))
-    ;; Add FORM to the element unless it's already there.
-    (unless (member form (cdr elt))
-      (nconc elt (purecopy (list form))))
-
     ;; Is there an already loaded file whose name (or `provide' name)
     ;; matches FILE?
-    (if (if (stringp file)
-           (load-history-filename-element regexp-or-feature)
-         (featurep file))
-       (eval form))))
+    (prog1 (if (if (stringp file)
+                  (load-history-filename-element regexp-or-feature)
+                (featurep file))
+              (eval form))
+      (when (symbolp regexp-or-feature)
+       ;; For features, the after-load-alist elements get run when `provide' is
+       ;; called rather than at the end of the file.  So add an indirection to
+       ;; make sure that `form' is really run "after-load" in case the provide
+       ;; call happens early.
+       (setq form
+             `(when load-file-name
+                (let ((fun (make-symbol "eval-after-load-helper")))
+                  (fset fun `(lambda (file)
+                               (if (not (equal file ',load-file-name))
+                                   nil
+                                 (remove-hook 'after-load-functions ',fun)
+                                 ,',form)))
+                  (add-hook 'after-load-functions fun)))))
+      ;; Add FORM to the element unless it's already there.
+      (unless (member form (cdr elt))
+       (nconc elt (purecopy (list form)))))))
 
 (defvar after-load-functions nil
   "Special hook run after loading a file.