# HG changeset patch # User Jim Blandy # Date 677805735 0 # Node ID d63a5e102cab2a5bf7ad3a9ab75394e4aadef368 # Parent 97aa6a6f9aa55456eab41c1871a3de504ae0db25 *** empty log message *** diff -r 97aa6a6f9aa5 -r d63a5e102cab src/eval.c --- 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) { diff -r 97aa6a6f9aa5 -r d63a5e102cab src/mocklisp.c --- 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; }