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