aboutsummaryrefslogtreecommitdiffstats
path: root/src/alloc.c
diff options
context:
space:
mode:
authorStefan Monnier2003-09-11 22:22:11 +0000
committerStefan Monnier2003-09-11 22:22:11 +0000
commit0930c1a1c8ac9398e71fd8e9ed7efb93dc41125f (patch)
treee7fd15b3bb31c40abde660a24bb108c4a2af09df /src/alloc.c
parent2a1c1d7150e64c0c05a1d1e17b288091cbd98011 (diff)
downloademacs-0930c1a1c8ac9398e71fd8e9ed7efb93dc41125f.tar.gz
emacs-0930c1a1c8ac9398e71fd8e9ed7efb93dc41125f.zip
(init_intervals, init_symbol, init_marker): Don't preallocate anything.
(Fgarbage_collect, mark_object): Ignore the markbit.
Diffstat (limited to 'src/alloc.c')
-rw-r--r--src/alloc.c70
1 files changed, 15 insertions, 55 deletions
diff --git a/src/alloc.c b/src/alloc.c
index 332e63c4fd2..2c63c1cd07e 100644
--- a/src/alloc.c
+++ b/src/alloc.c
@@ -1131,14 +1131,10 @@ int n_interval_blocks;
1131static void 1131static void
1132init_intervals () 1132init_intervals ()
1133{ 1133{
1134 interval_block 1134 interval_block = NULL;
1135 = (struct interval_block *) lisp_malloc (sizeof *interval_block, 1135 interval_block_index = INTERVAL_BLOCK_SIZE;
1136 MEM_TYPE_NON_LISP);
1137 interval_block->next = 0;
1138 bzero ((char *) interval_block->intervals, sizeof interval_block->intervals);
1139 interval_block_index = 0;
1140 interval_free_list = 0; 1136 interval_free_list = 0;
1141 n_interval_blocks = 1; 1137 n_interval_blocks = 0;
1142} 1138}
1143 1139
1144 1140
@@ -2768,13 +2764,10 @@ int n_symbol_blocks;
2768void 2764void
2769init_symbol () 2765init_symbol ()
2770{ 2766{
2771 symbol_block = (struct symbol_block *) lisp_malloc (sizeof *symbol_block, 2767 symbol_block = NULL;
2772 MEM_TYPE_SYMBOL); 2768 symbol_block_index = SYMBOL_BLOCK_SIZE;
2773 symbol_block->next = 0;
2774 bzero ((char *) symbol_block->symbols, sizeof symbol_block->symbols);
2775 symbol_block_index = 0;
2776 symbol_free_list = 0; 2769 symbol_free_list = 0;
2777 n_symbol_blocks = 1; 2770 n_symbol_blocks = 0;
2778} 2771}
2779 2772
2780 2773
@@ -2854,13 +2847,11 @@ int n_marker_blocks;
2854void 2847void
2855init_marker () 2848init_marker ()
2856{ 2849{
2857 marker_block = (struct marker_block *) lisp_malloc (sizeof *marker_block, 2850 marker_block = NULL;
2858 MEM_TYPE_MISC); 2851 marker_block_index = MARKER_BLOCK_SIZE;
2859 marker_block->next = 0;
2860 bzero ((char *) marker_block->markers, sizeof marker_block->markers);
2861 marker_block_index = 0;
2862 marker_free_list = 0; 2852 marker_free_list = 0;
2863 n_marker_blocks = 1; 2853 n_marker_blocks = 0;
2854 fprintf(stderr, "union Lisp_Misc = %d\n", sizeof (union Lisp_Misc));
2864} 2855}
2865 2856
2866/* Return a newly allocated Lisp_Misc object, with no substructure. */ 2857/* Return a newly allocated Lisp_Misc object, with no substructure. */
@@ -4395,12 +4386,7 @@ returns nil, because real GC can't be done. */)
4395 4386
4396 /* clear_marks (); */ 4387 /* clear_marks (); */
4397 4388
4398 /* Mark all the special slots that serve as the roots of accessibility. 4389 /* Mark all the special slots that serve as the roots of accessibility. */
4399
4400 Usually the special slots to mark are contained in particular structures.
4401 Then we know no slot is marked twice because the structures don't overlap.
4402 In some cases, the structures point to the slots to be marked.
4403 For these, we use MARKBIT to avoid double marking of the slot. */
4404 4390
4405 for (i = 0; i < staticidx; i++) 4391 for (i = 0; i < staticidx; i++)
4406 mark_object (*staticvec[i]); 4392 mark_object (*staticvec[i]);
@@ -4413,11 +4399,7 @@ returns nil, because real GC can't be done. */)
4413 register struct gcpro *tail; 4399 register struct gcpro *tail;
4414 for (tail = gcprolist; tail; tail = tail->next) 4400 for (tail = gcprolist; tail; tail = tail->next)
4415 for (i = 0; i < tail->nvars; i++) 4401 for (i = 0; i < tail->nvars; i++)
4416 if (!XMARKBIT (tail->var[i])) 4402 mark_object (tail->var[i]);
4417 {
4418 mark_object (tail->var[i]);
4419 XMARK (tail->var[i]);
4420 }
4421 } 4403 }
4422#endif 4404#endif
4423 4405
@@ -4439,21 +4421,14 @@ returns nil, because real GC can't be done. */)
4439 } 4421 }
4440 for (backlist = backtrace_list; backlist; backlist = backlist->next) 4422 for (backlist = backtrace_list; backlist; backlist = backlist->next)
4441 { 4423 {
4442 if (!XMARKBIT (*backlist->function)) 4424 mark_object (*backlist->function);
4443 { 4425
4444 mark_object (*backlist->function);
4445 XMARK (*backlist->function);
4446 }
4447 if (backlist->nargs == UNEVALLED || backlist->nargs == MANY) 4426 if (backlist->nargs == UNEVALLED || backlist->nargs == MANY)
4448 i = 0; 4427 i = 0;
4449 else 4428 else
4450 i = backlist->nargs - 1; 4429 i = backlist->nargs - 1;
4451 for (; i >= 0; i--) 4430 for (; i >= 0; i--)
4452 if (!XMARKBIT (backlist->args[i])) 4431 mark_object (backlist->args[i]);
4453 {
4454 mark_object (backlist->args[i]);
4455 XMARK (backlist->args[i]);
4456 }
4457 } 4432 }
4458 mark_kboards (); 4433 mark_kboards ();
4459 4434
@@ -4519,24 +4494,10 @@ returns nil, because real GC can't be done. */)
4519 || GC_MARK_STACK == GC_USE_GCPROS_CHECK_ZOMBIES) 4494 || GC_MARK_STACK == GC_USE_GCPROS_CHECK_ZOMBIES)
4520 { 4495 {
4521 register struct gcpro *tail; 4496 register struct gcpro *tail;
4522
4523 for (tail = gcprolist; tail; tail = tail->next)
4524 for (i = 0; i < tail->nvars; i++)
4525 XUNMARK (tail->var[i]);
4526 } 4497 }
4527#endif 4498#endif
4528 4499
4529 unmark_byte_stack (); 4500 unmark_byte_stack ();
4530 for (backlist = backtrace_list; backlist; backlist = backlist->next)
4531 {
4532 XUNMARK (*backlist->function);
4533 if (backlist->nargs == UNEVALLED || backlist->nargs == MANY)
4534 i = 0;
4535 else
4536 i = backlist->nargs - 1;
4537 for (; i >= 0; i--)
4538 XUNMARK (backlist->args[i]);
4539 }
4540 VECTOR_UNMARK (&buffer_defaults); 4501 VECTOR_UNMARK (&buffer_defaults);
4541 VECTOR_UNMARK (&buffer_local_symbols); 4502 VECTOR_UNMARK (&buffer_local_symbols);
4542 4503
@@ -4721,7 +4682,6 @@ mark_object (arg)
4721 int cdr_count = 0; 4682 int cdr_count = 0;
4722 4683
4723 loop: 4684 loop:
4724 XUNMARK (obj);
4725 4685
4726 if (PURE_POINTER_P (XPNTR (obj))) 4686 if (PURE_POINTER_P (XPNTR (obj)))
4727 return; 4687 return;