diff options
| author | Gerd Moellmann | 2000-02-17 15:23:58 +0000 |
|---|---|---|
| committer | Gerd Moellmann | 2000-02-17 15:23:58 +0000 |
| commit | 1216f5e4132d14cad310cb8ac6fb91fac41569f7 (patch) | |
| tree | 389b1dce2955d4428395fb245ba25ea9a6ff0c18 /src | |
| parent | 39ec21eae0095f38d43febcef4787fffe13388a6 (diff) | |
| download | emacs-1216f5e4132d14cad310cb8ac6fb91fac41569f7.tar.gz emacs-1216f5e4132d14cad310cb8ac6fb91fac41569f7.zip | |
(GC_USE_GCPROS_AS_BEFORE, GC_MAKE_GCPROS_NOOPS)
(GC_MARK_STACK_CHECK_GCPROS, GC_USE_GCPROS_CHECK_ZOMBIES)
[GC_MARK_STACK]: New defines.
(GCPRO1, GCPRO2, GCPRO3, GCPRO4, GCPRO5, UNGCPRO)
[GC_MARK_STACK == GC_MAKE_GCPROS_NOOPS]: Define as no-ops.
Diffstat (limited to 'src')
| -rw-r--r-- | src/ChangeLog | 41 | ||||
| -rw-r--r-- | src/lisp.h | 32 |
2 files changed, 73 insertions, 0 deletions
diff --git a/src/ChangeLog b/src/ChangeLog index 36092bdbe61..a383d08cc1f 100644 --- a/src/ChangeLog +++ b/src/ChangeLog | |||
| @@ -1,5 +1,46 @@ | |||
| 1 | 2000-02-17 Gerd Moellmann <gerd@gnu.org> | 1 | 2000-02-17 Gerd Moellmann <gerd@gnu.org> |
| 2 | 2 | ||
| 3 | * alloc.c (mark_object): Don't mark symbol names in pure space. | ||
| 4 | (gc_sweep): Don't unmark symbol names in pure space. | ||
| 5 | |||
| 6 | * lisp.h (GC_USE_GCPROS_AS_BEFORE, GC_MAKE_GCPROS_NOOPS) | ||
| 7 | (GC_MARK_STACK_CHECK_GCPROS, GC_USE_GCPROS_CHECK_ZOMBIES) | ||
| 8 | [GC_MARK_STACK]: New defines. | ||
| 9 | (GCPRO1, GCPRO2, GCPRO3, GCPRO4, GCPRO5, UNGCPRO) | ||
| 10 | [GC_MARK_STACK == GC_MAKE_GCPROS_NOOPS]: Define as no-ops. | ||
| 11 | |||
| 12 | * emacs.c (main) [GC_MARK_STACK]: Initialize stack_base. | ||
| 13 | |||
| 14 | * buffer.c (Fget_buffer_create, Fmake_indirect_buffer): Use | ||
| 15 | allocate_buffer instead of xmalloc. | ||
| 16 | |||
| 17 | * alloc.c (toplevel): Include setjmp.h. | ||
| 18 | (PURE_POINTER_P): New define. | ||
| 19 | (enum mem_type) [GC_MARK_STACK]: New enumeration. | ||
| 20 | (Vdead) [GC_MARK_STACK]: New variable. | ||
| 21 | (lisp_malloc): Add parameter TYPE, call mem_insert if | ||
| 22 | GC_MARK_STACK is defined. | ||
| 23 | (allocate_buffer): New function. | ||
| 24 | (lisp_free) [GC_MARK_STACK]: Call mem_delete. | ||
| 25 | (free_float) [GC_MARK_STACK]: Set type to Vdead. | ||
| 26 | (free_cons) [GC_MARK_STACK]: Set car to Vdead. | ||
| 27 | (stack_base, mem_root, mem_z) [GC_MARK_STACK]: New variables. | ||
| 28 | (MEM_NIL) [GC_MARK_STACK]: New define. | ||
| 29 | (struct mem_node) [GC_MARK_STACK]: New structure. | ||
| 30 | (mem_init, mem_find, mem_insert, mem_delete, mem_insert_fixup) | ||
| 31 | (mem_delete_fixup, mem_rotate_left, mem_rotate_right) | ||
| 32 | (live_string_p, live_cons_p, live_symbol_p, live_float_p) | ||
| 33 | (live_misc_p, live_vector_p, live_buffer_p, mark_memory) | ||
| 34 | (mark_stack) [GC_MARK_STACK]: New functions. | ||
| 35 | (Fgarbage_collect) [GC_MARK_STACK]: Call mark_stack. | ||
| 36 | (clear_marks): Removed. | ||
| 37 | (gc_sweep): Set free conses' car, free floats' type, free | ||
| 38 | symbols' function to Vdead. Use lisp_free to free buffers. | ||
| 39 | (init_alloc_once): Initialize Vdead. | ||
| 40 | (survives_gc_p): Return non-zero for pure objects. | ||
| 41 | |||
| 42 | * alloc.c: Add comments throughout the file. | ||
| 43 | |||
| 3 | * atimer.c (stop_other_atimers): Don't call cancel_atimer because | 44 | * atimer.c (stop_other_atimers): Don't call cancel_atimer because |
| 4 | that unblocks alarms. | 45 | that unblocks alarms. |
| 5 | 46 | ||
diff --git a/src/lisp.h b/src/lisp.h index a826e35870e..a398c9a581a 100644 --- a/src/lisp.h +++ b/src/lisp.h | |||
| @@ -1578,6 +1578,36 @@ struct gcpro | |||
| 1578 | #endif | 1578 | #endif |
| 1579 | }; | 1579 | }; |
| 1580 | 1580 | ||
| 1581 | /* Values of GC_MARK_STACK during compilation: | ||
| 1582 | |||
| 1583 | 0 Use GCPRO as before | ||
| 1584 | 1 Do the real thing, make GCPROs and UNGCPRO no-ops. | ||
| 1585 | 2 Mark the stack, and check that everything GCPRO'd is | ||
| 1586 | marked. | ||
| 1587 | 3 Mark using GCPRO's, mark stack last, and count how many | ||
| 1588 | dead objects are kept alive. */ | ||
| 1589 | |||
| 1590 | |||
| 1591 | #define GC_USE_GCPROS_AS_BEFORE 0 | ||
| 1592 | #define GC_MAKE_GCPROS_NOOPS 1 | ||
| 1593 | #define GC_MARK_STACK_CHECK_GCPROS 2 | ||
| 1594 | #define GC_USE_GCPROS_CHECK_ZOMBIES 3 | ||
| 1595 | |||
| 1596 | #ifndef GC_MARK_STACK | ||
| 1597 | #define GC_MARK_STACK GC_USE_GCPROS_AS_BEFORE | ||
| 1598 | #endif | ||
| 1599 | |||
| 1600 | #if GC_MARK_STACK == GC_MAKE_GCPROS_NOOPS | ||
| 1601 | |||
| 1602 | #define GCPRO1(varname) ((void) 0) | ||
| 1603 | #define GCPRO2(varname1, varname2)((void) 0) | ||
| 1604 | #define GCPRO3(varname1, varname2, varname3) ((void) 0) | ||
| 1605 | #define GCPRO4(varname1, varname2, varname3, varname4) ((void) 0) | ||
| 1606 | #define GCPRO5(varname1, varname2, varname3, varname4, varname5) ((void) 0) | ||
| 1607 | #define UNGCPRO ((void) 0) | ||
| 1608 | |||
| 1609 | #else /* GC_MARK_STACK != GC_MAKE_GCPROS_NOOPS */ | ||
| 1610 | |||
| 1581 | #ifndef DEBUG_GCPRO | 1611 | #ifndef DEBUG_GCPRO |
| 1582 | 1612 | ||
| 1583 | #define GCPRO1(varname) \ | 1613 | #define GCPRO1(varname) \ |
| @@ -1661,6 +1691,8 @@ extern int gcpro_level; | |||
| 1661 | : ((gcprolist = gcpro1.next), 0)) | 1691 | : ((gcprolist = gcpro1.next), 0)) |
| 1662 | 1692 | ||
| 1663 | #endif /* DEBUG_GCPRO */ | 1693 | #endif /* DEBUG_GCPRO */ |
| 1694 | #endif /* GC_MARK_STACK != GC_MAKE_GCPROS_NOOPS */ | ||
| 1695 | |||
| 1664 | 1696 | ||
| 1665 | /* Evaluate expr, UNGCPRO, and then return the value of expr. */ | 1697 | /* Evaluate expr, UNGCPRO, and then return the value of expr. */ |
| 1666 | #define RETURN_UNGCPRO(expr) \ | 1698 | #define RETURN_UNGCPRO(expr) \ |