summaryrefslogtreecommitdiff
path: root/lisp/emacs-lisp/bytecomp.el
diff options
context:
space:
mode:
authorRichard M. Stallman <rms@gnu.org>2005-07-16 18:02:07 +0000
committerRichard M. Stallman <rms@gnu.org>2005-07-16 18:02:07 +0000
commit8877fa6fb302a09353e675dea42b40e85e48eeb2 (patch)
tree408ecf25466896ed1b85bb35c9b978471d0acd0f /lisp/emacs-lisp/bytecomp.el
parent3c54e8f13680d43191ce274d5a71145fb8a89d01 (diff)
downloademacs-8877fa6fb302a09353e675dea42b40e85e48eeb2.tar.gz
emacs-8877fa6fb302a09353e675dea42b40e85e48eeb2.tar.bz2
emacs-8877fa6fb302a09353e675dea42b40e85e48eeb2.zip
(byte-compile-and-recursion): New function.
(byte-compile-and): Use byte-compile-and-recursion.
Diffstat (limited to 'lisp/emacs-lisp/bytecomp.el')
-rw-r--r--lisp/emacs-lisp/bytecomp.el17
1 files changed, 12 insertions, 5 deletions
diff --git a/lisp/emacs-lisp/bytecomp.el b/lisp/emacs-lisp/bytecomp.el
index 36ce227df91..15549ea039f 100644
--- a/lisp/emacs-lisp/bytecomp.el
+++ b/lisp/emacs-lisp/bytecomp.el
@@ -3448,12 +3448,19 @@ warnings during execution of BODY."
(args (cdr form)))
(if (null args)
(byte-compile-form-do-effect t)
- (while (cdr args)
- (byte-compile-form (car args))
+ (byte-compile-and-recursion args failtag))))
+
+;; Handle compilation of a multi-argument `and' call.
+;; We use tail recursion so we can use byte-compile-maybe-guarded.
+(defun byte-compile-and-recursion (rest failtag)
+ (if (cdr rest)
+ (progn
+ (byte-compile-form (car rest))
(byte-compile-goto-if nil for-effect failtag)
- (setq args (cdr args)))
- (byte-compile-form-do-effect (car args))
- (byte-compile-out-tag failtag))))
+ (byte-compile-maybe-guarded (car rest)
+ (byte-compile-and-recursion (cdr rest) failtag)))
+ (byte-compile-form-do-effect (car rest))
+ (byte-compile-out-tag failtag)))
(defun byte-compile-or (form)
(let ((wintag (byte-compile-make-tag))