diff options
| author | Stefan Monnier | 2003-09-11 22:22:11 +0000 |
|---|---|---|
| committer | Stefan Monnier | 2003-09-11 22:22:11 +0000 |
| commit | 0930c1a1c8ac9398e71fd8e9ed7efb93dc41125f (patch) | |
| tree | e7fd15b3bb31c40abde660a24bb108c4a2af09df /src/alloc.c | |
| parent | 2a1c1d7150e64c0c05a1d1e17b288091cbd98011 (diff) | |
| download | emacs-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.c | 70 |
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; | |||
| 1131 | static void | 1131 | static void |
| 1132 | init_intervals () | 1132 | init_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; | |||
| 2768 | void | 2764 | void |
| 2769 | init_symbol () | 2765 | init_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; | |||
| 2854 | void | 2847 | void |
| 2855 | init_marker () | 2848 | init_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; |