Mercurial > emacs
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 |
