Mercurial > emacs
comparison src/alloc.c @ 53093:e8f5463f3d5b
(make_float, Fcons): Clear the markbit at init time.
(make_float, Fcons, Fmake_symbol, allocate_misc): Move the increment
of block_index outside of the macro call.
(Fgarbage_collect): Remove null code.
| author | Stefan Monnier <monnier@iro.umontreal.ca> |
|---|---|
| date | Tue, 18 Nov 2003 00:39:13 +0000 |
| parents | 1bbf3f566879 |
| children | 72ce38380ab3 f82e3a6f5ccb |
comparison
equal
deleted
inserted
replaced
| 53092:4fb1e95248e2 | 53093:e8f5463f3d5b |
|---|---|
| 2227 register struct float_block *new; | 2227 register struct float_block *new; |
| 2228 | 2228 |
| 2229 new = (struct float_block *) lisp_align_malloc (sizeof *new, | 2229 new = (struct float_block *) lisp_align_malloc (sizeof *new, |
| 2230 MEM_TYPE_FLOAT); | 2230 MEM_TYPE_FLOAT); |
| 2231 new->next = float_block; | 2231 new->next = float_block; |
| 2232 bzero ((char *) new->gcmarkbits, sizeof new->gcmarkbits); | |
| 2232 float_block = new; | 2233 float_block = new; |
| 2233 float_block_index = 0; | 2234 float_block_index = 0; |
| 2234 n_float_blocks++; | 2235 n_float_blocks++; |
| 2235 } | 2236 } |
| 2236 XSETFLOAT (val, &float_block->floats[float_block_index++]); | 2237 XSETFLOAT (val, &float_block->floats[float_block_index]); |
| 2238 float_block_index++; | |
| 2237 } | 2239 } |
| 2238 | 2240 |
| 2239 XFLOAT_DATA (val) = float_value; | 2241 XFLOAT_DATA (val) = float_value; |
| 2240 FLOAT_UNMARK (XFLOAT (val)); | 2242 eassert (!FLOAT_MARKED_P (XFLOAT (val))); |
| 2241 consing_since_gc += sizeof (struct Lisp_Float); | 2243 consing_since_gc += sizeof (struct Lisp_Float); |
| 2242 floats_consed++; | 2244 floats_consed++; |
| 2243 return val; | 2245 return val; |
| 2244 } | 2246 } |
| 2245 | 2247 |
| 2343 if (cons_block_index == CONS_BLOCK_SIZE) | 2345 if (cons_block_index == CONS_BLOCK_SIZE) |
| 2344 { | 2346 { |
| 2345 register struct cons_block *new; | 2347 register struct cons_block *new; |
| 2346 new = (struct cons_block *) lisp_align_malloc (sizeof *new, | 2348 new = (struct cons_block *) lisp_align_malloc (sizeof *new, |
| 2347 MEM_TYPE_CONS); | 2349 MEM_TYPE_CONS); |
| 2350 bzero ((char *) new->gcmarkbits, sizeof new->gcmarkbits); | |
| 2348 new->next = cons_block; | 2351 new->next = cons_block; |
| 2349 cons_block = new; | 2352 cons_block = new; |
| 2350 cons_block_index = 0; | 2353 cons_block_index = 0; |
| 2351 n_cons_blocks++; | 2354 n_cons_blocks++; |
| 2352 } | 2355 } |
| 2353 XSETCONS (val, &cons_block->conses[cons_block_index++]); | 2356 XSETCONS (val, &cons_block->conses[cons_block_index]); |
| 2357 cons_block_index++; | |
| 2354 } | 2358 } |
| 2355 | 2359 |
| 2356 XSETCAR (val, car); | 2360 XSETCAR (val, car); |
| 2357 XSETCDR (val, cdr); | 2361 XSETCDR (val, cdr); |
| 2358 CONS_UNMARK (XCONS (val)); | 2362 eassert (!CONS_MARKED_P (XCONS (val))); |
| 2359 consing_since_gc += sizeof (struct Lisp_Cons); | 2363 consing_since_gc += sizeof (struct Lisp_Cons); |
| 2360 cons_cells_consed++; | 2364 cons_cells_consed++; |
| 2361 return val; | 2365 return val; |
| 2362 } | 2366 } |
| 2363 | 2367 |
| 2802 new->next = symbol_block; | 2806 new->next = symbol_block; |
| 2803 symbol_block = new; | 2807 symbol_block = new; |
| 2804 symbol_block_index = 0; | 2808 symbol_block_index = 0; |
| 2805 n_symbol_blocks++; | 2809 n_symbol_blocks++; |
| 2806 } | 2810 } |
| 2807 XSETSYMBOL (val, &symbol_block->symbols[symbol_block_index++]); | 2811 XSETSYMBOL (val, &symbol_block->symbols[symbol_block_index]); |
| 2812 symbol_block_index++; | |
| 2808 } | 2813 } |
| 2809 | 2814 |
| 2810 p = XSYMBOL (val); | 2815 p = XSYMBOL (val); |
| 2811 p->xname = name; | 2816 p->xname = name; |
| 2812 p->plist = Qnil; | 2817 p->plist = Qnil; |
| 2880 new->next = marker_block; | 2885 new->next = marker_block; |
| 2881 marker_block = new; | 2886 marker_block = new; |
| 2882 marker_block_index = 0; | 2887 marker_block_index = 0; |
| 2883 n_marker_blocks++; | 2888 n_marker_blocks++; |
| 2884 } | 2889 } |
| 2885 XSETMISC (val, &marker_block->markers[marker_block_index++]); | 2890 XSETMISC (val, &marker_block->markers[marker_block_index]); |
| 2891 marker_block_index++; | |
| 2886 } | 2892 } |
| 2887 | 2893 |
| 2888 consing_since_gc += sizeof (union Lisp_Misc); | 2894 consing_since_gc += sizeof (union Lisp_Misc); |
| 2889 misc_objects_consed++; | 2895 misc_objects_consed++; |
| 2890 XMARKER (val)->gcmarkbit = 0; | 2896 XMARKER (val)->gcmarkbit = 0; |
| 4491 #endif | 4497 #endif |
| 4492 | 4498 |
| 4493 gc_sweep (); | 4499 gc_sweep (); |
| 4494 | 4500 |
| 4495 /* Clear the mark bits that we set in certain root slots. */ | 4501 /* Clear the mark bits that we set in certain root slots. */ |
| 4496 | |
| 4497 #if (GC_MARK_STACK == GC_USE_GCPROS_AS_BEFORE \ | |
| 4498 || GC_MARK_STACK == GC_USE_GCPROS_CHECK_ZOMBIES) | |
| 4499 { | |
| 4500 register struct gcpro *tail; | |
| 4501 } | |
| 4502 #endif | |
| 4503 | 4502 |
| 4504 unmark_byte_stack (); | 4503 unmark_byte_stack (); |
| 4505 VECTOR_UNMARK (&buffer_defaults); | 4504 VECTOR_UNMARK (&buffer_defaults); |
| 4506 VECTOR_UNMARK (&buffer_local_symbols); | 4505 VECTOR_UNMARK (&buffer_local_symbols); |
| 4507 | 4506 |
