diff options
Diffstat (limited to 'lisp/subr.el')
-rw-r--r-- | lisp/subr.el | 43 |
1 files changed, 21 insertions, 22 deletions
diff --git a/lisp/subr.el b/lisp/subr.el index d5120826812..1cd6598eeb5 100644 --- a/lisp/subr.el +++ b/lisp/subr.el @@ -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. |