mirror of
https://git.savannah.gnu.org/git/emacs.git
synced 2024-12-24 10:38:38 +00:00
(run-hooks): Don't use mapcar--save consing.
(run-hook-with-args): New function.
This commit is contained in:
parent
a27a38d8a7
commit
e8976c8a2c
23
lisp/subr.el
23
lisp/subr.el
@ -491,10 +491,31 @@ If it is a list, the elements are called, in order, with no arguments."
|
||||
(symbol-value sym)
|
||||
(let ((value (symbol-value sym)))
|
||||
(if (and (listp value) (not (eq (car value) 'lambda)))
|
||||
(mapcar 'funcall value)
|
||||
(let ((functions value))
|
||||
(while value
|
||||
(funcall (car value))
|
||||
(setq value (cdr value))))
|
||||
(funcall value)))))
|
||||
(setq hooklist (cdr hooklist))))
|
||||
|
||||
(defun run-hook-with-args (hook &rest args)
|
||||
"Run HOOK with the specified arguments ARGS.
|
||||
HOOK should be a symbol, a hook variable. If HOOK has a non-nil
|
||||
value, that value may be a function or a list of functions to be
|
||||
called to run the hook. If the value is a function, it is called with
|
||||
the given arguments and its return value is returned. If it is a list
|
||||
of functions, those functions are called, in order,
|
||||
with the given arguments ARGS.
|
||||
It is best not to depend on the value return by `run-hook-with-args',
|
||||
as that may change."
|
||||
(and (boundp hook)
|
||||
(symbol-value hook)
|
||||
(let ((value (symbol-value hook)))
|
||||
(if (and (listp value) (not (eq (car value) 'lambda)))
|
||||
(mapcar '(lambda (foo) (apply foo args))
|
||||
value)
|
||||
(apply value args)))))
|
||||
|
||||
;; Tell C code how to call this function.
|
||||
(defconst run-hooks 'run-hooks
|
||||
"Variable by which C primitives find the function `run-hooks'.
|
||||
|
Loading…
Reference in New Issue
Block a user