Function: comp-emit-set-call-subr

comp-emit-set-call-subr is a byte-compiled function defined in comp.el.gz.

Signature

(comp-emit-set-call-subr SUBR-NAME SP-DELTA)

Documentation

Emit a call for SUBR-NAME.

SP-DELTA is the stack adjustment.

Source Code

;; Defined in /usr/src/emacs/lisp/emacs-lisp/comp.el.gz
(defun comp-emit-set-call-subr (subr-name sp-delta)
    "Emit a call for SUBR-NAME.
SP-DELTA is the stack adjustment."
    (let* ((nargs (1+ (- sp-delta)))
           (arity (comp--func-arity subr-name))
           (minarg (car arity))
           (maxarg (cdr arity)))
      (when (eq maxarg 'unevalled)
        (signal 'native-ice (list "subr contains unevalled args" subr-name)))
      (if (eq maxarg 'many)
          ;; callref case.
          (comp-emit-set-call (comp-callref subr-name nargs (comp-sp)))
        ;; Normal call.
        (unless (and (>= maxarg nargs) (<= minarg nargs))
          (signal 'native-ice
                  (list "incoherent stack adjustment" nargs maxarg minarg)))
        (let* ((subr-name subr-name)
               (slots (cl-loop for i from 0 below maxarg
                               collect (comp-slot-n (+ i (comp-sp))))))
          (comp-emit-set-call (apply #'comp-call (cons subr-name slots)))))))