GNU bug report logs -
#19634
counting MANY function args more reliably
Previous Next
Reported by: Paul Eggert <eggert <at> cs.ucla.edu>
Date: Tue, 20 Jan 2015 09:28:01 UTC
Severity: normal
Tags: patch
Done: Paul Eggert <eggert <at> cs.ucla.edu>
Bug is archived. No further changes may be made.
Full log
View this message in rfc822 format
[Message part 1 (text/plain, inline)]
Commit ef5a526f1b51b76b0f753e0936c80743a7f4463d fixed a bug in Emacs where the C
code passed 10 arguments to a function using the MANY calling convention, but
the caller mistakenly passed 8 as the argument count, and this mistakenly
discarded the last two arguments; see <http://bugs.gnu.org/3228#63>.
To help prevent this sort of mistake in the future, I would like to install
something like the attached patch, which uses a new C macro CALLN to count these
arguments automatically. The key lines in the patch are the following additions
to lisp.h:
#define CALLMANY(f, array) (f) (ARRAYELTS (array), array)
#define CALLN(f, ...) CALLMANY (f, ((Lisp_Object []) {__VA_ARGS__}))
This lets code use 'return CALLN (foo, a, b, c, d);' instead of the current
error-prone usages which are like '{ Lisp_Object args[4]; args[0] = a; args[1] =
b; args[2] = c; args[3] = d; return foo (3, args); }'. (Oops, that last '3'
should have been a '4'....)
This patch still needs a ChangeLog entry and some more testing on my part, but I
thought I'd get it out for review now.
[calln.diff (text/x-patch, attachment)]
This bug report was last modified 10 years and 141 days ago.
Previous Next
GNU bug tracking system
Copyright (C) 1999 Darren O. Benham,
1997,2003 nCipher Corporation Ltd,
1994-97 Ian Jackson.