Function: majutsu-template--default-defun-body
majutsu-template--default-defun-body is a function defined in
majutsu-template.el.
Signature
(majutsu-template--default-defun-body CONTEXT)
Documentation
Return default body forms for a body-less helper using CONTEXT plist.
Source Code
;; Defined in /nix/store/jagqw3nms546pad0gxi5f3wsckk6pji7-emacs-packages-deps/share/emacs/site-lisp/majutsu-template.el
(eval-and-compile
(defun majutsu-template--default-defun-body (context)
"Return default body forms for a body-less helper using CONTEXT plist."
(let* ((template-name (plist-get context :template-name))
(owner (plist-get context :owner))
(args (plist-get context :args))
(return-type (plist-get context :returns))
(self-arg (and owner (car args)))
(call-args (if owner (cdr args) args))
(required (cl-remove-if
(lambda (arg)
(or (majutsu-template--arg-optional arg)
(majutsu-template--arg-rest arg)))
call-args))
(optional (cl-remove-if-not #'majutsu-template--arg-optional call-args))
(rest-arg (cl-find-if #'majutsu-template--arg-rest call-args))
(call-args-sym (gensym "majutsu-call-args")))
(when (and owner (not self-arg))
(user-error "majutsu-template: owner-bound helper %s must have an implicit self argument"
template-name))
(let ((base (when required
`(list ,@(mapcar #'majutsu-template--arg-name required))))
(optional-forms
(mapcar
(lambda (arg)
(let ((name (majutsu-template--arg-name arg)))
`(when ,name
(setq ,call-args-sym (append ,call-args-sym (list ,name))))))
optional))
(rest-form
(when rest-arg
(let ((name (majutsu-template--arg-name rest-arg)))
`(when ,name
(setq ,call-args-sym (append ,call-args-sym ,name)))))))
(list
`(let ((,call-args-sym ,base))
,@optional-forms
,@(when rest-form (list rest-form))
,(if owner
`(apply #'majutsu-template-method
,(majutsu-template--arg-name self-arg)
',(intern (concat ":" template-name))
,call-args-sym)
`(majutsu-template--call-node ,template-name
,call-args-sym
',return-type))))))))