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."
  (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)))
       `(setq . ,(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)
     `(condition-case ,(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)
     `(internal-make-closure
       ,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.
     `(defvar ,name . ,(byte-optimize--rename-var-body var new-var rest)))

    (`(cond . ,clauses)
     `(cond ,@(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)))