mirror of
git://git.sv.gnu.org/emacs.git
synced 2026-01-02 10:11:05 -08:00
* callint.c (Fcall_interactively): <, not <=, for optimization.
(Fcall_interactively): Count the number of arguments produced, not the number of arguments given. This is simpler and lets GCC 4.6.0 generate slightly better code.
This commit is contained in:
parent
dae0cd48d8
commit
becfa255fb
2 changed files with 22 additions and 18 deletions
|
|
@ -1,5 +1,10 @@
|
|||
2011-04-09 Paul Eggert <eggert@cs.ucla.edu>
|
||||
|
||||
* callint.c (Fcall_interactively): <, not <=, for optimization.
|
||||
(Fcall_interactively): Count the number of arguments produced,
|
||||
not the number of arguments given. This is simpler and lets GCC
|
||||
4.6.0 generate slightly better code.
|
||||
|
||||
* ftfont.c: Distingish more carefully between FcChar8 and char.
|
||||
The previous code passed unsigned char * to a functions like
|
||||
strlen and xstrcasecmp that expect char *, which does not
|
||||
|
|
|
|||
|
|
@ -269,8 +269,8 @@ invoke it. If KEYS is omitted or nil, the return value of
|
|||
recorded as a call to the function named callint_argfuns[varies[i]]. */
|
||||
int *varies;
|
||||
|
||||
register size_t i, j;
|
||||
size_t count;
|
||||
register size_t i;
|
||||
size_t nargs;
|
||||
int foo;
|
||||
char prompt1[100];
|
||||
char *tem1;
|
||||
|
|
@ -445,30 +445,29 @@ invoke it. If KEYS is omitted or nil, the return value of
|
|||
else break;
|
||||
}
|
||||
|
||||
/* Count the number of arguments the interactive spec would have
|
||||
us give to the function. */
|
||||
/* Count the number of arguments, which is one plus the number of arguments
|
||||
the interactive spec would have us give to the function. */
|
||||
tem = string;
|
||||
for (j = 0; *tem;)
|
||||
for (nargs = 1; *tem; )
|
||||
{
|
||||
/* 'r' specifications ("point and mark as 2 numeric args")
|
||||
produce *two* arguments. */
|
||||
if (*tem == 'r')
|
||||
j += 2;
|
||||
nargs += 2;
|
||||
else
|
||||
j++;
|
||||
nargs++;
|
||||
tem = strchr (tem, '\n');
|
||||
if (tem)
|
||||
++tem;
|
||||
else
|
||||
break;
|
||||
}
|
||||
count = j;
|
||||
|
||||
args = (Lisp_Object *) alloca ((count + 1) * sizeof (Lisp_Object));
|
||||
visargs = (Lisp_Object *) alloca ((count + 1) * sizeof (Lisp_Object));
|
||||
varies = (int *) alloca ((count + 1) * sizeof (int));
|
||||
args = (Lisp_Object *) alloca (nargs * sizeof (Lisp_Object));
|
||||
visargs = (Lisp_Object *) alloca (nargs * sizeof (Lisp_Object));
|
||||
varies = (int *) alloca (nargs * sizeof (int));
|
||||
|
||||
for (i = 0; i < (count + 1); i++)
|
||||
for (i = 0; i < nargs; i++)
|
||||
{
|
||||
args[i] = Qnil;
|
||||
visargs[i] = Qnil;
|
||||
|
|
@ -476,8 +475,8 @@ invoke it. If KEYS is omitted or nil, the return value of
|
|||
}
|
||||
|
||||
GCPRO5 (prefix_arg, function, *args, *visargs, up_event);
|
||||
gcpro3.nvars = (count + 1);
|
||||
gcpro4.nvars = (count + 1);
|
||||
gcpro3.nvars = nargs;
|
||||
gcpro4.nvars = nargs;
|
||||
|
||||
if (!NILP (enable))
|
||||
specbind (Qenable_recursive_minibuffers, Qt);
|
||||
|
|
@ -809,14 +808,14 @@ invoke it. If KEYS is omitted or nil, the return value of
|
|||
if (arg_from_tty || !NILP (record_flag))
|
||||
{
|
||||
visargs[0] = function;
|
||||
for (i = 1; i < count + 1; i++)
|
||||
for (i = 1; i < nargs; i++)
|
||||
{
|
||||
if (varies[i] > 0)
|
||||
visargs[i] = Fcons (intern (callint_argfuns[varies[i]]), Qnil);
|
||||
else
|
||||
visargs[i] = quotify_arg (args[i]);
|
||||
}
|
||||
Vcommand_history = Fcons (Flist (count + 1, visargs),
|
||||
Vcommand_history = Fcons (Flist (nargs, visargs),
|
||||
Vcommand_history);
|
||||
/* Don't keep command history around forever. */
|
||||
if (INTEGERP (Vhistory_length) && XINT (Vhistory_length) > 0)
|
||||
|
|
@ -829,7 +828,7 @@ invoke it. If KEYS is omitted or nil, the return value of
|
|||
|
||||
/* If we used a marker to hold point, mark, or an end of the region,
|
||||
temporarily, convert it to an integer now. */
|
||||
for (i = 1; i <= count; i++)
|
||||
for (i = 1; i < nargs; i++)
|
||||
if (varies[i] >= 1 && varies[i] <= 4)
|
||||
XSETINT (args[i], marker_position (args[i]));
|
||||
|
||||
|
|
@ -846,7 +845,7 @@ invoke it. If KEYS is omitted or nil, the return value of
|
|||
specbind (Qcommand_debug_status, Qnil);
|
||||
|
||||
temporarily_switch_to_single_kboard (NULL);
|
||||
val = Ffuncall (count + 1, args);
|
||||
val = Ffuncall (nargs, args);
|
||||
UNGCPRO;
|
||||
return unbind_to (speccount, val);
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue