aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorGerd Moellmann2000-02-17 15:23:58 +0000
committerGerd Moellmann2000-02-17 15:23:58 +0000
commit1216f5e4132d14cad310cb8ac6fb91fac41569f7 (patch)
tree389b1dce2955d4428395fb245ba25ea9a6ff0c18 /src
parent39ec21eae0095f38d43febcef4787fffe13388a6 (diff)
downloademacs-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/ChangeLog41
-rw-r--r--src/lisp.h32
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 @@
12000-02-17 Gerd Moellmann <gerd@gnu.org> 12000-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) \