Function: func-arity
func-arity is a function defined in eval.c.
Signature
(func-arity FUNCTION)
Documentation
Return minimum and maximum number of args allowed for FUNCTION.
FUNCTION must be a function of some kind.
The returned value is a cons cell (MIN . MAX). MIN is the minimum number
of args. MAX is the maximum number, or the symbol many, for a
function with &rest args, or unevalled for a special form.
Note that this function might return inaccurate results in some cases,
such as with functions defined using apply-partially, functions
advised using advice-add, and functions that determine their arg
list dynamically.
Probably introduced at or before Emacs version 26.1.
Source Code
// Defined in /usr/src/emacs/src/eval.c
{
Lisp_Object original;
Lisp_Object funcar;
Lisp_Object result;
original = function;
retry:
/* Optimize for no indirection. */
function = original;
if (SYMBOLP (function) && !NILP (function))
{
function = XSYMBOL (function)->u.s.function;
if (SYMBOLP (function))
function = indirect_function (function);
}
if (CONSP (function) && EQ (XCAR (function), Qmacro))
function = XCDR (function);
if (SUBRP (function))
result = Fsubr_arity (function);
else if (CLOSUREP (function))
result = lambda_arity (function);
#ifdef HAVE_MODULES
else if (MODULE_FUNCTIONP (function))
result = module_function_arity (XMODULE_FUNCTION (function));
#endif
else
{
if (NILP (function))
xsignal1 (Qvoid_function, original);
if (!CONSP (function))
xsignal1 (Qinvalid_function, original);
funcar = XCAR (function);
if (!SYMBOLP (funcar))
xsignal1 (Qinvalid_function, original);
if (EQ (funcar, Qlambda))
result = lambda_arity (function);
else if (EQ (funcar, Qautoload))
{
Fautoload_do_load (function, original, Qnil);
goto retry;
}
else
xsignal1 (Qinvalid_function, original);
}
return result;
}