comparison src/alloc.c @ 55798:a1bb695e9a0c

(struct backtrace): Remove. (Fgarbage_collect): Use the new mark_backtrace.
author Stefan Monnier <monnier@iro.umontreal.ca>
date Fri, 28 May 2004 20:59:14 +0000
parents ee3a30045908
children a4fe04f4d9c2
comparison
equal deleted inserted replaced
55797:954cec4917f6 55798:a1bb695e9a0c
254 Lisp_Object Vgc_elapsed; /* accumulated elapsed time in GC */ 254 Lisp_Object Vgc_elapsed; /* accumulated elapsed time in GC */
255 EMACS_INT gcs_done; /* accumulated GCs */ 255 EMACS_INT gcs_done; /* accumulated GCs */
256 256
257 static void mark_buffer P_ ((Lisp_Object)); 257 static void mark_buffer P_ ((Lisp_Object));
258 extern void mark_kboards P_ ((void)); 258 extern void mark_kboards P_ ((void));
259 extern void mark_backtrace P_ ((void));
259 static void gc_sweep P_ ((void)); 260 static void gc_sweep P_ ((void));
260 static void mark_glyph_matrix P_ ((struct glyph_matrix *)); 261 static void mark_glyph_matrix P_ ((struct glyph_matrix *));
261 static void mark_face_cache P_ ((struct face_cache *)); 262 static void mark_face_cache P_ ((struct face_cache *));
262 263
263 #ifdef HAVE_WINDOW_SYSTEM 264 #ifdef HAVE_WINDOW_SYSTEM
4280 Lisp_Object tag; 4281 Lisp_Object tag;
4281 Lisp_Object val; 4282 Lisp_Object val;
4282 struct catchtag *next; 4283 struct catchtag *next;
4283 }; 4284 };
4284 4285
4285 struct backtrace
4286 {
4287 struct backtrace *next;
4288 Lisp_Object *function;
4289 Lisp_Object *args; /* Points to vector of args. */
4290 int nargs; /* Length of vector. */
4291 /* If nargs is UNEVALLED, args points to slot holding list of
4292 unevalled args. */
4293 char evalargs;
4294 /* Nonzero means call value of debugger when done with this operation. */
4295 char debug_on_exit;
4296 };
4297
4298
4299 4286
4300 /*********************************************************************** 4287 /***********************************************************************
4301 Protection from GC 4288 Protection from GC
4302 ***********************************************************************/ 4289 ***********************************************************************/
4303 4290
4328 () 4315 ()
4329 { 4316 {
4330 register struct specbinding *bind; 4317 register struct specbinding *bind;
4331 struct catchtag *catch; 4318 struct catchtag *catch;
4332 struct handler *handler; 4319 struct handler *handler;
4333 register struct backtrace *backlist;
4334 char stack_top_variable; 4320 char stack_top_variable;
4335 register int i; 4321 register int i;
4336 int message_p; 4322 int message_p;
4337 Lisp_Object total[8]; 4323 Lisp_Object total[8];
4338 int count = SPECPDL_INDEX (); 4324 int count = SPECPDL_INDEX ();
4457 for (handler = handlerlist; handler; handler = handler->next) 4443 for (handler = handlerlist; handler; handler = handler->next)
4458 { 4444 {
4459 mark_object (handler->handler); 4445 mark_object (handler->handler);
4460 mark_object (handler->var); 4446 mark_object (handler->var);
4461 } 4447 }
4462 for (backlist = backtrace_list; backlist; backlist = backlist->next) 4448 mark_backtrace ();
4463 {
4464 mark_object (*backlist->function);
4465
4466 if (backlist->nargs == UNEVALLED || backlist->nargs == MANY)
4467 i = 0;
4468 else
4469 i = backlist->nargs - 1;
4470 for (; i >= 0; i--)
4471 mark_object (backlist->args[i]);
4472 }
4473 mark_kboards (); 4449 mark_kboards ();
4474 4450
4475 #if GC_MARK_STACK == GC_USE_GCPROS_CHECK_ZOMBIES 4451 #if GC_MARK_STACK == GC_USE_GCPROS_CHECK_ZOMBIES
4476 mark_stack (); 4452 mark_stack ();
4477 #endif 4453 #endif