*** empty log message ***
[bpt/guile.git] / libguile / ChangeLog
index 922f675..828e7b4 100644 (file)
+1999-09-11  Jim Blandy  <jimb@savonarola.red-bean.com>
+
+       * version.c (scm_libguile_config_stamp): Deleted.  See
+       corresponding change to ../ice-9/boot-9.scm.
+       * version.h: Delete prototype.
+       * Makefile.in: Regenerated.
+
+1999-09-11  Gary Houston  <ghouston@easynet.co.uk>
+
+       * filesys.c (scm_directory_p): new procedure "directory?"  Returns
+       a boolean indicating whether its argument is a directory
+       port as returned by opendir (thanks to Dirk Herrmann for the
+       suggestion.)
+
+1999-09-11  Mikael Djurfeldt  <mdj@thalamus.nada.kth.se>
+
+       * backtrace.c (display_frame_expr): Don't print a newline.
+       (display_frame): Print the newline here instead.
+
+1999-09-09  Mikael Djurfeldt  <mdj@thalamus.nada.kth.se>
+
+       * procs.c (scm_setter): Signal WTA if handed an entity or operator
+       lacking a setter.
+
+       * feature.c, feature.h: (scm_hook_p, scm_hook_empty_p): New
+       primitives. (Thanks to Greg Badros);
+       (scm_hook_to_list): New primitive; Hooks are now smobs.
+
+1999-09-08  Gary Houston  <ghouston@easynet.co.uk>
+
+       * stime.c (bdtime2c): rewrite the ASSERTs.  Accept a value
+       of #f for the 10th vector element to avoid an exception
+       seen by Bernard Urban.
+       (scm_mktime): unneeded ASSERT removed.
+
+1999-09-07  Mikael Djurfeldt  <mdj@mdj-pc.nada.kth.se>
+
+       * eval.c (scm_map, scm_for_each): Converted to dispatch on generic
+       if args don't match.
+
+       * __scm.h (SCM_WTA_DISPATCH_n, SCM_GASSERTn): New macros.
+
+1999-09-06  Mikael Djurfeldt  <mdj@thalamus.nada.kth.se>
+
+       * numbers.c: Converted comparison operations to dispatch on
+       generic if args don't match.
+
+       * Makefile.am (ETAGS_ARGS): Added support for GPROC and GPROC1.
+
+1999-09-06  James Blandy  <jimb@mule.m17n.org>
+
+       * guile-snarf.c: Deleted.  Snarfing should respect CPP
+       conditionals, so it needs to actually run CPP.  Bleah.
+
+1999-09-05  James Blandy  <jimb@mule.m17n.org>
+
+       Handle errors properly in guile-snarf.  (Thanks to Han-Wen Nienhuys.)
+       * guile-snarf.in: Be sure to exit with an error if CPP does.
+       * Makefile.am (.c.x): Delete the .x file and exit with an error
+       status if guile-snarf exits with an error status.
+       * Makefile.in: Regenerated.
+
+       * snarf.h (SCM_GLOBAL_KEYWORD): Call scm_c_make_keyword, not
+       scm_makekey, which doesn't exist any more.  Guess nobody's using
+       this.
+
+       * guile-snarf.c: New implementation of guile-snarf, meant to be
+       more robust than the shell script.  I think it's complete, but I
+       haven't tested it at all, and I haven't changed the build process
+       to actually use it.  We should compare its output against that of
+       the existing shell script, for all source files.
+
+       * guile-snarf.c (parse_args): Abort if we haven't handled some
+       character type.
+
+1999-09-03  James Blandy  <jimb@mule.m17n.org>
+
+       * load.c (scm_search_path): If the filename has any extension at
+       all, ignore the entire list of extensions.  Also, don't check whether
+       the file is accessible.  If the file exists, accessible or not, we
+       should return it.  Inaccessible files should cause an error later.
+       (Thanks to Keisuke Nishida for the suggestions.)
+
+1999-09-02  Mikael Djurfeldt  <mdj@mdj-pc.nada.kth.se>
+
+       * gc.c (cleanup, scm_init_storage): Use on_exit if present and
+       atexit not available.  (sunos4.1.4 needs it.)
+
+1999-09-01  James Blandy  <jimb@mule.m17n.org>
+
+       I take it all back --- bcopy does handle overlapping source and
+       destination areas correctly.  At least on every system I could
+       find.  But it is better to use AC_REPLACE_FUNCS than to introduce
+       new CPP conditionals.
+       * memmove.c: New file, implementing memmove in terms of bcopy.
+       * scmconfig.h.in: Regenerated.
+
+       Allocators should use the `void *' type for generic pointers.
+       * gc.c (scm_must_malloc, scm_must_realloc, scm_must_free): Change
+       argument and return types.
+       * gc.h: Corresponding changes to prototypes.
+       (Thanks to Forcer.)
+
+1999-08-31  James Blandy  <jimb@mule.m17n.org>
+
+       * numbers.c (scm_init_numbers): Claim to support the `complex'
+       feature, as expected by (ice-9 format).  (Thanks to Ceri Storey.)
+
+       * Makefile.am (check-local): Set GUILE_LOAD_PATH so the tests can
+       find (ice-9 boot-9) when Guile was compiled in a separate
+       directory from the source.  (Thanks to Rodney Brown.)
+       * Makefile.in: Regenerated.
+
+       * procs.c (scm_make_subr_opt): Fix typo.  Remember to multiply
+       table lengths by the size of a single element when growing the
+       table.  (Thanks to Bill Schottstaedt.)
+
+1999-08-30  Mikael Djurfeldt  <mdj@thalamus.nada.kth.se>
+
+       * eval.c (SCM_CEVAL): Duplicated the method dispatch code at the
+       SCM_IM_DISPATCH form instead of calling scm_mcache_lookup_cmethod
+       since that cuts down the time for type dispatch by 50%.
+
+1999-08-30  James Blandy  <jimb@mule.m17n.org>
+
+       * gh_data.c (gh_set_substr): Revert change of 1999-08-29; bcopy is
+       not a correct substitute for memmove, because it doesn't handle
+       overlapping source and destination areas on many platforms.
+       Overlaps are the primary reason to use memmove in the first place.
+       * ports.c (scm_ungetc): Same.
+       * strop.c (scm_substring_move_x): Same.
+
+1999-08-30  Mikael Djurfeldt  <mdj@mdj-pc.nada.kth.se>
+
+       * gc.c (scm_init_storage): Skip registration of cleanup on systems
+       which lack atexit.  (Is it important that cleanup is made
+       properly? Maybe we should replace all `exit' with `scm_exit' and
+       call cleanup there?)
+
+       * struct.c, struct.h (scm_struct_free_0, scm_struct_free_light,
+       scm_struct_free_standard, scm_struct_free_entity): Declared to
+       return scm_sizet instead of size_t.
+
+       * gdbint.c, strports.c: #include <unistd.h>.  (SEEK_SET is defined
+       there on sunos4.1.4.)
+
+1999-08-29  Mikael Djurfeldt  <mdj@thalamus.nada.kth.se>
+
+       * numbers.c (scm_lcm): Bugfix: BIGDIG --> SCM_BIGDIG;
+       Account for the case when second argument is unbound.
+
+       * strorder.c (scm_string_less_p, scm_string_ci_less_p): Bugfix.
+       (Thanks to Karoly Lorentey.)
+
+       * gh_data.c, ports.c, strop.c: Alternatively use bcopy if memmove
+       isn't present.  (Thanks to Suzuki Toshiya.)
+
+       * ports.c: Use ANSI C prototypes in definitions.  (Thanks to
+       Bernard Urban.)
+
+       * filesys.c (scm_stat2scm): Conditionally use S_ISLNK.  (Thanks to
+       Bernard Urban.)
+
+       * dynl-dl.c (RTLD_GLOBAL): Define if non-existent.  (Thanks to
+       Bernard Urban and Ian Grant.)
+
+       * Makefile.am (libguile_la_LDFLAGS): Bumped libguile version
+       again.  (1.3.4 will be binary incompatible with 1.3.2 because of a
+       change in the representation of entities and operators.)
+
+1999-08-29  Gary Houston  <ghouston@easynet.co.uk>
+
+       * ports.c (scm_ungetc): bugfix: if putback_buf is NULL 
+       don't allocate zero bytes (thanks to Bill Schottstaedt).
+
+1999-08-29  Mikael Djurfeldt  <mdj@thalamus.nada.kth.se>
+
+       * procs.c (scm_setter): Converted to use generic dispatch.
+
+       * eval.c, eval.h: Bugfix: scm_sym_apply was not initialized
+       correctly.
+
+       * load.c (scm_search_path): Don't try extensions which already are
+       present at the end of the filename.
+        (scm_init_load): Check .scm first. (Thanks to Keisuke Nishida.)
+
+       * stacks.c (scm_sym_apply): Removed.  (Thanks to Ken Raeburn.)
+
+       Cleanup and simplification of generic method dispatch.
+       Also, the quadruple representation of entity and operator
+       procedures has been replaced with single.
+       
+       * tags.h (SCM_IM_HASH_DISPATCH): Removed.
+       
+       * print.c (scm_isymnames): Removed #@hash-dispatch.
+
+       * objects.c, objects.h (scm_mcache_lookup_cmethod): Moved here
+       from eval.c; Support 0 arity methods.
+       (scm_set_object_procedure_x): Removed scm_sym_atdispatch;
+       (scm_apply_generic_env): Removed.
+       Replaced slots proc0-3 with procedure.
+       
+       * objects.h (SCM_OPERATOR_PROC_0, SCM_OPERATOR_PROC_1,
+       SCM_OPERATOR_PROC_2, SCM_OPERATOR_PROC_3): Replaced by
+       SCM_OPERATOR_PROCEDURE.
+       (SCM_ENTITY_PROC_0, SCM_ENTITY_PROC_1, SCM_ENTITY_PROC_2,
+       SCM_ENTITY_PROC_3): Replaced by SCM_ENTITY_PROCEDURE.
+       
+       * struct.c, struct.h: Replace 4 procedure slots with one.
+       (scm_struct_i_procedure): Replaces scm_struct_i_procedure.
+
+       * gc.c (scm_gc_mark): Mark 1 procedure slot in entities instead of
+       4.
+
+       * eval.c (scm_sym_args): Removed.
+       (SCM_CEVAL): Simplified entity application.
+       Moved dispatch code to objects.c.
+
+       * procprop.c (scm_i_procedure_arity): Bugfix: Handle generics.
+       
+1999-08-29  Mikael Djurfeldt  <mdj@thalamus.nada.kth.se>
+
+       * sort.c (closureless): Use scm_eval_body.
+
+       * eval.c (SCM_APPLY): Fixed serious evaluator bug: If a closure
+       with a symbol as last form was first called normally and then via
+       `map' or some other mechanism using primitive apply, an ILOC was
+       returned.
+
+1999-08-26  Mikael Djurfeldt  <mdj@thalamus.nada.kth.se>
+
+       This change extends the representation of primitive procedures
+       with more data fields, e.g. a place for documentation and true
+       procedure properties.
+       
+       * procs.c, procs.h (scm_subr_entry): New type: Stores data
+       associated with subrs.
+       (SCM_SUBRNUM, SCM_SUBR_ENTRY, SCM_SUBR_GENERIC, SCM_SUBR_PROPS,
+       SCM_SUBR_DOC): New macros.
+       (scm_subr_table): New variable.
+       (scm_mark_subr_table): New function.
+       
+       * init.c (scm_boot_guile_1): Call scm_init_subr_table.
+
+       * gc.c (scm_gc_mark): Don't mark subr names here.
+       (scm_igc): Call scm_mark_subr_table.
+
+
+       This change implements a scheme for letting a generic work as a
+       shadow for a primitive procedure.  If the primitive procedure
+       can't dispatch on its arguments, control is left over to the
+       generic.  Normal wrong type arg errors will be generated until the
+       user has hung the first method on the primitive.
+
+       * snarf.h (SCM_GPROC, SCM_GPROC1): New macros.
+
+       * procs.c, procs.h (scm_subr_p): New function (used internally).
+
+       * gsubr.c, gsubr.h (scm_make_gsubr_with_generic): New function.
+
+       * objects.c, objects.h (scm_primitive_generic): New class.
+
+       * objects.h (SCM_CMETHOD_CODE, SCM_CMETHOD_ENV): New macros.
+
+       * print.c (scm_iprin1): Print primitive-generics.
+
+       * __scm.h (SCM_WTA_DISPATCH_1, SCM_GASSERT1,
+       SCM_WTA_DISPATCH_2, SCM_GASSERT2): New macros.
+       
+       * eval.c (SCM_CEVAL, SCM_APPLY): Replace scm_wta -->
+       SCM_WTA_DISPATCH_1 for scm_cxr's (unary floating point
+       primitives).  NOTE: This means that it is now *required* to use
+       SCM_GPROC1 when creating float scm_cxr's (float scm_cxr's is an
+       obscured representation that will be removed in the future anyway,
+       so backward compatibility is no problem here).
+
+       * numbers.c: Converted most numeric primitives (all but bit
+       comparison operations and bit operations) to dispatch on generic
+       if args don't match.
+
+       
+       Better support for applying generic functions.
+
+       * eval.c, eval.h (scm_eval_body): New function.
+
+       * objects.c (scm_call_generic_0, scm_call_generic_1,
+       scm_call_generic_2, scm_call_generic_3, scm_apply_generic): New
+       functions.
+       
+       
+       Optimization of the generic function dispatch mechanism.
+       
+       * eval.c (SCM_CEVAL): Apply the cmethod directly after having
+       called scm_memoize_method instead of doing a second lookup.
+
+       * objects.h (scm_memoize_method): Now returns the memoized cmethod.
+
+
+       Bugfix
+
+       * procs.c (scm_make_subr_opt): Use scm_sysintern0 instead of
+       scm_sysintern so that the binding connected with the subr name
+       isn't cleared when we give set = 0.
+
+       
+1999-08-24  Mikael Djurfeldt  <mdj@thalamus.nada.kth.se>
+
+       More transparent handling of ports with print states.
+       
+       * print.h (SCM_PORT_WITH_PS_P, SCM_PORT_WITH_PS_PORT,
+       SCM_PORT_WITH_PS_PS): Represent ports with print states as a smob
+       instead of a pair of a port and a print state.  We'll need to cons
+       once extra in scm_printer_apply but the type system will be
+       cleaner, it will mix better with GOOPS, and, it will be even more
+       transparent to the user.
+
+       * print.c (scm_get_print_state): New procedure: Given an output
+       port, return the print state associated to it in the current print
+       chain, if one exists;
+       (scm_port_with_print_state): New procedure: Associate a
+       print-state with a port.
+       (scm_valid_oport_value_p): Use SCM_PORT_WITH_PS_P;
+       (scm_printer_apply): Wrap port and pstate as a smob;
+       (print_state_printer): Removed.
+       
+       * objects.c (scm_class_of): Treat scm_tc16_port_with_ps as ports.
+
+       * eval.c (scm_init_eval): Use scm_make_smob_type instead of
+       scm_newsmob.
+
+       * ports.c (scm_output_port_p): Bugfix: Coerce output port before
+       testing (otherwise the port-print-state trick won't be transparent
+       to the user; one example where this caused problems was in the
+       (ice-9 format) module).
+
+1999-08-23  Mikael Djurfeldt  <mdj@thalamus.nada.kth.se>
+
+       * eval.c (SCM_CEVAL): Let the SCM_IM_SLOT_SET_X form return
+       SCM_UNSPECIFIED instead of the set value.
+
+1999-08-20  James Blandy  <jimb@mule.m17n.org>
+
+       * load.c (scm_init_load_path): Remove support for SCHEME_LOAD_PATH.
+
+       * ports.h (enum scm_port_rw_active): New enum, containing
+       SCM_PORT_READ, SCM_PORT_WRITE, and SCM_PORT_NEITHER (instead of
+       zero).  The debugger knows about enums, but doesn't know about
+       #defines.
+       (typedef scm_port): Declare rw_active member to be an enum
+       scm_port_rw_active.
+       * fports.c (fport_flush, fport_end_input): Use SCM_PORT_NEITHER
+       instead of zero.
+       * ports.c (scm_add_to_port_table): Same.
+       * strports.c (st_flush, st_end_input): Same.
+
+       * ioext.c (scm_do_read_line, scm_read_line): Use scm_must_malloc,
+       scm_must_realloc, and scm_done_malloc as appropriate. 
+
+1999-08-20  Mikael Djurfeldt  <mdj@thalamus.nada.kth.se>
+
+       * sort.c (quicksort): Added condition to protect the algorithm
+       from crashing the interpreter if the less predicate is buggy.
+
+1999-08-19  Gary Houston  <ghouston@easynet.co.uk>
+
+       * fports.c (fport_write): fix line-buffering mode again.
+       (scm_open_file): recognise 'l' for line-buffering.
+       (scm_setvbuf): recognise _IOLBF for line-buffering.
+
+1999-08-19  Mikael Djurfeldt  <mdj@thalamus.nada.kth.se>
+
+       * Makefile.am (libguile_la_LDFLAGS): Increased the version number
+       of libguile to 5.0.
+
+       * eval.c (SCM_APPLY), sort.c (closureless): Expand body when
+       evaluating closures.
+
+1999-08-18  Gary Houston  <ghouston@easynet.co.uk>
+
+       * fports.c (fport_write): use memcpy instead of strncpy, in case
+       the data contains NUL.
+
+1999-08-17  Mikael Djurfeldt  <mdj@thalamus.nada.kth.se>
+
+       * gh.h (gh_vector_to_list): Bugfix.  (Thanks to Frank Cieslok.)
+       
+       * backtrace.c, debug.c, eval.c, eval.h, gsubr.c, procprop.h,
+       read.c, srcprop.c, srcprop.h (scm_i_filename, scm_i_line,
+       scm_i_column, scm_i_copy, scm_i_name, scm_i_lambda, scm_i_source,
+       scm_i_more, scm_i_procname, scm_i_dot, scm_i_arrow, scm_i_else,
+       scm_i_unquote, scm_i_uq_splicing, scm_i_apply, scm_i_enter_frame,
+       scm_i_apply_frame, scm_i_exit_frame, scm_i_trace, scm_i_quote,
+       scm_i_begin, scm_i_if, scm_i_and, scm_i_or, scm_i_case,
+       scm_i_cond, scm_i_letstar, scm_i_do, scm_i_quasiquote,
+       scm_i_define, scm_i_letrec, scm_i_let, scm_i_atapply,
+       scm_i_atcall_cc, scm_i_breakpoint): Renamed: Consequently use
+       scm_sym_ as prefix for symbols.
+
+       * debug.c (scm_i_proc, scm_i_args, scm_i_eval_args): Removed.
+
+       * eval.c, eval.h (scm_sym_begin, scm_sym_if, scm_sym_and,
+       scm_sym_case, scm_sym_cond, scm_sym_letstar, scm_sym_do,
+       scm_sym_define, scm_sym_letrec, scm_sym_atapply,
+       scm_sym_atcall_cc): Made global.
+               
+1999-08-16  Mikael Djurfeldt  <mdj@thalamus.nada.kth.se>
+
+       * eval.c (scm_sym_args): Made global.
+
+       * objects.c (scm_set_object_procedure_x): Disallow setting of
+       procedures for pure generic functions.
+
+1999-08-12  Gary Houston  <ghouston@easynet.co.uk>
+
+       * ports.c (scm_seek): one more: was scm_lseek.  Also changed the
+       Scheme name from lseek to seek, but lseek was added recently so
+       it shouldn't be a big problem.
+       * ports.c, gdbint.c, ioext.c: changed callers.
+
+1999-08-11  Gary Houston  <ghouston@easynet.co.uk>
+
+       * fports.c (fport_input_waiting): if select is used, return 1
+       instead of whatever FD_ISSET expands to.  maybe it will be useful
+       to interpret the value from the input_waiting ptob procedure as a
+       lower bound on the number of bytes available.
+
+       * Mikael asked for a few names to be changed...
+
+       * ports.c (scm_make_port_type): take the write procedure as the 
+       second argument instead of the flush procedure.
+       * ports.h (scm_ptob_descriptor): rename the ptob procedures:
+       fflush -> flush,  read_flush -> end_input,  fclose -> close,
+       fill_buffer -> fill_input,  ftruncate -> truncate,
+       input_waiting_p -> input_waiting.
+
+       * ports.c (end_input_void_port): was read_flush_void_port.
+       (scm_set_port_end_input): was scm_set_port_flush_input.
+       (scm_set_port_flush): was scm_set_port_write.
+       (scm_set_port_input_waiting): was scm_set_port_input_waiting_p
+       (scm_end_input): was scm_read_flush.
+       (scm_fill_input): was scm_fill_buffer.
+       (scm_flush): was scm_fflush.
+       * fports.c (fport_input_waiting): renamed from fport_input_waiting_p.
+       (fport_end_input): was local_read_flush.
+       (fport_flush): was local_fflush.
+       (fport_close): was local_fclose.
+       (fport_truncate): was local_ftruncate.
+       (fport_seek): was local_seek.
+       (fport_free): was local_free.
+       (fport_fill_input): was fport_fill_buffer.
+       * strports.c (st_end_input): was st_read_flush.
+       (st_truncate): was st_ftruncate.
+       * vports.c: (sf_flush): was sfflush.
+       (sf_close): was sfclose.
+       (sf_fill_input): was sf_fill_buffer.
+       
+       * ports.c, fports.c, strports, vports.c, ioext.c, unif.c, filesys.c:
+       change callers.
+
+1999-08-06  Mikael Djurfeldt  <mdj@thalamus.nada.kth.se>
+
+       * eval.c (SCM_IM_DISPATCH): Rewrote dispatch protocol.  Dispatch
+       forms now contain the expressions to be dispatched upon instead of
+       depending on a surrounding lambda or let; Generic function
+       dispatch has been optimized; `apply' on a generic function now
+       works a little bit strangely.  It uses a trick so that the type
+       dispatch code in SCM_CEVAL can be reused.
+
+       * objects.h, objects.c (scm_apply_generic_env): Added (used by
+       apply).
+       (scm_operator_p): Added.
+       (scm_sym_atdispatch): Added.
+       (scm_set_object_procedure_x): Modified to handle the new style
+       generic functions.
+       (scm_object_procedures): New debugging procedure.
+
+1999-08-05  Mikael Djurfeldt  <mdj@thalamus.nada.kth.se>
+
+       * eval.c, eval.h (scm_sym_args): Added.
+
+       * objects.h (SCM_CLASSF_PURE_GENERIC): Added.
+
+       * feature.c, feature.h (scm_c_run_hook): Added.
+
+       * eval.c (SCM_CEVAL:SCM_IM_DISPATCH): Bugfix: Jump back to
+       cdrxnoap and loopnoap instead of begin and loop.
+
+1999-08-04  Gary Houston  <ghouston@easynet.co.uk>
+
+       * ports.c (scm_putc, scm_puts),
+       * unif.c (scm_uniform_array_write): use scm_lfwrite.
+       * ports.c (scm_putc): change type of first argument from int to char.
+       
+1999-08-04  Mikael Djurfeldt  <mdj@thalamus.nada.kth.se>
+
+       * eval.c (SCM_CEVAL): Improvements to SCM_IM_DISPATCH and
+       SCM_IM_HASH_DISPATCH.
+
+       * objects.h (SCM_CLASSF_GOOPS_VALID): Added.
+       (scm_si_redfined, scm_si_hashsets): Moved.
+
+       * objects.c (scm_class_of): Use the new SCM_CLASSF_GOOPS_VALID
+       flag which combines type and status info so that the class
+       redefinition protocol has zero cost during normal execution.
+
+1999-08-03  Gary Houston  <ghouston@easynet.co.uk>
+
+       * ports.h (scm_ptob_descriptor): include a write procedure again.
+       it's more efficient for unbuffered fports (e.g., sockets.)
+
+       * ports.c (scm_puts): use ptob->write.
+       * vports.c (scm_make_sfptob): set write proc in ptob.
+       * strports.c (scm_make_stptob): set write proc in ptob.
+       * ports.c (write_void_port): new procedure.
+       * vports.c (sf_write): new procedure.
+       * ports.c (scm_lfwrite): use ptob->write.
+       * strports.c (st_write): new procedure.
+       * fports.c (fport_write): new procedure.
+       (scm_make_fptob): set write in ptob to fport_write.
+       * ports.h: prototype for scm_set_port_write.
+       * ports.c (scm_make_port_type): initialise ptob write procedure.
+       (scm_set_port_write): new proc.
+
+1999-08-01  Jim Blandy  <jimb@savonarola.red-bean.com>
+
+       * ports.c (scm_char_ready_p): Don't try to find PORT's ptab entry
+       until we've verified that it is actually a port.  (Thanks to
+       Lorentey Karoly.)
+
+1999-07-31  Mikael Djurfeldt  <mdj@thalamus.nada.kth.se>
+
+       * gc.c (scm_must_malloc, scm_must_realloc): Removed unnecessary
+       code, particularly an unnecessary test (len != size, where len ==
+       size).  (Was this leftovers from debugging code, or have I missed
+       something profound?)
+
+       * hashtab.c: Bugfix: Don't declare s_hash_fold without storage
+       size. (Thanks to James Dean Palmer.)
+
+       * numbers.c (scm_makdbl): Bugfix: Initialize imaginary part.
+       (Thanks to Lorentey Karoly.)
+
+1999-07-30  Mikael Djurfeldt  <mdj@thalamus.nada.kth.se>
+
+       * eval.c (scm_m_expand_body): Use scm_cons_source.
+
+       * struct.c (scm_print_struct): Use vtable name.
+
+       * print.c (scm_init_print): Set name of print state type.
+
+       * stacks.c (scm_init_stacks): Set name of stack type.
+
+1999-07-29  Mikael Djurfeldt  <mdj@thalamus.nada.kth.se>
+
+       * eval.c (SCM_CEVAL): Removed old implementation of internal
+       define.
+
+       * gsubr.c, procprop.h (scm_i_inner_name): Removed.
+
+       * debug.c, debug.h (scm_reverse_lookup): Added.
+       (scm_procedure_name): Use scm_reverse_lookup to lookup the name of
+       internal procedure definitions; Don't use scm_i_inner_name.
+
+       * eval.c, tags.h, print.c (SCM_IM_SLOT_REF, SCM_IM_SLOT_SET_X):
+       New isym operations.
+
+       * eval.h: Added prototypes for multi language support functions.
+
+       * eval.c (SCM_IM_DISPATCH, SCM_IM_HASH_DISPATCH): Don't use
+       improper lists in the low-level representation, since that will
+       cause a begin to be prepended at macro expansion.
+
+       * eval.c (scm_cons_source): Version of cons which copies source
+       properties from an existing cell.
+       (scm_copy_tree, SCM_CEVAL): Use scm_cons_source.
+
+       * debug.c (scm_procedure_source): Cons SCM_IM_LAMBDA onto
+       procedure source before calling scm_unmemocopy instead of faking
+       an environment.
+
+1998-10-25  Marius Vollmer  <mvo@zagadka.ping.de>
+
+       Ported `internal defines' fix from SCM.  Original ChangeLog entry:
+
+           1998-07-09  Radey Shouman  <radey@colorage.com>
+
+           * eval.c (ceval_1): Modifications to allow rewriting of interal
+           DEFINE to LETREC: If an ISYM is evaluated in non-tail position the
+           body of which it is the CAR is macro expanded by m_expand_body,
+           which rewrites internal DEFINE.
+
+           (m_expand_body): Added.
+
+           (m_macroexp1): Added argument to control error checking:
+           m_expand_body may speculatively expand forms in the wrong
+           environments.  Made argument number checks conditional on
+           RECKLESS.
+
+           (m_body): Added, error checks bodies and inserts the ISYM tokens.
+
+           (m_lambda): (m_letstar): (m_letrec1): (m_letrec): (m_let): Now
+           call m_body.
+
+           (m_cond): (m_case): (m_quote): Modified to avoid destructively
+           changing their argument forms.  Since m_expand_body
+           speculatively macro expands forms the process must be
+           reversible.
+
+           (m_ident_eqp): Fixed to use proper environment.
+
+           (renamed_ident): Added DEFER_INTS_EGC.
+
+           Added prototypes for static functions.
+
+       * eval.c
+
+       (undef_cell): New.
+       
+       (scm_lookupcar1, scm_lookupcar): Added CHECK argument.  When CHECK
+       is false, do not produce an error for unbound variables, return a
+       pointer to cell_undef instead.
+
+       (EVALCELLCAR, XEVALCAR): Call scm_lookupcar with check=1.
+
+       (scm_m_body): New.
+
+       (scm_m_cond, scm_m_case, scm_m_quote): Modified to avoid
+       destructively changing their argument forms.  Since m_expand_body
+       speculatively macro expands forms the process must be reversible.
+
+       (scm_m_lambda): Use scm_m_body instead of bodycheck.  Account for
+       SCM_IM_LET introduced by named lets.
+
+       (scm_m_letstar): Use scm_m_body instead of bodycheck.
+
+       (scm_m_letrec1, scm_letrec): Split scm_letrec into scm_letrec1 and
+       scm_letrec.  scm_letrec1 does not check for a null binding and
+       takes an additional argument to specify the ISYM of the body.  Use
+       scm_m_body instead of bodycheck.
+
+       (scm_m_let): Use scm_m_body instead of bodycheck.
+
+       (scm_m_expand_body, scm_macroexp): New.
+
+       (unmemocopy): Account for ISYMs introduced by scm_m_body.
+
+       (ceval, deval): Call scm_m_expand_body.  Call scm_lookupcar with
+       check=1.  Throw error for internal defined that have not been
+       rewritten by scm_m_expand_body.
+
+       * eval.h: Added prototypes for scm_m_expand_body and scm_macroexp.
+       Removed prototype for SCM_APPLY.
+
+       * tags.h: Added extern declaration of scm_isymnames.
+
+1999-07-27  Mikael Djurfeldt  <mdj@thalamus.nada.kth.se>
+
+       * Makefile.am (EXTRA_libguile_la_SOURCES): Added lang.c.
+
+       * lang.c: New file: Beginning of multi-language support.
+       
+       * init.c (scm_boot_guile_1): Added call to scm_init_lang ().
+
+       * dynwind.c (scm_dowinds): Removed obsolete wind_key #f case.
+       (scm_dynamic_wind): Added argument checking for the after guard so
+       that we don't add garbage on the dynwind chain.
+       (scm_swap_bindings): Added.
+
+       * tags.h, print.c (SCM_IM_NIL_COND, SCM_IM_NIL_IFY, SCM_IM_T_IFY,
+       SCM_IM_0_COND, SCM_IM_0_IFY, SCM_IM_1_IFY), print.c
+       (scm_isymnames): New isyms for multi-language support.
+       
+       * eval.c (scm_nil, scm_t): New symbols.
+       (nil-cond, nil-ify, t-ify, 0-cond, 0-ify, 1-ify): New special
+       forms for multi-language support.
+
+1999-07-25  Mikael Djurfeldt  <mdj@thalamus.nada.kth.se>
+
+       * random.c, random.h (scm_c_default_rstate, scm_c_uniform32):
+       Added.
+       Renamed functions in the random function library interface
+       from scm_i_XXX --> scm_c_XXX.
+
+1999-07-25  Gary Houston  <ghouston@easynet.co.uk>
+
+       * ports.c (scm_putc): fix line-buffering.
+
+1999-07-25  Mikael Djurfeldt  <mdj@thalamus.nada.kth.se>
+
+       * ports.c, ports.h, fports.c, strports.c, vports.c: Renamed
+       scm_set_ptob_XXX --> scm_set_port_XXX.
+
+1999-07-24  Mikael Djurfeldt  <mdj@thalamus.nada.kth.se>
+
+       * ports.c, ports.h (scm_make_port_type): New interface for
+       creation of port types (replaces scm_newptob).  Just as for the
+       smobs, we need to separate the internal representation of smob
+       types from the interface, so that we easily can add new fields and
+       rearrange things without caring about backward compatibility.
+       This change was forced by the need in GOOPS to create classes
+       representing port types.
+       (scm_set_ptob_mark, scm_set_ptob_free, scm_set_ptob_print,
+       scm_set_ptob_equalp, scm_set_ptob_flush_input, scm_set_ptob_close,
+       scm_set_ptob_seek, scm_set_ptob_truncate,
+       scm_set_ptob_input_waiting_p): New setters.
+       (scm_newptob): Rewritten to use scm_make_port_type.  For backward
+       compatibility.
+       (scm_ptobs): Changed type scm_ptobfuns --> scm_ptob_descriptor.
+       (scm_prinport): Removed.
+       (scm_port_print): Added.
+       (scm_print_port_mode): Added.
+       (void_port_ptob, print_void_port, close_void_port, noop0):
+       Removed.  Removed #include "genio.h" Added #include "objects.h",
+       #include "smobs.h"
+
+       * fports.c (prinfport): Moved code from ports.c.
+       (local_free): Added.
+       (scm_fptob): Removed.  Instead use new interface.
+       (scm_make_fptob): Added.  (Need to create basic ports in a
+       specific order in ports.c.)
+       
+       * strports.c (scm_stptob, prinstpt, noop0): Removed
+       (scm_make_stptob): Added.
+
+       * vports.c (scm_sfport, prinsfpt, sf_read_flush, noop0): Removed.
+       (scm_make_sfport): Added.
+       
+       * filesys.c (scm_dir_print): Don't use the port printing code.
+       Instead provide specific directory printer.
+       
+       * gc.c (scm_gc_sweep): Use value returned from scm_ptobs[].free.
+
+       * ioext.c (scm_redirect_port): Replaced scm_ptobfuns -->
+       scm_ptob_descriptor.
+
+       * smob.c (scm_smob_print): Handle non-existing type name nicely.
+       Removed #include "genio.h"
+
+       * objects.c (scm_make_port_classes): New function ptr.
+
+1999-07-24  Gary Houston  <ghouston@easynet.co.uk>
+
+       * gdbint.c (gdb_print, gdb_read): call scm_truncate_file.
+
+       * ports.c (scm_truncate_file): renamed from scm_ftruncate.
+       allow the 1st argument to be a fdes or filename as well as a
+       port (as in the filesys.c version).
+
+       * filesys.c (scm_truncate_file): removed.
+
+1999-07-24  Mikael Djurfeldt  <mdj@thalamus.nada.kth.se>
+
+       * readline.c, readline.h: Removed.
+
+       * objects.c, objects.h (scm_port_class): Added.
+       (scm_class_of): Look up port class in scm_port_class.
+       (SCM_IN_PCLASS_INDEX, SCM_OUT_PCLASS_INDEX,
+       SCM_INOUT_PCLASS_INDEX): Added.
+
+       
+       * Makefile.am: Removed genio.c, genio.x.
+
+       * genio.c: Removed.
+
+1999-07-23  Mikael Djurfeldt  <mdj@mdj-pc.nada.kth.se>
+
+       * init.c: Make sure that scm_post_boot_init_modules is called only
+       once.  (Important when using a dumped image.; Thanks to Bernard
+       Urban.)
+
+1999-07-19  Jim Blandy  <jimb@savonarola.red-bean.com>
+
+       * guardians.c (scm_guardian_zombify): Separate scanning for
+       zombies from marking the pairs of the free list.
+       
+       * guardians.c (scm_guardian_zombify): Don't set marks manually ---
+       use the macros.  (Thanks to Michael Livshin.)
+
+       * eval.c (scm_m_lambda): Let bodycheck check the body of the
+       lambda.  Let your sins be purified by the blood of the lambda.
+       (Thanks to Eric Hanchrow.)
+
+       * net_db.c (h_errno): Don't declare this if it's #defined.  Eew.
+       (Thanks to Valdis Kletnieks.)
+
+       Fixes for EMX from Mikael StÃ¥ldal.
+       
+       * filesys.c: #include <io.h>, if we have it.
+       * scmconfig.h.in: Regenerated.
+
+       * stime.c (ftime): Delete declaration for this function --- let
+       the system supply it.
+
+       Cleanups from John Bley.
+
+       * gdbint.c: Don't include <stdio.h> and "_scm.h" twice.
+
+       * gsubr.c: Don't include "gsubr.h" twice.
+
+       Cleanups for compilation on Irix 6, from David Kaelbling.
+       
+       * regex-posix.c (scm_regexp_error_msg): Change `rx' argument to
+       regex_t pointer.  This is what the callers have, mostly.
+       (scm_regexp_exec): Don't forget to pass the `rx' argument to
+       scm_regexp_error_msg.
+
+       * scmsigs.c (scm_sigaction): Cast SIG_DFL and SIG_IGN to SCM, not
+       int.  That way, if we get a warning on this line, it's more likely
+       that we're really missing bits we care about.
+
+       * snarf.h (SCM_CONST_LONG): Remove trailing semicolon from
+       definition.
+
+       * tags.h (SCM_IMP, SCM_NCONSP, SCM_NCELLP, SCM_ITAG3, SCM_TYP3,
+       SCM_TYP7, SCM_TYP7S, SCM_TYP16, SCM_TYP16S, SCM_GCTYP16,
+       SCM_GCMARKP, SCM_GC8MARKP): Don't cast to int.  Either SCM or no
+       cast at all is more appropriate in every case.  At the moment, we
+       assume everywhere that SCM is an integral type anyway.
+
+1999-07-14  Gary Houston  <ghouston@easynet.co.uk>
+
+       * unif.c (scm_uniform_array_read_x), ports.c (scm_getc): increment
+       read_pos after scm_fill_buffer.
+
+       * ioext.c (scm_do_read_line): simplify by ignoring the fill_buffer
+       return char.
+
+       * vports.c (sf_fill_buffer), strports.c (stfill_buffer),
+       fports.c (fport_fill_buffer): implement the interface change.
+
+       * ports.c (scm_fill_buffer): interface change: no longer increments
+       read_pos past the character that's returned.  it seems clearer to
+       leave it to the caller to decide what to do (thanks Jim).
+       
+       * vports.c (sf_fill_buffer): put the read char into the buffer
+       as well as returning it.
+
+       * ports.c (scm_grow_port_cbuf): residue of this deleted procedure
+       deleted.
+
+1999-07-13  Gary Houston  <ghouston@easynet.co.uk>
+
+       * strports.c (scm_strprint_obj): simplify.  start with initial
+       buffer size of 0.
+       (st_seek): don't allow string to be extended if seeking past
+       the end of a read-only port.
+
+1999-07-12  Gary Houston  <ghouston@easynet.co.uk>
+
+       * strports.c (st_seek): change the resize checks.
+
+       * ports.c (scm_ftruncate): throw error if offset works out negative.
+
+       * strports.c (st_flush): increase string size in blocks of
+       SCM_WRITE_BLOCK instead of 1. set read_end to read_pos if
+       it's greater and reset read_buf_size.
+       (scm_mkstrport): set rw_randow if only writing, since read_buf needs
+       to be maintained for output ports too (it holds the written
+       part of the string, while write_buf may have unwritten buffer
+       chars.)
+       (st_truncate): rewritten.
+       (top of file): added a few notes. 
+
+1999-07-10  Jim Blandy  <jimb@savonarola.red-bean.com>
+       
+       Patch from Greg Badros:
+       * snarf.h (SCM_PROC, SCM_PROC1): Use __cplusplus or
+       GUILE_CPLUSPLUS_SNARF macros to force adding a cast to the last
+       (function pointer) argument to scm_make_gsubr and scm_make_subr
+       calls.  This avoids warnings in C++ programs using guile-snarf.
+
+1999-07-06  Gary Houston  <ghouston@easynet.co.uk>
+       
+       * strports.c (st_grow_port): set pt->read_pos.  set
+       pt->read_buf_size one less than pt->write_buf_size if there's
+       an unwritten char at the end of the string.  similarly for
+       pt->read_end.
+       (st_resize_port): renamed from st_grow_port.
+       (st_seek): simplify by assuming that pt->write_pos == pt->read_pos.
+       seek from read_end instead of write_end for SEEK_END.
+       (st_ftruncate): calculate current length using readbuf, not write
+       buf.
+       (scm_strport_to_string): use read_buf_size for length.
+       (stfill_buffer): don't re-initialise the readbuf.
+
+1999-07-05  Gary Houston  <ghouston@easynet.co.uk>
+
+       * strports.c (scm_strport_to_string): new procedure.
+       (scm_call_with_output_string, scm_strprint_obj): use
+       scm_strport_to_string.
+       used SCM_INUM0 instead of SCM_MAKINUM (0) in a few places.
+
+1999-07-08  Mikael Djurfeldt  <mdj@mdj-pc.nada.kth.se>
+
+       * symbols.c (scm_gensym): Bugfix.  (Thanks to Johannes Hjorth.)
+
+Fri Jun 25 22:14:32 1999  Greg Badros  <gjb@cs.washington.edu>
+
+       * smob.c: added scm_make_smob_type_mfpe (), scm_set_smob_mfpe ();
+       use scm_make_smob_type_mfpe to initialize "free", "flo", "bigpos", 
+       and "bigneg" smob types.
+
+       * smob.h: Add do ... while(0) idiom to SCM_NEWSMOB.  Added
+       SCM_RETURN_NEWSMOB macro.  Added protos for new functions in
+       smob.c.
+
+       * *.c: Use scm_make_smob_type_mfpe, instead of scm_newsmob, and
+       use SCM_NEWSMOB or SCM_RETURN_NEWSMOB in constructors instead of
+       SCM_NEWCELL and setting the CAR/CDR by hand.
+       
+1999-07-04  Gary Houston  <ghouston@easynet.co.uk>
+
+       * ports.c (scm_putc): call scm_read_flush.
+       (scm_puts): likewise.
+       (scm_lfwrite): likewise.
+       (scm_lseek): likewise.
+       (scm_ftruncate): likewise.
+       * unif.c (scm_uniform_array_write): likewise.
+       * ioext.c (scm_redirect_port): likewise.
+
+       * ports.c (scm_fill_buffer): don't take pt argument.  change callers.
+       (read_flush_void_port): new proc, for void port ptob.
+
+       * vports.c (sf_read_flush): likewise.
+       * strports.c (st_read_flush): take offset arg.
+       * fports.c (local_read_flush): use offset, don't reset putback
+       buffer here.
+
+       * ports.h (scm_ptobfuns): let read_flush take an offset argument,
+       which is the number of chars from the putback buffer.
+
+       * ports.c (scm_read_flush): new procedure, resets the putback
+       buffer before calling the ptob routine.
+
+       * strports.c (scm_strprint_obj): bug fix: get pt from the port,
+       not from the parameter obj.  (Thanks to Eric Moore.)
+
+       * ports.h: SCM_CRDY, SCM_CUC, SCM_CRDYP, SCM_SETRDY, SCM_CUNGET,
+       SCM_CGETUN, SCM_CLRDY, SCM_TRY_CLRDY, SCM_N_READY_CHARS: deleted.
+
+       * strings.c (scm_make_string): throw error if 2nd arg isn't
+       a char.
+
+       * unif.c (scm_uniform_array_read_x): fix reading from a port.
+       allow non-fports.
+       (scm_uniform_array_write): likewise.
+
+1999-06-29  Gary Houston  <ghouston@easynet.co.uk>
+
+       * ports.c (scm_drain_input): rewritten.
+
+       * fports.c (local_fclose): check putback_buf.
+       (local_read_flush): likewise.
+
+       * ports.c (scm_remove_from_port_table): maybe free putback_buf.
+
+       * ports.h (scm_port): replace cbuf/cbufend/cp with putback_buf/
+       putback_buf_size.
+       (SCM_INITIAL_PUTBACK_BUF_SIZE): renamed from SCM_INITIAL_CBUF_SIZE.
+
+       * ports.c (scm_grow_port_cbuf): deleted.
+       (scm_add_to_port_table): initialise putback_buf to 0.  remove cbuf
+       stuff.
+       (scm_char_ready_p): check putback_buf
+       (scm_fill_buffer): likewise.
+       (scm_ungetc): rewritten.
+
+1999-06-27  Gary Houston  <ghouston@easynet.co.uk>
+
+       * fports.c (local_fclose): account for push-back buffer.
+
+       * ports.c (scm_char_ready_p): check the push-back buffer in
+       a new way.
+
+       * ioext.c (scm_do_read_line): remove the extra code to handle
+       the push-back buffer.
+
+       * ports.c (scm_getc): don't use SCM_CRDYP etc.
+
+       * ioext.c (scm_do_read_line): call scm_fill_buffer.
+
+       * ports.c (scm_ungetc): don't call SCM_CUNGET.  reset the
+       read buffer pointers.
+       scm_fill_buffer: new procedure.
+       (scm_getc): call scm_fill_buffer.
+
+       * ports.h (struct scm_port): saved_read_buf, saved_read_pos,
+       saved_read_end: new fields.
+
+1999-06-24  Mikael Djurfeldt  <mdj@orjan.nada.kth.se>
+
+       * dynl-dl.c (sysdep_dynl_link): Added parenthesis around the
+       trinary conditional in order for the flag computation to be
+       correct.
+
+1999-06-23  Mikael Djurfeldt  <mdj@mdj-pc.nada.kth.se>
+
+       * struct.c, struct.h:
+
+       In order to support different kinds of deallocation, a destructor
+       slot has been added to struct vtables.  This allows for structs
+       containing pointers to other memory blocks.
+       
+       (scm_struct_i_free): New hidden struct slot.  Holds destructor for
+       instances to this vtable.
+       (scm_struct_free_0): New destructor: Doesn't deallocate data.
+       (scm_struct_free_light): New destructor: Deallocates a light
+       struct (i.e. a struct without hidden slots).
+       (scm_struct_free_standard): New destructor: Deallocates standard
+       structs.
+       (scm_struct_free_entity): New destructor: Deallocates entity
+       structs.
+       (SCM_SET_VTABLE_DESTRUCTOR): New macro.
+
+       Changes to hidden slots:
+
+       (scm_struct_i_size): scm_struct_i_flags now shares space with
+       scm_struct_i_size which holds the size of light structs.
+       (scm_struct_i_n_words): This slot has changed meaning.  Previously
+       it included hidden slots.  Now it indicates visible slots.
+       (scm_alloc_struct): Clear flags.
+       (SCM_STRUCTF_MASK): 4 new flag positions added => 12 bits.
+       
+       (struct_num, scm_struct_i_tag): Removed.
+       (scm_struct_vtable_tag): Base tag on the pointer to mallocated
+       memory.
+       (scm_struct_ihashq): Base hash value on pointer to struct handle.
+       
+       * tag.c (scm_tag): Base tag on vtable pointer.
+
+       * objects.c (scm_init_objects): Initialize destructor slot of the
+       primordial entity class.
+
+       * objects.h (SCM_SET_CLASS_DESTRUCTOR,
+       SCM_SET_CLASS_INSTANCE_SIZE): New macros.
+       
+       * gc.c (scm_gc_sweep): Call struct free slot.
+
+       * keywords.c, keywords.h (scm_c_make_keyword): New function.
+       (We should remove the use of the prefix '-'.)
+
+       * snarf.h (SCM_KEYWORD, SCM_GLOBAL_KEYWORD): New macros.
+
+       * libguile.h: #include "objects.h"
+
+1999-06-22  Marius Vollmer  <mvo@zagadka.ping.de>
+
+       * dynl.c (DYNL_GLOBAL): New.
+       (sysdep_dynl_link): Added `flags' argument.
+       (kw_global, sym_global): New.
+       (scm_dynamic_link): Handle keyword arguments.  Pass suitable flags
+       to sysdep_dynl_link.
+       * dynl-dl.c (sysdep_dynl_link): Handle new `flags' argument by
+       conditrionally adding RTLD_GLOBAL to DLOPEN_MODES.
+       * dynl-shl.c (sysdep_dynl_link): Add and ignore new flags
+       argument.
+       * dynl-dld.c (sysdep_dynl_link): Add and ignore new flags
+       argument.
+        * dynl.h (scm_dynamic_link): Added rest argument.
+
+1999-06-21  Marius Vollmer  <mvo@zagadka.ping.de>
+
+       * dynl.c (sysdep_dynl_unlink, sysdep_dynl_func): Use const
+       qualifier for char* argument, to match prototypes.  Thanks to Mark
+       Elbrecht.
+
+1999-06-21  Jim Blandy  <jimb@savonarola.red-bean.com>
+
+       * dynl.c (no_dynl_error, sysdep_dynl_link, sysdep_dynl_unlink,
+       sysdep_dynl_func): Use ANSI declarations, and const char *
+       pointers.  (Thanks to Mark Elbrecht.)
+
+1999-06-19  Jim Blandy  <jimb@savonarola.red-bean.com>
+
+       Patch from Greg Harvey:
+       * eq.c, eval.c, list.c, ramap.c, vectors.c: Always write parens
+       around the condition of an `if', `while', etc., even if the
+       condition is a macro invocation that expands to something
+       surrounded by parens.  It's more readable. 
+
+       * eval.c (scm_map, scm_for_each): Verify that all arguments are
+       proper lists, and of the appropriate lengths.
+       (check_map_args): New function.  (Thanks to Greg Harvey for the
+       bug report.)
+
+1999-06-19  Michael Livshin  <mike@olan.com>
+
+       * guardians.c (guardian_t): `next' - new field to be used for
+       chaining the live guardians in a single-linked list during the GC
+       mark phase.
+       (GUARDIAN_NEXT): convenience macro to access the `next' field.
+       (guardians, guardians_size, n_guardians): deleted.
+       (first_live_guardian, current_link_field): new globals used to
+       point to the head of the live guardian list and current `next'
+       field, respectively.
+       (g_mark): append the guardian to the live guardian list.
+       (scm_guardian_gc_init): zero the live guardian list.
+       (scm_guardian_zombify): iterate through the live guardian list.
+
+       (Applied by Jim Blandy.)
+       
+1999-06-16  Jim Blandy  <jimb@savonarola.red-bean.com>
+
+       * gc.c (scm_mallocated): Just make this signed.
+       (scm_igc): Check for underflow by seeing if this is negative.
+       Much cleaner.
+       * gc.h (scm_mallocated): Fix declaration.
+       (Thanks to Greg Harvey.)
+       
+       * ports.h: #include <sys/types.h>, to get a definition for `off_t'.
+
+1999-06-15  Jim Blandy  <jimb@savonarola.red-bean.com>
+
+       * stime.c (bdtime2c): Initialize lt->gmtoff and lt->tm_zone from
+       sbd_time.  (Thanks to Eric Hanchrow.)
+
+       Fix from Ken Raeburn <raeburn@raeburn.org>:
+       * weaks.c (scm_make_weak_vector): Add another extra slot before
+       vector contents, to be used only during garbage collection.
+       * weaks.h (SCM_WVECT_GC_CHAIN): New macro to access it.
+       * gc.c (scm_weak_vectors): Now a SCM instead of a SCM*, and now
+       static.
+       (scm_weak_size, scm_n_weak): Deleted.
+       (scm_igc): Use SCM_WVECT_GC_CHAIN to build up a chain of weak
+       vectors without allocating new storage during GC, using
+       scm_weak_vectors as the head of the chain.
+       (scm_mark_weak_vector_spines): Walk SCM_WVECT_GC_CHAIN chain
+       instead of stepping through an array.
+       (scm_gc_sweep): Update offset used to find start of weak vector to
+       free it.
+       (scm_init_storage): Set scm_weak_vectors to EOL.
+
+       Fix from Ken Raeburn <raeburn@raeburn.org>:
+       * gc.c (already_in_gc): New variable.
+       (scm_igc): Set and clear already_in_gc; abort if it's set at
+       entry.
+
+1999-06-14  Jim Blandy  <jimb@savonarola.red-bean.com>
+
+       Fix from Gary Houston:
+       * fports.c (local_seek): Signal an error if the seek fails.
+       * ports.c (scm_lseek): Don't check return value of port's seek
+       function; it's its job to signal an error if there's a problem.
+
 1999-06-12  Jim Blandy  <jimb@savonarola.red-bean.com>
 
        * strports.c (scm_call_with_output_string): Don't include the
        * ports.h (SCM_BUFLINE): New flag for ports.
        * init.c (scm_init_standard_ports): Request line-buffering on
        the standard output port.
