From: Paul Eggert Date: Sat, 9 Apr 2011 20:19:05 +0000 (-0700) Subject: * callint.c (Fcall_interactively): <, not <=, for optimization. X-Git-Tag: emacs-pretest-24.0.90~104^2~275^2~356^2~14 X-Git-Url: http://git.eshelyaron.com/gitweb/?a=commitdiff_plain;h=becfa255fb1fb207fa0b5d850e8df3eb53ba0bea;p=emacs.git * 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. --- diff --git a/src/ChangeLog b/src/ChangeLog index c8811f7708b..86dec69e094 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,5 +1,10 @@ 2011-04-09 Paul Eggert + * 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 diff --git a/src/callint.c b/src/callint.c index 60570369d9e..047fbcdb467 100644 --- a/src/callint.c +++ b/src/callint.c @@ -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); }