Function: byte-compile-cond
byte-compile-cond is a byte-compiled function defined in
bytecomp.el.gz.
Signature
(byte-compile-cond CLAUSES)
Source Code
;; Defined in /usr/src/emacs/lisp/emacs-lisp/bytecomp.el.gz
(defun byte-compile-cond (clauses)
(let ((donetag (byte-compile-make-tag))
nexttag clause)
(setq clauses (cdr clauses))
(while clauses
(let ((switch-prefix (and byte-compile-cond-use-jump-table
(byte-compile--cond-switch-prefix clauses))))
(if switch-prefix
(progn
(byte-compile-cond-jump-table (cdr switch-prefix) donetag)
(setq clause nil)
(setq clauses (car switch-prefix)))
(setq clause (car clauses))
(cond ((or (eq (car clause) t)
(and (eq (car-safe (car clause)) 'quote)
(car-safe (cdr-safe (car clause)))))
;; Unconditional clause
(setq clause (cons t clause)
clauses nil))
((cdr clauses)
(byte-compile-form (car clause))
(if (null (cdr clause))
;; First clause is a singleton.
(byte-compile-goto-if t byte-compile--for-effect donetag)
(setq nexttag (byte-compile-make-tag))
(byte-compile-goto 'byte-goto-if-nil nexttag)
(byte-compile-maybe-guarded (car clause)
(byte-compile-body (cdr clause) byte-compile--for-effect))
(byte-compile-goto 'byte-goto donetag)
(byte-compile-out-tag nexttag))))
(setq clauses (cdr clauses)))))
;; Last clause
(let ((guard (car clause)))
(and (cdr clause) (not (eq guard t))
(progn (byte-compile-form guard)
(byte-compile-goto-if nil byte-compile--for-effect donetag)
(setq clause (cdr clause))))
(byte-compile-maybe-guarded guard
(byte-compile-body-do-effect clause)))
(byte-compile-out-tag donetag)))