Function: majutsu-template--apply-method-segment

majutsu-template--apply-method-segment is a natively compiled function defined in majutsu-template.el.

Signature

(majutsu-template--apply-method-segment RECEIVER-NODE RECEIVER-TYPE METHOD-NAME ARGS)

Documentation

Apply METHOD-NAME with ARGS to RECEIVER-NODE of RECEIVER-TYPE.

Return a new template node representing the segment result. Native/rendered methods produce a raw method-call node. Local lowering methods invoke their registered Elisp body and return its rewritten node.

Source Code

;; Defined in /nix/store/jagqw3nms546pad0gxi5f3wsckk6pji7-emacs-packages-deps/share/emacs/site-lisp/majutsu-template.el
(defun majutsu-template--apply-method-segment (receiver-node receiver-type method-name args)
  "Apply METHOD-NAME with ARGS to RECEIVER-NODE of RECEIVER-TYPE.
Return a new template node representing the segment result. Native/rendered
methods produce a raw method-call node. Local lowering methods invoke their
registered Elisp body and return its rewritten node."
  (let* ((dispatch (majutsu-template--method-dispatch-info receiver-type method-name))
         (dispatch-type (or (car-safe dispatch) receiver-type))
         (meta (cdr-safe dispatch))
         (prepared-args (majutsu-template--check-method-segment-args
                         receiver-type method-name args)))
    (if (majutsu-template--method-lowering-meta-p meta)
        (let ((dispatch-object (if dispatch-type
                                   (majutsu-template--node-with-type receiver-node dispatch-type)
                                 receiver-node)))
          (apply (majutsu-template--fn-symbol meta)
                 dispatch-object
                 prepared-args))
      (let* ((object-str (majutsu-template--render-node receiver-node))
             (arg-str (mapconcat #'majutsu-template--render-node prepared-args ", "))
             (result-type (majutsu-template--method-segment-result-type
                           receiver-type method-name prepared-args))
             (deferred-props (and (null dispatch)
                                  (majutsu-template--node-has-deferred-type-p receiver-node)
                                  '(:deferred-type t))))
        (majutsu-template--raw-node
         (if (= (length arg-str) 0)
             (format "%s.%s()" object-str method-name)
           (format "%s.%s(%s)" object-str method-name arg-str))
         result-type
         deferred-props)))))