Function: majutsu-template--lambda-from-form

majutsu-template--lambda-from-form is a natively compiled function defined in majutsu-template.el.

Signature

(majutsu-template--lambda-from-form PARAMS BODY &optional PARAM-TYPE)

Documentation

Return lambda node from PARAMS and BODY forms.

When PARAM-TYPE is non-nil, bind the single lambda parameter to that type.

Source Code

;; Defined in /nix/store/jagqw3nms546pad0gxi5f3wsckk6pji7-emacs-packages-deps/share/emacs/site-lisp/majutsu-template.el
(defun majutsu-template--lambda-from-form (params body &optional param-type)
  "Return lambda node from PARAMS and BODY forms.
When PARAM-TYPE is non-nil, bind the single lambda parameter to that type."
  (let* ((parsed-params (majutsu-template--parse-lambda-params params))
         (self-param (car parsed-params))
         (param-type (majutsu-template--type-ref-normalize param-type))
         (bound-type (unless (memq (majutsu-template--type-ref-base-type param-type)
                                   '(Unknown Template))
                       param-type))
         (self-node (and self-param
                         (majutsu-template--var-node
                          self-param bound-type
                          (unless bound-type '(:deferred-type t)))))
         (bindings (mapcar (lambda (param)
                             (majutsu-template--make-binding
                              :name param
                              :type (and (eq param self-param) bound-type)
                              :node (when (eq param self-param) self-node)))
                           parsed-params))
         (props (majutsu-template--lambda-props body))
         (body-node (majutsu-template--call-with-bindings
                     bindings
                     (lambda ()
                       (majutsu-template--call-with-self-binding
                        self-node bound-type
                        (lambda ()
                          (majutsu-template--sugar-transform body))))))
         (lambda-type (list :lambda
                            (list (or bound-type 'Unknown))
                            (or (majutsu-template-node-type body-node) 'Unknown))))
    (majutsu-template--lambda-node parsed-params body-node props lambda-type)))