]> code.delx.au - gnu-emacs/commitdiff
[DEBUG_GCPRO] (gcpro_level): New variable.
authorRichard M. Stallman <rms@gnu.org>
Mon, 1 Nov 1999 23:19:20 +0000 (23:19 +0000)
committerRichard M. Stallman <rms@gnu.org>
Mon, 1 Nov 1999 23:19:20 +0000 (23:19 +0000)
(init_eval) [DEBUG_GCPRO]: Initialize it.
(unwind_to_catch) [DEBUG_GCPRO]: Set gcpro_level
from remaining gcprolist.

src/eval.c

index 59150df232a09125f0c4f268096da3930dc4d1d0..4245f72c0ed0685681ac9055ddb00d1e3ca0dc46 100644 (file)
@@ -85,6 +85,11 @@ struct catchtag
 
 struct catchtag *catchlist;
 
+#ifdef DEBUG_GCPRO
+/* Count levels of GCPRO to detect failure to UNGCPRO.  */
+int gcpro_level;
+#endif
+
 Lisp_Object Qautoload, Qmacro, Qexit, Qinteractive, Qcommandp, Qdefun;
 Lisp_Object Qinhibit_quit, Vinhibit_quit, Vquit_flag;
 Lisp_Object Qmocklisp_arguments, Vmocklisp_arguments, Qmocklisp;
@@ -185,6 +190,7 @@ init_eval ()
   Vquit_flag = Qnil;
   debug_on_next_call = 0;
   lisp_eval_depth = 0;
+  gcpro_level = 0;
   /* This is less than the initial value of num_nonmacro_input_events.  */
   when_entered_debugger = -1;
 }
@@ -967,6 +973,12 @@ unwind_to_catch (catch, value)
   while (! last_time);
 
   gcprolist = catch->gcpro;
+#ifdef DEBUG_GCPRO
+  if (gcprolist != 0)
+    gcpro_level = gcprolist->level + 1;
+  else
+    gcpro_level = 0;
+#endif
   backtrace_list = catch->backlist;
   lisp_eval_depth = catch->lisp_eval_depth;