* doc/misc/cl.texi (Obsolete Macros): Describe replacements for `flet'.

Fixes: debbugs:14293
This commit is contained in:
Stefan Monnier 2013-05-04 15:49:23 -04:00
parent 998768afd2
commit 0a6313f7e3
2 changed files with 25 additions and 3 deletions

View file

@ -1,3 +1,8 @@
2013-05-04 Stefan Monnier <monnier@iro.umontreal.ca>
* cl.texi (Obsolete Macros): Describe replacements for `flet'
(bug#14293).
2013-04-16 Michael Albinus <michael.albinus@gmx.de>
* tramp.texi (Frequently Asked Questions): Precise, how to define

View file

@ -4850,10 +4850,27 @@ generated directly inside Emacs will not be caught since they make
direct C-language calls to the message routines rather than going
through the Lisp @code{message} function.
For those cases where the dynamic scoping of @code{flet} is desired,
@code{cl-flet} is clearly not a substitute. The most direct replacement would
be instead to use @code{cl-letf} to temporarily rebind @code{(symbol-function
'@var{fun})}. But in most cases, a better substitute is to use an advice, such
as:
@example
(defvar my-fun-advice-enable nil)
(add-advice '@var{fun} :around
(lambda (orig &rest args)
(if my-fun-advice-enable (do-something)
(apply orig args))))
@end example
so that you can then replace the @code{flet} with a simple dynamically scoped
binding of @code{my-fun-advice-enable}.
@c Bug#411.
Note that many primitives (e.g., @code{+}) have special byte-compile
handling. Attempts to redefine such functions using @code{flet} will
fail if byte-compiled.
Note that many primitives (e.g., @code{+}) have special byte-compile handling.
Attempts to redefine such functions using @code{flet}, @code{cl-letf}, or an
advice will fail when byte-compiled.
@c Or cl-flet.
@c In such cases, use @code{labels} instead.
@end defmac