-*      * ports.c (scm_mode_bits): Recognize 'l' as a request for line
+       * ports.c (scm_mode_bits): Recognize 'l' as a request for line
        buffering.
        (scm_putc, scm_puts, scm_lfwrite): If the port is line-buffered,
        and there's a newline to be written, flush the port.
        ports.h (scm_ptobfuns): add ftruncate.
        ports.c (scm_newptob): set ftruncate.
        adjust ptob tables.
-*      ports.c (scm_ftruncate): new procedure.
+       ports.c (scm_ftruncate): new procedure.
        fports.c (local_ftrunate), strports.c (str_ftruncate): new procs.
        strports.c (st_seek, st_grow_port): new procs.
        fports.h (scm_port): change size types from int to off_t.
        1999-04-20  Gary Houston  <ghouston@easynet.co.uk>
 
        * ports.c (scm_newptob): bugfix: set seek member.
-*      * (scm_lseek): new procedure, using code from ioext.c:scm_fseek
+       * (scm_lseek): new procedure, using code from ioext.c:scm_fseek
        and generalised to all port types.
 
        1999-04-18  Gary Houston  <ghouston@easynet.co.uk>
 
        * strports.c (scm_call_with_output_string): get size from
        buffer instead of port stream.
-       (scm_strprint_obj): likewise.
        (st_flush): new proc.
 
        * ports.h (struct scm_port_table): added write_end member,
        * fports.c (scm_fdes_to_port), ports.c (scm_void_port),
        filesys.c (scm_opendir):
        restore defer interrupts while the port is constructed.
