]> git.eshelyaron.com Git - emacs.git/commitdiff
(byte-compile-and-recursion): New function.
authorRichard M. Stallman <rms@gnu.org>
Sat, 16 Jul 2005 18:02:07 +0000 (18:02 +0000)
committerRichard M. Stallman <rms@gnu.org>
Sat, 16 Jul 2005 18:02:07 +0000 (18:02 +0000)
(byte-compile-and): Use byte-compile-and-recursion.

lisp/emacs-lisp/bytecomp.el

index 36ce227df91ef2d32d1ea3c1bffc9b828ba499c6..15549ea039fc386ac03799d15a53de90a87deb37 100644 (file)
@@ -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))