diff options
| -rw-r--r-- | lisp/emacs-lisp/bytecomp.el | 17 |
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)) |