eval-after-load fix for bug#10946
authorGlenn Morris <rgm@gnu.org>
Fri, 16 Mar 2012 01:27:23 +0000 (21:27 -0400)
committerGlenn Morris <rgm@gnu.org>
Fri, 16 Mar 2012 01:27:23 +0000 (21:27 -0400)
* lisp/subr.el (eval-after-load): If named feature is provided not
from a file, run after-load forms.

lisp/ChangeLog
lisp/subr.el

index 1e1f02f..7d9ccc9 100644 (file)
@@ -1,5 +1,8 @@
 2012-03-16  Glenn Morris  <rgm@gnu.org>
 
+       * subr.el (eval-after-load): If named feature is provided not from
+       a file, run after-load forms.  (Bug#10946)
+
        * calendar/calendar.el (calendar-insert-at-column):
        Handle non-unit-width characters a bit better.  (Bug#10978)
 
index e0b099d..514827f 100644 (file)
@@ -1785,6 +1785,8 @@ this name matching.
 
 Alternatively, FILE can be a feature (i.e. a symbol), in which case FORM
 is evaluated at the end of any file that `provide's this feature.
+If the feature is provided when evaluating code not associated with a
+file, FORM is evaluated immediately after the provide statement.
 
 Usually FILE is just a library name like \"font-lock\" or a feature name
 like 'font-lock.
@@ -1814,14 +1816,16 @@ This function makes or adds to an entry on `after-load-alist'."
        ;; 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)))))
+             `(if 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))
+                ;; Not being provided from a file, run form right now.
+                ,form)))
       ;; Add FORM to the element unless it's already there.
       (unless (member form (cdr elt))
        (nconc elt (purecopy (list form)))))))