[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: Arbitrary function: find the number(s) of expected arguments
From: |
Eli Zaretskii |
Subject: |
Re: Arbitrary function: find the number(s) of expected arguments |
Date: |
Sat, 02 Apr 2016 12:48:53 +0300 |
> Date: Sat, 26 Mar 2016 12:42:17 +0100
> From: Paul Pogonyshev <address@hidden>
> Cc: address@hidden
>
> > There's one potential issue left:
> >
> > (func-arity 'with-temp-buffer) => error-> Invalid function:
> > with-temp-buffer
> >
> > Is it possible to support macros as well? If not, how about producing
> > a more meaningful error message?
>
> Well, according to `functionp' macros are not functions, so it's
> sort of correct. On the other hand, it seems (symbol-function ...)
> works, returning ('macro . FUNCTION) for them. However, I can't
> find any real C-level way to handle macros, e.g. `macrop' is even
> not a builtin.
>
> Or is just treating them as lists fine? If so, we could add
> something like this (untested):
>
> diff --git a/src/eval.c b/src/eval.c
> index 64a6655..5c594b8 100644
> --- a/src/eval.c
> +++ b/src/eval.c
> @@ -2958,6 +2958,9 @@ function with `&rest' args, or `unevalled' for a
> special form. */)
> && (function = XSYMBOL (function)->function, 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 (COMPILEDP (function))
>
> However, I'm not exactly sure what will happen with autoloaded
> macros.
Thanks, I installed the above.
- Re: Arbitrary function: find the number(s) of expected arguments,
Eli Zaretskii <=