changeset 295:d63a5e102cab

*** empty log message ***
author Jim Blandy <jimb@redhat.com>
date Mon, 24 Jun 1991 23:22:15 +0000
parents 97aa6a6f9aa5
children 558b874b5259
files src/eval.c src/mocklisp.c
diffstat 2 files changed, 16 insertions(+), 10 deletions(-) [+]
line wrap: on
line diff
--- a/src/eval.c	Thu Jun 20 12:32:05 1991 +0000
+++ b/src/eval.c	Mon Jun 24 23:22:15 1991 +0000
@@ -1551,7 +1551,6 @@
   register int i, numargs;
   register Lisp_Object spread_arg;
   register Lisp_Object *funcall_args;
-  struct gcpro gcpro1;
   Lisp_Object fun;
 
   fun = args [0];
@@ -1614,13 +1613,7 @@
       spread_arg = XCONS (spread_arg)->cdr;
     }
   
-  GCPRO1 (*funcall_args);
-  gcpro1.nvars = numargs + 1;
-  {
-    Lisp_Object val = Ffuncall (numargs + 1, funcall_args);
-    UNGCPRO;
-    return val;
-  }
+  return Ffuncall (numargs + 1, funcall_args);
 }
 
 /* Apply fn to arg */
@@ -1719,8 +1712,15 @@
 
   QUIT;
   if (consing_since_gc > gc_cons_threshold)
-    Fgarbage_collect ();
-
+    {
+      struct gcpro gcpro1;
+      
+      /* The backtrace protects the arguments for the rest of the function.  */
+      GCPRO1 (*args);
+      gcpro1.nvars = nargs;
+      Fgarbage_collect ();
+      UNGCPRO;
+    }
 
   if (++lisp_eval_depth > max_lisp_eval_depth)
     {
--- a/src/mocklisp.c	Thu Jun 20 12:32:05 1991 +0000
+++ b/src/mocklisp.c	Mon Jun 24 23:22:15 1991 +0000
@@ -205,6 +205,10 @@
 {
   register int argnum;
   register Lisp_Object tem;
+  struct gcpro gcpro1;
+
+  GCPRO1 (*args);
+  gcpro1.nvars = nargs;
 
   for (argnum = 0; argnum < nargs; argnum++)
     {
@@ -220,6 +224,8 @@
 	  goto retry;
 	}
     }
+
+  UNGCPRO;
   return Qnil;
 }