mirror of
git://git.sv.gnu.org/emacs.git
synced 2025-12-11 00:30:17 -08:00
Fix the subr-arity returned by native compiled functions with lots of args
This fixes bug #58739. Make subr-arity return, e.g., (12 . 12) rather than (12 . many) for a function with a fixed number of arguments more than 8. * lisp/emacs-lisp/comp.el (comp-prepare-args-for-top-level): Only return a cdr of 'many when there are &rest arguments. * src/eval.c (eval_sub): Also check for a fixed number of args over 8 when using the nargs + *args calling convention. (funcall_subr): Also check numargs <= 8 before using the fixed args calling convention. Include the case numargs > 8 in the aMany calling convention. * src/lisp.h (DEFUN): Amend the comment about MANY.
This commit is contained in:
parent
174dd06464
commit
31e7b9c073
3 changed files with 17 additions and 14 deletions
|
|
@ -3183,10 +3183,11 @@ CHECK_SUBR (Lisp_Object x)
|
|||
`minargs' should be a number, the minimum number of arguments allowed.
|
||||
`maxargs' should be a number, the maximum number of arguments allowed,
|
||||
or else MANY or UNEVALLED.
|
||||
MANY means pass a vector of evaluated arguments,
|
||||
in the form of an integer number-of-arguments
|
||||
followed by the address of a vector of Lisp_Objects
|
||||
which contains the argument values.
|
||||
MANY means there are &rest arguments. Here we pass a vector
|
||||
of evaluated arguments in the form of an integer
|
||||
number-of-arguments followed by the address of a vector of
|
||||
Lisp_Objects which contains the argument values. (We also use
|
||||
this convention when calling a subr with more than 8 parameters.)
|
||||
UNEVALLED means pass the list of unevaluated arguments
|
||||
`intspec' says how interactive arguments are to be fetched.
|
||||
If the string starts with a `(', `intspec' is evaluated and the resulting
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue