Function: byte-optimize--rename-var
byte-optimize--rename-var is a byte-compiled function defined in
byte-opt.el.gz.
Signature
(byte-optimize--rename-var VAR NEW-VAR FORM)
Documentation
Replace VAR with NEW-VAR in FORM.
Source Code
;; Defined in /usr/src/emacs/lisp/emacs-lisp/byte-opt.el.gz
(defun byte-optimize--rename-var (var new-var form)
"Replace VAR with NEW-VAR in FORM."
(let ((fn (car-safe form)))
(pcase form
((pred symbolp) (if (eq form var) new-var form))
(`(setq . ,args)
(let ((new-args nil))
(while args
(push (byte-optimize--rename-var var new-var (car args)) new-args)
(push (byte-optimize--rename-var var new-var (cadr args)) new-args)
(setq args (cddr args)))
`(,fn . ,(nreverse new-args))))
;; In binding constructs like `let', `let*' and `condition-case' we
;; rename everything for simplicity, even new bindings named VAR.
(`(,(and head (or 'let 'let*)) ,bindings . ,body)
`(,head
,(mapcar (lambda (b) (byte-optimize--rename-var-body var new-var b))
bindings)
,@(byte-optimize--rename-var-body var new-var body)))
(`(condition-case ,res-var ,protected-form . ,handlers)
`(,fn ,(byte-optimize--rename-var var new-var res-var)
,(byte-optimize--rename-var var new-var protected-form)
,@(mapcar (lambda (h)
(cons (car h)
(byte-optimize--rename-var-body var new-var (cdr h))))
handlers)))
(`(internal-make-closure ,vars ,env . ,rest)
`(,fn
,vars ,(byte-optimize--rename-var-body var new-var env) . ,rest))
(`(defvar ,name . ,rest)
;; NAME is not renamed here; we only care about lexical variables.
`(,fn ,name . ,(byte-optimize--rename-var-body var new-var rest)))
(`(cond . ,clauses)
`(,fn ,@(mapcar (lambda (c)
(byte-optimize--rename-var-body var new-var c))
clauses)))
(`(function . ,_) form)
(`(quote . ,_) form)
(`(lambda . ,_) form)
;; Function calls and special forms not handled above.
(`(,head . ,args)
`(,head . ,(byte-optimize--rename-var-body var new-var args)))
(_ form))))