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)))))))