Function: comp--emit-narg-prologue

comp--emit-narg-prologue is a byte-compiled function defined in comp.el.gz.

Signature

(comp--emit-narg-prologue MINARG NONREST REST)

Documentation

Emit the prologue for a narg function.

Source Code

;; Defined in /usr/src/emacs/lisp/emacs-lisp/comp.el.gz
(defun comp--emit-narg-prologue (minarg nonrest rest)
  "Emit the prologue for a narg function."
  (cl-loop for i below minarg
           do (comp--emit `(set-args-to-local ,(comp--slot-n i)))
              (comp--emit '(inc-args)))
  (cl-loop for i from minarg below nonrest
           for bb = (intern (format "entry_%s" i))
           for fallback = (intern (format "entry_fallback_%s" i))
           do (comp--emit `(cond-jump-narg-leq ,i ,fallback ,bb))
              (comp--make-curr-block bb (comp--sp))
              (comp--emit `(set-args-to-local ,(comp--slot-n i)))
              (comp--emit '(inc-args))
              finally (comp--emit '(jump entry_rest_args)))
  (when (/= minarg nonrest)
    (cl-loop for i from minarg below nonrest
             for bb = (intern (format "entry_fallback_%s" i))
             for next-bb = (if (= (1+ i) nonrest)
                               'entry_rest_args
                             (intern (format "entry_fallback_%s" (1+ i))))
             do (comp--with-sp i
                  (comp--make-curr-block bb (comp--sp))
                  (comp--emit-setimm nil)
                  (comp--emit `(jump ,next-bb)))))
  (comp--make-curr-block 'entry_rest_args (comp--sp))
  (comp--emit `(set-rest-args-to-local ,(comp--slot-n nonrest)))
  (setf (comp--sp) nonrest)
  (when (and (> nonrest 8) (null rest))
    (cl-decf (comp--sp))))