]> git.eshelyaron.com Git - emacs.git/commitdiff
(Fapply): Undo last change and add a comment about why.
authorStefan Monnier <monnier@iro.umontreal.ca>
Sat, 19 Apr 2003 18:58:56 +0000 (18:58 +0000)
committerStefan Monnier <monnier@iro.umontreal.ca>
Sat, 19 Apr 2003 18:58:56 +0000 (18:58 +0000)
src/eval.c

index 53272b9bd6813f38a6c7867407415140fc0e9675..80cc2f79dd7abce3b31ffcc11e1387162b9ec9da 100644 (file)
@@ -2161,7 +2161,7 @@ usage: (apply FUNCTION &rest ARGUMENTS)  */)
   register Lisp_Object spread_arg;
   register Lisp_Object *funcall_args;
   Lisp_Object fun;
-  int nvars;
+  struct gcpro gcpro1;
 
   fun = args [0];
   funcall_args = 0;
@@ -2201,7 +2201,8 @@ usage: (apply FUNCTION &rest ARGUMENTS)  */)
                                                 * sizeof (Lisp_Object));
          for (i = numargs; i < XSUBR (fun)->max_args;)
            funcall_args[++i] = Qnil;
-         nvars = 1 + XSUBR (fun)->max_args;
+         GCPRO1 (*funcall_args);
+         gcpro1.nvars = 1 + XSUBR (fun)->max_args;
        }
     }
  funcall:
@@ -2211,7 +2212,8 @@ usage: (apply FUNCTION &rest ARGUMENTS)  */)
     {
       funcall_args = (Lisp_Object *) alloca ((1 + numargs)
                                             * sizeof (Lisp_Object));
-      nvars = 1 + numargs;
+      GCPRO1 (*funcall_args);
+      gcpro1.nvars = 1 + numargs;
     }
 
   bcopy (args, funcall_args, nargs * sizeof (Lisp_Object));
@@ -2224,7 +2226,8 @@ usage: (apply FUNCTION &rest ARGUMENTS)  */)
       spread_arg = XCDR (spread_arg);
     }
 
-  return Ffuncall (nvars, funcall_args);
+  /* By convention, the caller needs to gcpro Ffuncall's args.  */
+  RETURN_UNGCPRO (Ffuncall (gcpro1.nvars, funcall_args));
 }
 \f
 /* Run hook variables in various ways.  */