Function: gv--cond-expander

gv--cond-expander is a byte-compiled function defined in gv.el.gz.

Signature

(gv--cond-expander DO &rest BRANCHES)

Source Code

;; Defined in /usr/src/emacs/lisp/emacs-lisp/gv.el.gz
(defun gv--cond-expander (do &rest branches)
  (if (or (not lexical-binding) ;The other code requires lexical-binding.
          (macroexp-small-p (funcall do 'dummy (lambda (_) 'dummy))))
      ;; This duplicates the `do' code, which is a problem if that
      ;; code is large, but otherwise results in more efficient code.
      `(cond
        ,@(mapcar (lambda (branch)
                    (if (cdr branch)
                        (cons (car branch)
                              (macroexp-unprogn
                               (gv-get (macroexp-progn (cdr branch)) do)))
                      (gv-get (car branch) do)))
                  branches))
    (let ((v (gensym "v")))
      (macroexp-let2 nil
          gv `(cond
               ,@(mapcar
                  (lambda (branch)
                    (if (cdr branch)
                        `(,(car branch)
                          ,@(macroexp-unprogn
                             (gv-letplace (getter setter)
                                 (macroexp-progn (cdr branch))
                               `(cons (lambda () ,getter)
                                      (lambda (,v) ,(funcall setter v))))))
                      (gv-letplace (getter setter)
                          (car branch)
                        `(cons (lambda () ,getter)
                               (lambda (,v) ,(funcall setter v))))))
                  branches))
        (funcall do `(funcall (car ,gv))
                 (lambda (v) `(funcall (cdr ,gv) ,v)))))))