-*      (scm_setvbuf): if mode is _IOFBF and size is not supplied,
+       (scm_setvbuf): if mode is _IOFBF and size is not supplied,
        derive buffer size from fdes or use a default.
        (scm_fdes_to_port): use setvbuf instead of creating the buffers
        directly.
        * ports.c (scm_force_output): call scm_fflush.
 
        * print.c (scm_newline): don't check errno for EPIPE (it wouldn't
-*      reach this point.)  don't flush port (if scm_cur_outp).
+       reach this point.)  don't flush port (if scm_cur_outp).
 
        * fports.h (SCM_FPORT_FDES): new macro.
 
        proc runs.
 
         *fports.c (print_pipe_port, local_pclose, scm_pipob): deleted.
-*      open-pipe, close-pipe are emulated in (ice-9 popen)
+       open-pipe, close-pipe are emulated in (ice-9 popen)
        ports.c (scm_ports_prehistory): don't init scm_pipob.
        ports.h (scm_tc16_pipe): deleted.
        posix.c (scm_open_pipe, scm_close_pipe): deleted.
        (scm_setvbuf): set the buffer.
        (scm_setfileno): deleted.
        (scm_evict_ports): set fdes directly.
-*      (scm_freopen): deleted.  doesn't seem useful in Guile.
+       (scm_freopen): deleted.  doesn't seem useful in Guile.
        (scm_stdio_to_port): deleted.
        fports.h (struct scm_fport): add shortbuf member to avoid separate
        code for unbuffered ports.
        new members.
        * init.c (scm_init_standard_ports): pass fdes instead of FILE *.
 
-*      * ports.c (scm_drain_input): new procedure.
+       * ports.c (scm_drain_input): new procedure.
        ports.h: prototype.
        * fports.c (FPORT_READ_SAFE, FPORT_WRITE_SAFE, FPORT_ALL_OKAY,
        pre_read, pre_write): removed.