]> git.eshelyaron.com Git - emacs.git/commitdiff
* callint.c (Fcall_interactively): <, not <=, for optimization.
authorPaul Eggert <eggert@cs.ucla.edu>
Sat, 9 Apr 2011 20:19:05 +0000 (13:19 -0700)
committerPaul Eggert <eggert@cs.ucla.edu>
Sat, 9 Apr 2011 20:19:05 +0000 (13:19 -0700)
(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.

src/ChangeLog
src/callint.c

index c8811f7708b6065024b6d3fc0fe18e876f4f6e52..86dec69e0940ee3199bbce38948554eec968f71a 100644 (file)
@@ -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
index 60570369d9ea66ba6d24d2ad20d3898f75a08867..047fbcdb4677ca24006240da51d49e7bf949b727 100644 (file)
@@ -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);
   }