# HG changeset patch # User Stefan Monnier # Date 1005919884 0 # Node ID dc77550aede32c7c7aae03159d6af574bc556a1a # Parent e7fb0abe0a4d525709822733eb68d26d1516f190 (eval-after-load): Make it work with features as well. diff -r e7fb0abe0a4d -r dc77550aede3 lisp/subr.el --- a/lisp/subr.el Fri Nov 16 14:05:06 2001 +0000 +++ b/lisp/subr.el Fri Nov 16 14:11:24 2001 +0000 @@ -847,21 +847,23 @@ It does nothing if FORM is already on the list for FILE. FILE must match exactly. Normally FILE is the name of a library, with no directory or extension specified, since that is how `load' -is normally called." - ;; Make sure `load-history' contains the files dumped with Emacs - ;; for the case that FILE is one of the files dumped with Emacs. - (load-symbol-file-load-history) - ;; Make sure there is an element for FILE. - (or (assoc file after-load-alist) - (setq after-load-alist (cons (list file) after-load-alist))) - ;; Add FORM to the element if it isn't there. +is normally called. +FILE can also be a feature (i.e. a symbol), in which case FORM is +evaluated whenever that feature is `provide'd." (let ((elt (assoc file after-load-alist))) - (or (member form (cdr elt)) - (progn - (nconc elt (list form)) - ;; If the file has been loaded already, run FORM right away. - (and (assoc file load-history) - (eval form))))) + ;; Make sure there is an element for FILE. + (unless elt (setq elt (list file)) (push elt after-load-alist)) + ;; Add FORM to the element if it isn't there. + (unless (member form (cdr elt)) + (nconc elt (list form)) + ;; If the file has been loaded already, run FORM right away. + (if (if (symbolp file) + (featurep file) + ;; Make sure `load-history' contains the files dumped with + ;; Emacs for the case that FILE is one of them. + (load-symbol-file-load-history) + (assoc file load-history)) + (eval form)))) form) (defun eval-next-after-load (file) @@ -1534,11 +1536,10 @@ (defun functionp (object) "Non-nil iff OBJECT is a type of object that can be called as a function." - (or (and (symbolp object) - (fboundp object) + (or (and (symbolp object) (fboundp object) (setq object (indirect-function object)) (eq (car-safe object) 'autoload) - (not (car-safe (cdr-safe (cdr-safe (cdr-safe (cdr-safe object))))))) + (not (car-safe (cdr-safe (cdr-safe (cdr-safe (cdr object))))))) (subrp object) (byte-code-function-p object) (eq (car-safe object) 'lambda)))