* bug fix: DECODE-UNIVERSAL-TIME now accepts timezone arguments with
second-resolution: integer multiples of 1/3600 between -24 and 24.
(thanks to Vincent Arkesteijn)
+ * bug fix: functions =, /=, <, <=, >, >= did not check the argument
+ type when called with 1 argument; PEEK-CHAR checked type of
+ PEEK-TYPE only after having read first character from a
+ stream. (reported by Peter Graves)
+ * bug fix: the garbage collector now has much better locality
+ behaviour, and in particular no longer treats all memory as being
+ exhausted when many small objects point to each other in a deeply
+ recursive manner.
* optimization: implemented multiplication as a modular
(UNSIGNED-BYTE 32) operation on the x86 backend.
* optimization: SEARCH on simple-base-strings can now be open-coded.
(see also contrib/compiler-extras.lisp for inspiration for
teaching the compiler about the Boyer-Moore algorithm).
- * bug fix: functions =, /=, <, <=, >, >= did not check the argument
- type when called with 1 argument; PEEK-CHAR checked type of
- PEEK-TYPE only after having read first character from a
- stream. (reported by Peter Graves)
* fixed some bugs revealed by Paul Dietz' test suite:
** in stack analysis liveness information is propagated from
non-local entry points.
(unboxed ? UNBOXED_PAGE : BOXED_PAGE)) &&
(page_table[first_page].large_object == 0) &&
(page_table[first_page].gen == gc_alloc_generation) &&
- /* FIXME: Why? Please tell me why? Removal of
- this test, which restricts opening an allocation
- region on a partially-used page to the nursery
- generation, causes more or less instant heap
- corruption on forms such as
- (loop repeat 2
- do (compile nil '(lambda (x) x))
- do (gc :full t))
- -- CSR, 2003-01-14 */
- (gc_alloc_generation == 0) &&
(page_table[first_page].bytes_used < (PAGE_BYTES-32)) &&
(page_table[first_page].write_protected == 0) &&
(page_table[first_page].dont_move == 0)) {
generation));
for (i = 0; i < last_free_page; i++) {
/* note that this skips over open regions when it encounters them */
- if ((page_table[i].allocated == BOXED_PAGE)
+ if ((page_table[i].allocated & BOXED_PAGE)
&& (page_table[i].bytes_used != 0)
&& (page_table[i].gen == generation)
&& ((page_table[i].write_protected == 0)