Mercurial > emacs
changeset 1908:d649f2179d67
* alloc.c (make_pure_float): Align pureptr on a sizeof (double)
boundary before allocating the float.
* alloc.c: Add description lines to the top of each page.
* alloc.c (mark_interval_tree): Remove spurious & in front of
function name.
* alloc.c (UNMARK_BALANCE_INTERVALS): Fix to accomodate compilers
other than GCC, which do not allow casts on the LHS of an
assignment.
* alloc.c (mark_object, mark_buffer): Remove some unused
variables.
author | Jim Blandy <jimb@redhat.com> |
---|---|
date | Mon, 22 Feb 1993 14:22:03 +0000 |
parents | df8b67adcee3 |
children | ea6c75bc0d38 |
files | src/alloc.c |
diffstat | 1 files changed, 34 insertions(+), 15 deletions(-) [+] |
line wrap: on
line diff
--- a/src/alloc.c Mon Feb 22 14:21:19 1993 +0000 +++ b/src/alloc.c Mon Feb 22 14:22:03 1993 +0000 @@ -114,6 +114,8 @@ static void clear_marks (), gc_sweep (); static void compact_strings (); +/* Versions of malloc and realloc that print warnings as memory gets full. */ + Lisp_Object malloc_warning_1 (str) Lisp_Object str; @@ -179,6 +181,8 @@ return val; } +/* Interval allocation. */ + #ifdef USE_TEXT_PROPERTIES #define INTERVAL_BLOCK_SIZE \ ((1020 - sizeof (struct interval_block *)) / sizeof (struct interval)) @@ -260,19 +264,22 @@ if (XMARKBIT (tree->plist)) return; - traverse_intervals (tree, 1, 0, &mark_interval); + traverse_intervals (tree, 1, 0, mark_interval); } #define MARK_INTERVAL_TREE(i) \ { if (!NULL_INTERVAL_P (i)) mark_interval_tree (i); } -#define UNMARK_BALANCE_INTERVALS(i) \ -{ \ - if (! NULL_INTERVAL_P (i)) \ - { \ - XUNMARK ((Lisp_Object) (i->parent)); \ - i = balance_intervals (i); \ - } \ +/* The oddity in the call to XUNMARK is necessary because XUNMARK + expands to an assigment to its argument, and most C compilers don't + support casts on the left operand of `='. */ +#define UNMARK_BALANCE_INTERVALS(i) \ +{ \ + if (! NULL_INTERVAL_P (i)) \ + { \ + XUNMARK (* (Lisp_Object *) (&(i)->parent)); \ + (i) = balance_intervals (i); \ + } \ } #else /* no interval use */ @@ -284,6 +291,8 @@ #endif /* no interval use */ +/* Floating point allocation. */ + #ifdef LISP_FLOAT_TYPE /* Allocation of float cells, just like conses */ /* We store float cells inside of float_blocks, allocating a new @@ -883,6 +892,8 @@ } } +/* Allocation of ropes. */ + /* Note: the user cannot manipulate ropes portably by referring to the chars of the string, because combining two chars to make a GLYPH depends on endianness. */ @@ -932,6 +943,8 @@ return ((GLYPH *) XSTRING (r)->data)[XFASTINT (n)]; } +/* Pure storage management. */ + /* Must get an error if pure storage is full, since if it cannot hold a large string it may be able to hold conses that point to that string; @@ -979,6 +992,12 @@ { register Lisp_Object new; + /* Make sure that pureptr is aligned on at least a sizeof (double) + boundary. Some architectures (like the sparc) require this, and + I suspect that floats are rare enough that it's no tragedy for + those that do. */ + pureptr = (pureptr + sizeof (num) - 1) & - sizeof (num); + if (pureptr + sizeof (struct Lisp_Float) > PURESIZE) error ("Pure Lisp storage exhausted"); XSET (new, Lisp_Float, PUREBEG + pureptr); @@ -1120,6 +1139,8 @@ you lose #endif +/* Garbage collection! */ + int total_conses, total_markers, total_symbols, total_string_size, total_vector_size; int total_free_conses, total_free_markers, total_free_symbols; #ifdef LISP_FLOAT_TYPE @@ -1366,8 +1387,9 @@ } #endif -/* Mark reference to a Lisp_Object. If the object referred to - has not been seen yet, recursively mark all the references contained in it. +/* Mark reference to a Lisp_Object. + If the object referred to has not been seen yet, recursively mark + all the references contained in it. If the object referenced is a short string, the referrencing slot is threaded into a chain of such slots, pointed to from @@ -1485,7 +1507,6 @@ { register struct frame *ptr = XFRAME (obj); register int size = ptr->size; - register int i; if (size & ARRAY_MARK_FLAG) break; /* Already marked */ ptr->size |= ARRAY_MARK_FLAG; /* Else mark it */ @@ -1589,7 +1610,6 @@ mark_buffer (buf) Lisp_Object buf; { - Lisp_Object tem; register struct buffer *buffer = XBUFFER (buf); register Lisp_Object *ptr; @@ -1627,7 +1647,7 @@ mark_object (ptr); } -/* Find all structures not marked, and free them. */ +/* Sweep: find all structures not marked, and free them. */ static void gc_sweep () @@ -1886,8 +1906,7 @@ } } -/* Compactify strings, relocate references to them, and - free any string blocks that become empty. */ +/* Compactify strings, relocate references, and free empty string blocks. */ static void compact_strings ()