diff options
author | Stefan Monnier <monnier@iro.umontreal.ca> | 2013-05-04 15:49:23 -0400 |
---|---|---|
committer | Stefan Monnier <monnier@iro.umontreal.ca> | 2013-05-04 15:49:23 -0400 |
commit | 0a6313f7e3062a1c4ed2b32b68122484e847dc0f (patch) | |
tree | 015383336887c0c24595cd45085979cbf23f6bee /doc/misc/cl.texi | |
parent | 998768afd27ecfc8bea7549a84208e0fe204d33b (diff) | |
download | emacs-0a6313f7e3062a1c4ed2b32b68122484e847dc0f.tar.gz |
* doc/misc/cl.texi (Obsolete Macros): Describe replacements for `flet'.
Fixes: debbugs:14293
Diffstat (limited to 'doc/misc/cl.texi')
-rw-r--r-- | doc/misc/cl.texi | 23 |
1 files changed, 20 insertions, 3 deletions
diff --git a/doc/misc/cl.texi b/doc/misc/cl.texi index 83df411cb23..90f8a258d23 100644 --- a/doc/misc/cl.texi +++ b/doc/misc/cl.texi @@ -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 |