aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-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."
3448 (args (cdr form))) 3448 (args (cdr form)))
3449 (if (null args) 3449 (if (null args)
3450 (byte-compile-form-do-effect t) 3450 (byte-compile-form-do-effect t)
3451 (while (cdr args) 3451 (byte-compile-and-recursion args failtag))))
3452 (byte-compile-form (car args)) 3452
3453;; Handle compilation of a multi-argument `and' call.
3454;; We use tail recursion so we can use byte-compile-maybe-guarded.
3455(defun byte-compile-and-recursion (rest failtag)
3456 (if (cdr rest)
3457 (progn
3458 (byte-compile-form (car rest))
3453 (byte-compile-goto-if nil for-effect failtag) 3459 (byte-compile-goto-if nil for-effect failtag)
3454 (setq args (cdr args))) 3460 (byte-compile-maybe-guarded (car rest)
3455 (byte-compile-form-do-effect (car args)) 3461 (byte-compile-and-recursion (cdr rest) failtag)))
3456 (byte-compile-out-tag failtag)))) 3462 (byte-compile-form-do-effect (car rest))
3463 (byte-compile-out-tag failtag)))
3457 3464
3458(defun byte-compile-or (form) 3465(defun byte-compile-or (form)
3459 (let ((wintag (byte-compile-make-tag)) 3466 (let ((wintag (byte-compile-make-tag))