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