all of Guile basics fits into one segment and there suitable room
for work.
(SCM_EXPHEAP): Now takes an argument. Grow by a factor of 1.5
instead of 2.
(scm_freelist, scm_freelist2): Now of type scm_freelist_t.
Freelists now contains information about object span, cells
collected and amount of cells in heap segments belonging to the
list.
(scm_heap_size, scm_gc_cells_collected): Removed.
numbers.h, objects.c, ramap.c, random.c, unif.c, unif.h: Extensive
rewrite of handling of real and complex numbers.
(SCM_FLOATS, SCM_SINGLES): These #ifdef conditionals have been
removed along with the support for floats. (Float vectors are
still supported.)
numbers.h, objects.c, ramap.c, random.c, unif.c, unif.h: Extensive
rewrite of handling of real and complex numbers.
(SCM_FLOATS, SCM_SINGLES): These #ifdef conditionals have been
removed along with the support for floats. (Float vectors are
still supported.)
* unif.c (scm_makflo): Removed.
(scm_tc16_bigpos, scm_tc16_bigneg): Replaced by scm_tc16_big.
Use SCM_BIGSIGN(x) to test for sign!
(scm_tc16_big): The new bignum type.
(SCM_REAL_PART, SCM_IMAG_PART): Removed.
numbers.h, objects.c, ramap.c, random.c, unif.c, unif.h: Extensive
rewrite of handling of real and complex numbers.
(SCM_FLOATS, SCM_SINGLES): These #ifdef conditionals have been
removed along with the support for floats. (Float vectors are
still supported.)
* numbers.h (SCM_BIGSIGN): Sign moved to bit 16.
(scm_makdbl): Deprecated.
(SCM_NEWREAL, SCM_NEWCOMPLEX): New macros.
(SCM_SINGP): Deprecated.
(SCM_FLO): Removed.
(SCM_INEXP, SCM_CPLXP): Deprecated.
(SCM_INEXACTP, SCM_COMPLEXP): New macros.
(SCM_COMPLEX_REAL, SCM_COMPLEX_IMAG): Renamed from
SCM_REAL, SCM_IMAG (and now only valid for complex numbers).
(SCM_REAL, SCM_IMAG): New, *deprecated*, selectors which work both
for doubles and complex numbers.
(SCM_REAL_VALUE): New selector for doubles.
(scm_double_t, scm_complex_t): New types.
(scm_dbl): Removed.
* numbers.h (struct scm_dbl): changed to represent a double cell,
with the number in the second half.
(struct scm_cplx): new, represents a complex number as a triple
cell.
numbers.h, objects.c, ramap.c, random.c, unif.c, unif.h: Extensive
rewrite of handling of real and complex numbers.
(SCM_FLOATS, SCM_SINGLES): These #ifdef conditionals have been
removed along with the support for floats. (Float vectors are
still supported.)
* numbers.c (scm_floprint, scm_floequal): Removed.
(scm_print_real, scm_print_complex, scm_real_equalp,
scm_complex_equalp): New functions.
* numbers.c (scm_makdbl): no malloc'ing needed, so the
{DEFER,ALLOW}_INTS thing removed.
numbers.h, objects.c, ramap.c, random.c, unif.c, unif.h: Extensive
rewrite of handling of real and complex numbers.
(SCM_FLOATS, SCM_SINGLES): These #ifdef conditionals have been
removed along with the support for floats. (Float vectors are
still supported.)
* gc.c (scm_freelist2): multi-cell freelists.
(inner_map_free_list): map_free_list, parameterized on ncells.
"nn cells in segment mm" was misleading for ncells > 1; changed to
"objects". still print cells too, though.
(scm_map_free_list): rewritten using inner_map_free_list.
(scm_check_freelist): get freelist as parameter, since now we have
more than one.
(scm_debug_newcell2): multi-cell variants of
scm_debug_newcell.
(scm_gc_for_newcell): take ncells and freelist pointer as
parameters.
(scm_gc_mark): add case for tc7_pws (procedures with setters are
now double cells).
(scm_gc_sweep): don't free the float data, since it's not malloced
anymore.
(init_heap_seg): didn't understand what n_new_objects stood for,
so changed to n_new_cells.
(make_initial_segment): new function, makes an initial segment
according to given ncells.
(scm_init_storage): call make_initial_segment, for ncells={1,2,3}.
(end_input_void_port): renamed to end_input_default.
* init.c (scm_standard_stream_to_port): create a void port instead
of opening /dev/null if the standard file descriptors are bad.
advantages: no portability problems, doesn't waste a file descriptor,
simplifies the code (thanks to Marius for the idea).
* vports.c (s_scm_make_soft_port): call scm_port_non_buffer.
* void ports: make reading from a void port give EOF instead of
segv:
* ports.c (s_scm_sys_make_void_port): modified docstring.
(fill_input_void_port): new proc.
(scm_init_ports): set up fill_input_void_port.
* ports.c (scm_port_non_buffer): new proc.
(scm_void_port): call scm_port_non_buffer.
* fports.c (scm_setvbuf): docstring: remove the fcntl documentation
which was incorrectly appended.
the fdes is valid before doing anything else. check that
the file descriptor supports the modes required.
(scm_fport_buffer_add): don't throw an error if fstat doesn't
work: just use the default buffer size.
* throw.c: change an outdated comment about scm_internal_catch
BODY: it doesn't take a jumpbuf arg.
* init.c (scm_standard_stream_to_port): install a handler in case
scm_fdes_to_port throws an error. don't check here whether the
file descriptor is valid, since scm_fdes_to_port will do that.
set the revealed count depending on whether the port got the
standard file descriptor.
(stream_body_data): new type.
(stream_body, stream_handler): new procs.