*** empty log message ***
[bpt/guile.git] / libguile / ChangeLog
index c69e0d3..5bdae6d 100644 (file)
+2004-11-03  Marius Vollmer  <mvo@zagadka.de>
+
+       * unif.h (SCM_UVECTOR_BASE, SCM_SET_UVECTOR_BASE,
+       SCM_UVECTOR_MAXLENGTH, SCM_UVECTOR_LENGTH, SCM_MAKE_UVECTOR_TAG,
+       SCM_SET_UVECTOR_LENGTH): Removed.
+
+2004-11-02  Marius Vollmer  <mvo@zagadka.de>
+
+        Mac OS X and OpenBSD compatibility patches from Andreas Vögele.
+       Thanks!
+
+       * backtrace.c (scm_display_backtrace_with_highlights): Join the
+       first and the second line of the SCM_DEFINE macro call, since old
+       preprocessors cannot handle definitions that are split into two
+       lines.
+
+       * inline.h (scm_cell, scm_double_cell): Don't use C99 variable
+       declarations.
+
+       * pairs.c (scm_i_chase_pairs): Replace scm_t_bits with
+       scm_t_uint32 to fix the mismatch between the function declaration
+       and definition.
+
+       * sort.c (quicksort): Don't use C99 variable declarations.
+
+       * srfi-4.c (uvec_fast_ref): Avoid a compiler warning by returning
+       SCM_BOOL_F if no type matches.
+
+       * threads.c (thread_print): Cast a pointer to size_t when printing
+       with scm_uintprint.
+
+       * unif.c (scm_i_tag_to_prototype): Make sure that "instead" gets
+       defined.
+       (scm_array_prototype): Deprecated.
+
+2004-11-02  Marius Vollmer  <marius.vollmer@uni-dortmund.de>
+
+       * srfi-4.h, srfi-4.c (scm_frame_uniform_vector_release): New.
+       * unif.c (scm_bit_set_star_x, scm_bit_count_star_x): Use it to get
+       more efficient access to the u32vector.
+       
+       * tags.h (scm_tc7_llvect, scm_tc7_uvect, scm_tc7_fvect,
+       scm_tc7_dvect, scm_tc7_cvect, scm_tc7_svect, scm_tc7_byvect,
+       scm_tc7_ivect): Renamed to scm_tc7_unused_1 to scm_tc7_unused_8.
+
+       * validate.h (SCM_VALIDATE_VECTOR_OR_DVECTOR): Accept f64vectors
+       instead of the old-style dvectors.
+
+       * gh_data.c: Use new-style uniform arrays in place of old-style
+       ones.
+
+       * eq.c, evalext.c, gc-card.c, gc-mark.c, objects.c, print.c,
+       ramap.c, unif.c: Do no longer handle old-style uniform vectors.
+
+       * unif.c (scm_bit_set_star_x, scm_bit_count_star_x): Use u32vectors
+       instead of old-sytle uvectors.
+       
+       * convert.c, convert.i.c: Rewritten completely, using
+       scm_any_to_u8vector, etc and other new-style uniform vector
+       functions.
+
+       * random.c (scm_random_solid_sphere_x,
+       scm_random_hollow_sphere_x): Do not validate vector argument, this
+       is already done elsewhere.
+
+       * srfi-4.h, srfi-4.i.c, srfi-4.c (coerce_to_uvec,
+       scm_any_to_u8vector, etc): New.
+       (scm_uniform_element_size, scm_uniform_vector_length): Do no
+       longer handle old-style uniform vectors.
+
+       * read.c (scm_lreadr): Bugfix: include the last bit in the
+       bit vector.
+
+2004-10-29  Marius Vollmer  <marius.vollmer@uni-dortmund.de>
+
+       * unif.h, unif.c (scm_array_creator): New.
+       (scm_i_get_old_prototype): New.
+       (scm_array_prototype): use it to return old-style prototype, never
+       return creators.
+       (scm_make_uve): Use scm_call_1 instead of scm_call_2 with a second
+       arg of SCM_UNDEFINED.  The latter is wrong.
+       
+       * unif.h, unif.c (scm_make_u1vector): New, but only temporary.
+       (make_uve): Removed.
+       (scm_i_proc_make_vector, scm_i_proc_make_string,
+       scm_i_proc_make_u1vector): New.
+       (scm_init_unif): Initialize them.
+       (scm_i_convert_old_prototype): New.
+       (scm_make_uve): Use it to get the creator procedure.  Removed all
+       old code that created old-style uniform vectors.
+       (scm_array_p): Handle generic vectors.
+       (scm_dimensions_to_uniform_array): Do not fill new array with
+       prototype when that is a procedure.
+       (scm_list_to_uniform_array): Also accept a list of lower bounds as
+       the NDIM argument.
+       (scm_i_print_array): Print rank for shared or non-zero-origin
+       vectors.
+       (tag_proto_table, scm_i_tag_to_prototype, scm_i_read_array): New.
+       (scm_raprin1): Do not call scm_i_array_print for enclosed arrays,
+       which I do not understand yet.
+       (scm_array_prototype): Explicitely handle generic vectors.
+
+       * numbers.c, number.h (scm_i_print_complex, icmplx2str): New.
+       (iflo2str): Use icmplx2str for complex numbers.
+
+       * srfi-4.c, srfi-4.h (scm_i_read_homogenous_vector,
+       scm_i_uniform_vector_prototype): Removed.
+       (scm_i_uniform_vector_creator): New.
+       (SCM_UVEC_C32, scm_c32vector, scm_make_c32vector, etc,
+       SCM_UVEC_C64, scm_c64vector, scm_make_c64vector, etc): New.
+       Updated all tables and generic functions to support them.
+       (scm_i_proc_make_u8vector, scm_i_proc_make_s8vector, etc): New.
+       (scm_init_srfi_4): Initialize them.
+       
+       * srfi-4.i.c (scm_take_u8vector, etc): use uvec_sizes instead of
+       sizeof(CTYPE) as explained in the comment.
+
+       * read.c (scm_lreadr): Call scm_i_read_array for all characters
+       followinf '#' that can start an array.  Explicitely disambiguate
+       'i' and 'e' between introducing numbers and uniform vectors.  Do
+       not call scm_i_read_homogenous_vector, since that is also handled
+       by scm_i_read_array now.
+
+2004-10-27  Marius Vollmer  <marius.vollmer@uni-dortmund.de>
+
+       First cut at integrating uniform vectors from srfi-4 with the rest
+       of Guile.  This change replaces scm_tc7_byvect with a s8 uniform
+       vector.  The plan is to gradually replace one type after the other
+       until none is left and then to consider general cleanups and
+       optimizations.
+       
+       * srfi-4.h, srfi-4.i.c (scm_u8vector_elements, etc): New.
+
+       * srfi-4.h, srfi-4.c (scm_uniform_vector_p,
+       scm_uniform_vector_ref, scm_uniform_vector_set_x,
+       scm_uniform_vector_to_list, scm_is_uniform_vector,
+       scm_c_uniform_vector_lengths, scm_c_uniform_vector_size,
+       scm_uniform_vector_elements, scm_uniform_vector_element_size,
+       scm_uniform_vector_release): New.
+       (scm_i_uniform_vector_prototype, scm_i_uniform_vector_tag): New.
+       (scm_uniform_element_size, scm_uniform_vector_length): Moved here
+       from unif.h, unif.c and extended to handle both the old and new
+       uniform vectors.
+
+       * tags.h (scm_tc7_byvect): Commented out.
+
+       * unif.h, unif.c (scm_uniform_vector_ref, scm_array_ref): Renamed
+       the former to the latter.
+       (scm_uniform_vector_length, scm_uniform_element_size): Moved to
+       srfi-4.h, srfi-4.c.
+       (scm_make_uve): Call scm_make_s8vector for #\nul prototype.
+       (scm_array_p, scm_array_rank, scm_array_dimensions,
+       scm_transpose_array, scm_enclose_array, scm_array_ref, scm_cvref,
+       scm_array_set_x, scm_array_contents, scm_uniform_array_read_x,
+       scm_array_to_list, scm_array_prototype): Handle srfi-4 uniform
+       vectors.  Removed code for scm_tc7_byvect.
+       (scm_dimensions_to_uniform_array): Fill array with 0 when
+       prototype is #\nul.
+       (scm_i_print_array_dimension, scm_i_legacy_tag,
+       scm_i_print_array): New.
+       (scm_raprin1): Call scm_i_print_array for arrays.  Removed code
+       for scm_tc7_byvect.
+
+       * ramap.c (scm_ra_matchp, scm_array_fill_int, racp,
+       scm_array_index_map_x, raeql_1, scm_array_equal_p): Handle srfi-4
+       uniform vectors.  Removed code for scm_tc7_byvect
+
+       * print.c (iprin1): Removed code for scm_tc7_byvect.
+       * objects.c (scm_class_of): Likewise.
+       * gc-mark.c (scm_gc_mark_dependencies): Likewise.
+       * gc-card.c (scm_i_sweep_card): Likewise.
+       * evalext.c (scm_self_evaluating_p): Likewise.
+       * eq.c (scm_equal_p): Likewise.
+
+       * gh_data.c (gh_chars2byvect): Reimplemented with
+       scm_make_s8vector.
+       (gh_scm2chars): Handle s8vectors, removed code for scm_tc7_byvect.
+
+       * srfi-4.c (take_uvec): New.
+       (alloc_uvec): Use it.
+       * srfi-4.h, srfi-4.i.c (scm_take_u8vector, etc): New.
+
+       * random.c (vector_scale, vector_scale_x): Renamed former to the
+       latter, since it modifies its argument.
+       (vector_scale_x, vector_sum_squares, scm_random_normal_vector_x):
+       Do not use scm_universal_vector_length for non-uniform vectors.
+       Use scm_f64vector_elements to access innards of uniform vectors.
+
+       * convert.i.c: Convert srfi-4 style uniform vectors when
+       requested.
+       * convert.c (scm_c_scm2chars, scm_c_chars2scm,
+       scm_c_chars2byvect): Use a s8vector instead of a scm_tc7_byvect.
+       
+2004-10-26  Marius Vollmer  <marius.vollmer@uni-dortmund.de>
+
+       * numbers.h, numbers.c (scm_i_print_double): New.
+
+       * srfi-4.c, srfi-4.h, srfi-4.i.c: New files, initially from
+       ../srfi/ but heavily modified.
+       * Makefile.am: Add them in all the right places.
+       * init.c (scm_init_guile_1): Call scm_init_srfi_4.
+       * read.c (scm_lreadr): Call scm_i_read_homogenous_vector for '#f',
+       '#u', and '#s'.
+
+       * read.h, read.c (scm_i_input_error): Renamed from scm_input_error
+       and made non-static.  Changed all uses.
+
+2004-10-22  Marius Vollmer  <marius.vollmer@uni-dortmund.de>
+
+       * variable.c, threads.c, struct.c, stackchk.c, smob.c, root.c,
+       print.c, ports.c, mallocs.c, hooks.c, hashtab.c, fports.c,
+       guardians.c, filesys.c, coop-pthreads.c, continuations.c: Use
+       scm_uintprint to print unsigned integers, raw heap words, and
+       adresses, using a cast to scm_t_bits to turn pointers into
+       integers.
+
+       * unif.c: Include "libguile/print.h".
+
+       * numbers.h, numbers.c (SCM_T_INTBUFLEN): Increased to cover
+       scm_t_intmax values.
+       (scm_uint2str): New, for scm_t_uintmax.
+       (scm_iint2str): Argument type changed to scm_t_intmax,
+       reimplemented in terms of scm_uint2str.
+       
+       * print.c, print.h (scm_uintprint): New, for printing
+       scm_t_uintmax values.
+       (scm_intprint): Argument type changed to scm_t_intmax.
+       
+       * sort.c (quicksort, scm_merge, scm_merge_list_x,
+       scm_merge_list_step, scm_merge_vector_step): Inserted SCM_TICKs at
+       strategic places so that the loops can be interrupted.
+
+       * Makefile.am (INCLUDES): Use @LTDLINC@ instead of
+       "-I$(top_srcdir)/libguile-ltdl".
+       (libguile_la_LIBADD): Use @LIBLTDL@ instead of
+       "../libguile-ltdl/libguile-ltdl.a".
+       
+       * guile.c, dynl.c: Switched to using libltdl directly.  Replaced
+       all references to scm_lt_* with just lt_*.  Include <ltdl.h>
+       instead of <libguile-ltdl.h>.
+
+2004-10-20  Marius Vollmer  <mvo@zagadka.de>
+
+       * sort.c (quicksort): Copy pivot out of the array while
+       constructing the partitions; it could get overwritten otherwise.
+       Because of the ultimate insertion sort, this bug did not cause
+       quicksort to fail, it just put all the burdon on the insertion
+       sort and was thus very slow.  Thanks to Rolan Orre for reporting
+       the slowness!
+       
+2004-10-19  Marius Vollmer  <marius.vollmer@uni-dortmund.de>
+
+       * numbers.c (scm_i_range_error): New.
+       * conv-integer.i.c, conv-uinteger.i.c: Use it instead of
+       scm_out_of_range.       
+
+       * sort.c (scm_restricted_vector_sort_x): Validate startpos <=
+       endpos.  State inclusiveness/exclusiveness of bounds in docstring.
+
+       * unif.c (scm_array_p): When no prototype is given, explicitely
+       test for allowable types, do not simply return true.  Thanks to
+       Roland Orre for reporting this!
+
+       * private-gc.h (SCM_DEFAULT_MAX_SEGMENT_SIZE): Increase to 20 Mib.
+
+       * gc-segment.c (scm_i_get_new_heap_segment): Limit size of new
+       segment to scm_max_segment_size.
+
+2004-10-08  Han-Wen Nienhuys  <hanwen@xs4all.nl>
+
+       * inline.h (scm_double_cell): abort if GC running.
+       (scm_cell): idem.
+
+2004-10-04  Marius Vollmer  <marius.vollmer@uni-dortmund.de>
+
+       * error.c (scm_wrong_type_arg): Do not talk about "argument" for
+       pos == 0.
+
+       Keywords no longer store a 'dash symbol'.  Instead, they store a
+       symbol with their real name.
+       
+       * keywords.h, keywords.c, deprecated.h, deprecated.c
+       (SCM_KEYWORDP, SCM_KEYWORDSYM): Deprecated and implemented in
+       terms of scm_is_keyword and scm_keyword_dash_symbol.
+       
+       * keywords.h, keywords.c, discouraged.h, discouraged.c
+       (scm_make_keyword_from_dash_symbol, scm_keyword_dash_symbol,
+       scm_c_make_keyword): Discouraged.
+
+       * keywords.h, keywords.c (scm_symbol_to_keyword,
+       scm_keyword_to_symbol): Implemented in C.
+       (scm_is_keyword, scm_from_locale_keyword,
+       scm_from_locale_keywordn): New.
+
+       * goops.c: Replaced SCM_KEYWORDP with scm_is_keyword.   
+
+       * snarf.h (SCM_KEYWORD, SCM_GLOBAL_KEYWORD): Use
+       scm_from_locale_keyword instead of scm_c_make_keyword.
+
+       * keywords.c (scm_symbol_to_keyword): Use SCM_ASSERT_TYPE for a
+       better error message.
+
+       * deprecated.c: Include discouraged.h and keywords.h.
+
+       * read.c (scm_lreadr): Simply do (symbol->keyword (read)) after
+       reading '#:' or ':'.  See NEWS for consequences.
+
+2004-09-29  Marius Vollmer  <marius.vollmer@uni-dortmund.de>
+
+       * read.c (scm_lreadr): Revert change from 2004-09-22: string
+       literals are now read-write again (until SCM_STRING_CHARS is
+       removed).
+
+       * strings.c (SCM_STRING_CHARS): Explicitely reject read-only
+       strings with an error message that blames SCM_STRING_CHARS.
+
+       * options.c (change_option_setting): Use scm_car instead of
+       explicit type check plus SCM_CAR.
+
+       * print.h, print.c (SCM_PRINT_HIGHLIGHT_PREFIX,
+       SCM_PRINT_HIGHLIGHT_SUFFIX): New printer options.
+       (scm_iprin1): Use them instead of the previoulsy hardcoded
+       strings.
+       (scm_init_print): Initialize them.
+
+       * backtrace.c (display_frame_expr): Do not remove control
+       characters from the final string.  Print it directly using
+       scm_display.
+
+       * ramap.c (scm_array_equal_p): Include scm_tc7_svect in switch.
+       Thanks to Roland Orre!
+
+2004-09-29  Kevin Ryde  <user42@zip.com.au>
+
+       * regex-posix.c (scm_regexp_exec): Correction to last change, should
+       be whole original string in match struct, not offsetted substring.
+
+2004-09-24  Han-Wen Nienhuys   <hanwen@xs4all.nl>
+
+       * gc.c (scm_gc_unprotect_object): abort if called during GC.
+
+2004-09-24  Marius Vollmer  <mvo@zagadka.de>
+
+       * Makefile.am (EXTRA_DIST): Added gettext.h.
+
+       * smob.c, smob.h (scm_assert_smob_type): New.
+
+       * Makefile.am (guile_CFLAGS, guile_LDFLAGS, libguile_la_CFLAGS):
+       Include GUILE_CFLAGS.
+       (libguile_la_LIBADD): Removed THREAD_LIBS_LOCAL, which is unused
+       now.
+       (libpath.h): Put GUILE_CFLAGS in the build-info.
+       
+2004-09-23  Marius Vollmer  <mvo@zagadka.de>
+
+        * print.h (scm_print_state): Added highlight_objects.
+       * print.c (make_print_state, scm_free_print_state): Initialize it
+       to SCM_EOL.
+       (scm_iprin1): Wrap output in '{...}' when object is contained in
+       highlight_objects.
+
+       * backtrace.h, backtrace.c (scm_display_backtrace_with_highlights,
+       scm_backtrace_with_highlights): New.  Set highlight_objects of
+       printstate.
+       
+       * error.c (scm_error_scm): Document new meaning of data/rest
+       argument for out-of-range and wrong-type-arg errors.
+       (scm_out_of_range, scm_out_of_range_pos, scm_wrong_type_arg,
+       scm_wrong_type_arg_msg): Pass bad_value in rest argument of
+       exception so that it gets highlighted in the backtrace.
+       Don't talk about "argument" when not giving a position.
+       
+       * throw.c (handler_message): The rest argument is the fourth
+       argument, not everything after the third.  Call
+       scm_display_backtrace_with_highlights, passing the rest argument
+       when appropriate.
+
+2004-09-22  Marius Vollmer  <mvo@zagadka.de>
+
+       From Jan Nieuwenhuizen <janneke@gnu.org> and Bruno Haible
+       <bruno@clisp.org>:
+
+       * i18n.c: Handle --disable-nls (thanks Bruno).
+
+       * posix.c (scm_init_posix): Add LC_PAPER, LC_NAME, LC_ADDRESS,
+       LC_TELEPHONE, LC_MEASUREMENT, LC_IDENTIFICATION.
+
+       * i18n.c (scm_i_to_lc_category): New name and export.  Support all
+       LC categories.
+       * posix.c (scm_setlocale): Use it.
+
+       * i18n.h, i18n.c (scm_textdomain, scm_bindtextdomain,
+       scm_bind_textdomain_codeset): Make wrappers similar to C function
+       they wrap.
+
+       * i18n.h: New file.
+       * i18n.c: New file.
+       * gettext.h: New file, taken from GNU gettext.
+       * init.c: Include libguile/i18n.h.
+       (scm_init_guile_1): Add call to scm_init_i18n().
+       * Makefile.am (libguile_la_SOURCES): Add i18n.c.
+       (DOT_X_FILES): Add i18n.x.
+       (DOT_DOC_FILES): Add i18n.doc.
+       (libguile_la_LDFLAGS): Add @LTLIBINTL@.
+       (modinclude_HEADERS): Add i18n.h.
+
+2004-09-22  Marius Vollmer  <mvo@zagadka.de>
+
+       * gh_list.c: Replaced SCM_CAR, etc with scm_car, etc.
+
+       * discouraged.h, tags.h (SCM_CONSP, SCM_NCONSP): Moved to
+       discouraged.h.  Replaced all uses with scm_is_pair.
+       (SCM_I_CONSP): New name for SCM_CONSP.
+
+       * pairs.h, pairs.c (scm_is_pair, scm_is_null, scm_car, scm_cdr,
+       scm_i_chase_pairs, SCM_I_A_PAT, SCM_I_D_PAT, etc, scm_caar,
+       scm_cadr, etc): New.
+       (SCM_NULLP, SCM_NNULLP): Moved to discouraged.h.  Replaced all
+       uses with scm_is_null.
+
+       * eval.c (scm_eval, scm_apply, call_cxr_1): Use scm_i_chase_pairs
+       instead of explicit code.
+
+2004-09-22  Marius Vollmer  <mvo@zagadka.de>
+
+       * srfi-13.c (scm_string_contains, scm_string_contains_ci):
+       Reworded logic a bit so that #f is returned immediately when s1 is
+       too short to contain s2.
+
+       * regex-posix.c (scm_regexp_exec): Convert string to
+       zero-terminated locale string before matching against it.
+
+       * strings.h, strings.c (scm_substring_read_only,
+       scm_c_substring_read_only, scm_i_substring_read_only): New.
+       (RO_STRING_TAG, IS_RO_STRING): New.
+       (scm_i_string_writable_chars): Bail on read-only strings. 
+       
+       * read.c (scm_lreadr): use scm_c_substring_read_only for string
+       literals, thus making them read-only as specified by R5RS.
+
+2004-09-22  Marius Vollmer  <mvo@zagadka.de>
+
+       * eq.c (scm_equal_p): Allow smobs with different flags to be equal
+       by testing for smobs before insisting on equal SCM_CELL_TYPES.
+
+2004-09-21  Marius Vollmer  <mvo@zagadka.de>
+
+       * numbers.h, numbers.c: Include <gmp.h> in numbers.h, not in
+       numbers.c.
+       (scm_to_mpz, scm_from_mpz): New.
+       Thanks to Andreas Vögele!
+       
+       * read.c (skip_scsh_block_comment): Recognize "!#" everywhere, not
+       just on a line of its own.
+
+       * srfi-13.c (scm_string_any, scm_string_every,
+       scm_string_tabulate, string_upcase_x, string_down_case_x,
+       string_titlecase_x, string_reverse_x, scm_string_tokenize): Use
+       size_t instead of int for indices into strings.  Make sure that no
+       over- or underflow occurs.  Thanks to Andreas Vögele!
+       (scm_xsubstring, scm_string_xcopy_x): Use ints for 'extended'
+       indices, which can also be negative.
+       
+2004-09-20  Marius Vollmer  <mvo@zagadka.de>
+
+       * gc-mark.c (SCM_MARK_BACKING_STORE): Removed, it was unused.
+
+       * threads.c (scm_threads_mark_stacks): Call
+       SCM_MARK_BACKING_STORE.  Also, do not use stack_len local, it was
+       only used once.
+
+2004-09-13  Jan Nieuwenhuizen  <janneke@gnu.org>
+
+       * srfi-13.c (scm_string_contains, scm_string_contains_ci):
+       Bugfix: when subtracting unsigned values, make sure that result
+       does not wrap.
+
+2004-09-09  Kevin Ryde  <user42@zip.com.au>
+
+       * filesys.c, stime.c (_POSIX_C_SOURCE): Use this only on hpux, it
+       causes too many problems elsewhere (glibc, freebsd, mingw).  Reported
+       by Andreas Vögele.
+
+2004-09-08  Marius Vollmer  <marius.vollmer@uni-dortmund.de>
+
+       * Makefile.am (EXTRA_libguile_la_SOURCES): Removed "alloca.c".
+
+       * eq.c (real_eqv): Pretend that all NaNs are equal.
+
+       * numbers.c (scm_integer_expt): Do not accept inexact integers.
+
+2004-09-07  Marius Vollmer  <marius.vollmer@uni-dortmund.de>
+
+       * srfi-13.c (scm_string_trim_right, scm_string_xcopy_x): Correctly
+       use size_t for some locals instead of int.
+
+       * read.c (scm_flush_ws): Detect "#!"-style comments here.
+       (scm_lreadr): Abort on seeing "#!", which should no longer happen.
+       (skip_scsh_block_comment): Use scm_input_error instead of
+       scm_misc_error in case of EOF.
+       
+2004-09-07  Kevin Ryde  <user42@zip.com.au>
+
+       * numbers.c (scm_integer_expt): Reject exponent +/-inf.
+       Bug report by Bill Schottstaedt.
+
+       * ports.c (scm_getc, scm_lfwrite): Recognise \a \b and \r for port
+       column.
+       * ports.h (SCM_ZEROCOL, SCM_DECCOL): New macros.
+
+       * posix.c (scm_access): Update docstring per manual.
+
+       * posix.c (scm_nice): Correction to error detection.  Reported by
+       Matthias Koeppe.
+
+       * stime.c (scm_current_time, scm_gettimeofday, scm_strptime): Don't
+       throw error before unlocking mutex with SCM_ALLOW_INTS.
+
+2004-09-06  Kevin Ryde  <user42@zip.com.au>
+
+       * stime.h (SCM_TIME_UNITS_PER_SECOND): Use sysconf(_SC_CLK_TCK) when
+       available.  This also gets around CLK_TCK being absent when
+       _GNU_SOURCE and _POSIX_C_SOURCE are defined in stime.c.
+
+2004-09-03  Stefan Jahn  <stefan@lkcc.org>
+
+       * threads.c (scm_threads_mark_stacks):  Fixed local variable
+       definitions.
+
+       * strings.c (scm_i_substring_copy, scm_string_append): Fixed
+       local variable definitions.
+
+       * stime.c (_POSIX_C_SOURCE):  Do not define this item on
+       MinGW32 because it conflicts with its pthread headers.
+       (scm_mktime): Consider the HAVE_STRUCT_TM_TM_ZONE define.
+       (scm_strftime): Using scm_from_locale_string() instead of
+       scm_makfrom0str().
+
+       * posix.c (scm_putenv): Fixed typo in the !HAVE_UNSETENV
+       part.
+
+       * numbers.c (scm_init_numbers): Removed check_sanity() call
+       inside GUILE_DEBUG.  The function has been removed somewhen...
+
+       * filesys.c (_POSIX_C_SOURCE): Do not define this item on
+       MinGW32 because it conflicts with its pthread headers.
+
+2004-08-27  Marius Vollmer  <marius.vollmer@uni-dortmund.de>
+
+       * strings.c (SCM_STRINGP): Accept all strings.
+       (SCM_STRING_CHARS): Reject shared substrings here.
+
+       * script.c (scm_compile_shell_switches): Added 2003 and 2004 to
+       the Copyright years.
+
+2004-08-27  Kevin Ryde  <user42@zip.com.au>
+
+       * socket.c (scm_fill_sockaddr): Use HAVE_STRUCT_SOCKADDR_SIN_LEN and
+       HAVE_STRUCT_SOCKADDR_IN6_SIN6_LEN for sockaddr fields, SIN_LEN and
+       SIN_LEN6 are not defined on all systems.  Reported by Michael Tuexen.
+
+2004-08-26  Marius Vollmer  <marius.vollmer@uni-dortmund.de>
+
+       * strings.h, strings.c (scm_i_make_symbol): Added FLAGS parameter.
+       * symbols.h, symbols.c (SCM_I_F_SYMBOL_UNINTERNED,
+       scm_i_symbol_is_interned, scm_i_mem2symbol,
+       scm_i_mem2uninternedsymbol): Use it to store uninternedness flag.
+
+2004-08-25  Marius Vollmer  <marius.vollmer@uni-dortmund.de>
+
+       * srfi-13.c: First cut at thread-safeness and proper use of
+       scm_i_string_chars et al.  Copious scm_remember_upto_heres have
+       been inserted.  Made sure that no internal string pointer is used
+       across a SCM_TICK or a possible GC.
+       
+       * script.c (scm_compile_shell_switches): Use
+       scm_from_locale_string instead of scm_makfrom0str.
+
+       * srfi-13.c (scm_string_rindex): Export to Scheme, as it has
+       always been.
+
+2004-08-25  Marius Vollmer  <mvo@zagadka.de>
+
+       Moved SRFI-13 and SRFI-14 into the core, taking over the role of
+       strop.c.
+
+       * srfi-13.c, srfi-13.h, srfi-14.c, srfi-14.h: New files.
+       * strop.h, strop.c: Removed, they are now empty.
+       * Makefile.am: Updated for new and removed files.
+       
+       * symbols.h, symbols.c (scm_string_ci_to_symbol): Moved here, next
+       to scm_string_to_symbol.
+
+       * chars.c (scm_char_alphabetic_p, scm_char_numeric_p,
+       scm_char_whitespace_p, scm_upper_case_p, scm_lower_case_p,
+       scm_char_is_both_p): Use scm_char_set_contains_p with the proper
+       charset instead of libc functions.
+
+       * strorder.c (scm_string_equal_p, scm_string_ci_equal_p,
+       scm_string_less_p, scm_string_leq_p, scm_string_gr_p,
+       scm_string_geq_p, scm_string_ci_less_p, scm_string_ci_leq_p,
+       scm_string_ci_gr_p, scm_string_ci_geq_p): Use scm_string_eq, etc
+       instead of explicit code.
+       
+       * deprecated.c, load.c, posix.c, unif.c, symbols.c: Include
+       "srfi-13.h" instead of "strop.h".
+
+       * init.c (scm_init_guile_1): Call scm_init_srfi_13 and
+       scm_init_srfi_14.  Do not call scm_init_strop.
+
+2004-08-24  Marius Vollmer  <marius.vollmer@uni-dortmund.de>
+
+       * numbers.c (scm_inf_p): Synced docstring back from manual.
+
+2004-08-22  Marius Vollmer  <mvo@zagadka.de>
+
+       * strings.c (get_str_buf_start): New helper function.
+       (scm_i_substring, scm_i_substring_copy, scm_i_substring_shared,
+       scm_i_string_char, scm_i_string_writable_chars): Use it.
+       (scm_i_substring_copy): Make START argument optional for C
+       callers, for upcoming SRFI-13 integration.
+       
+2004-08-21  Marius Vollmer  <mvo@zagadka.de>
+
+        From Richard Todd, Thanks!
+       
+       * script.c (scm_compile_shell_switches): added '-L' switch to add
+       to the %load-path.
+       
+2004-08-21  Dirk Herrmann  <dirk@dirk-herrmanns-seiten.de>
+
+       * eval.c (unmemoize_exprs): When dropping internal body markers
+       from the output during unmemoization, also drop those that are not
+       immediately at the beginning of a body.
+
+2004-08-20  Marius Vollmer  <marius.vollmer@uni-dortmund.de>
+
+       * eval.c (scm_lookupcar1): Report "Variable used before given a
+       value" insetad of an "Unbound" one for variables that are found
+       but still contain SCM_UNDEFINED.
+
+       * posix.c (scm_mkstemp): Correction to the correction, mkstemp
+       expects a null-terminated string in the locale encoding, but
+       scm_i_string_writable_chars doesn't give that.  Fixed by letting
+       mkstemp modify a locale version of the tmpl argument and copying
+       the result back into tmpl.
+       * strop.c (scm_substring_move_x): Store into str2, not str1.
+
+2004-08-20  Kevin Ryde  <user42@zip.com.au>
+
+       * posix.c (scm_mkstemp): Correction to new locale_string stuff, need
+       to modify the input string.
+
+2004-08-19  Marius Vollmer  <mvo@zagadka.de>
+
+       * deprecated.c (SCM_SYMBOL_CHARS): Cast away const in return.
+       (SCM_SYMBOL_LENGTH): It's scm_i_symbol_length, not
+       scm_c_symbol_length.
+
+2004-08-19  Marius Vollmer  <marius.vollmer@uni-dortmund.de>
+
+        New string implementation, with copy-on-write strings and
+       mutation-sharing substrings, and a new internal string API.
+       Symbols can now share memory with strings.
+       
+       * tags.h (scm_tc7_stringbuf): New tag.
+
+       * strings.h, strings.c: (scm_i_string_chars, scm_i_string_length,
+       scm_i_string_writable_chars, scm_i_string_stop_writing): New, to
+       replace SCM_I_STRING_CHARS and SCM_I_STRING_LENGTH.  Updated all
+       uses.
+       (scm_i_make_string, scm_c_make_string): New, to replace
+       scm_allocate_string.  Updated all uses.
+       (SCM_STRINGP, SCM_STRING_CHARS, SCM_STRING_UCHARS,
+       SCM_STRING_LENGTH): Deprecated.
+       (scm_allocate_string, scm_take_str, scm_take0str, scm_mem2string,
+       scm_str2string, scm_makfrom0str, scm_makfrom0str_opt):
+       Discouraged.  Replaced all uses with scm_from_locale_string or
+       similar, as appropriate.
+       (scm_c_string_length, scm_c_string_ref, scm_c_string_set_x,
+       scm_c_substring, scm_c_substring_shared, scm_c_substring_copy,
+       scm_substring_shared, scm_substring_copy): New.
+
+       * symbols.c, symbols.h (SCM_SYMBOLP, SCM_SYMBOL_FUNC,
+       SCM_SET_SYMBOL_FUNC, SCM_SYMBOL_PROPS, SCM_SET_SYMBOL_PROPS,
+       SCM_SYMBOL_HASH, SCM_SYMBOL_INTERNED_P, scm_mem2symbol,
+       scm_str2symbol, scm_mem2uninterned_symbol): Discouraged.
+       (SCM_SYMBOL_LENGTH, SCM_SYMBOL_CHARS, scm_c_symbol2str):
+       Deprecated.
+       (SCM_MAKE_SYMBOL_TAG, SCM_SET_SYMBOL_LENGTH, SCM_SET_SYMBOL_CHARS,
+       SCM_PROP_SLOTS, SCM_SET_PROP_SLOTS): Removed.
+       (scm_is_symbol, scm_from_locale_symbol, scm_from_locale_symboln):
+       New, to replace scm_str2symbol and scm_mem2symbol, respectively.
+       Updated all uses.
+       (scm_gensym): Generate only the number suffix in the buffer, just
+       string-append the prefix.
+
+       * error.c (scm_memory_error): Do not try to throw, just abort.
+       Throwing will not work anyway.
+
+       * gh.h, gh-data.c (gh_set_substr): Made src const.
+
+       * ports.c (scm_i_mode_bits_n): New, for counted strings.
+       (scm_mode_bits): Use it.
+       (scm_c_port_for_each): Blocking GC does not seem to work, allocate
+       a vector normally and fill that instead of consing a list with a
+       blocked GC.
+
+       * read.c (scm_i_casei_streq): New, for counted strings.
+
+       * threads.c (gc_section_count): Removed, thread-sleeping can not
+       be nested.
+       (scm_i_thread_put_to_sleep): Call scm_i_leave_guile before locking
+       admin mutex so that we can be put to sleep by other threads while
+       blocking on that mutex.  Lock all the heap mutex of all threads,
+       including ourselves.
+       (scm_i_thread_wake_up): Unlock all threads, including ourselves,
+       call scm_i_enter_guile.
+       (scm_thread_mark_stacks): Expect all threads to be suspended.
+       
+       * gc.h, gc.c (scm_i_gc_admin_mutex): New, to protect
+       scm_gc_mallocated, for now.
+       (scm_init_storage): Initialize it.
+       * gc-malloc.c (descrease_mtrigger, increase_mtrigger): Use it.
+       
+       * gc-mark.c (scm_gc_mark_dependencies): Call scm_i_string_mark,
+       scm_i_stringbuf_mark and scm_i_symbol_mark, as appropriate.
+       * gc-card.c (scm_i_sweep_card):  Call scm_i_string_free,
+       scm_i_stringbuf_free and scm_i_symbol_free, as appropriate.
+
+       * strop.c (scm_string_copy): Use scm_c_substring to get a
+       copy-on-write string.
+
+2004-08-18  Kevin Ryde  <user42@zip.com.au>
+
+       * arbiters.c (FETCH_STORE): New macro.
+       (SCM_LOCK_VAL, SCM_UNLOCK_VAL): New constants.
+       (SCM_LOCK_ARB, SCM_UNLOCK_ARB): Remove, effectively absorbed into
+       scm_try_arbiter and scm_release_arbiter.
+       (scm_try_arbiter, scm_release_arbiter): Use FETCH_STORE to get xchg
+       for speed on i386, otherwise using mutex.
+
+       * eq.c (scm_equal_p): Remove real==fraction and fraction==real, they
+       must be #f according to R5RS.  (equal? follows eqv?, and for eqv? an
+       exact and inexact is #f.)
+
+       * fports.c (fport_print): Use scm_ttyname instead of ttyname directly,
+       to get thread safety of scm_ttyname.
+
+       * ports.c (ttyname): Remove prototype, unused.
+
+       * socket.c (scm_init_socket): Add SOCK_SEQPACKET and SOCK_RDM.
+       Reported by Michael Tuexen.
+
+2004-08-13  Marius Vollmer  <marius.vollmer@uni-dortmund.de>
+
+       * load.c (scm_init_load_path): Do not pass NULL to
+       scm_to_locale_string, which would happen when GUILE_LOAD_PATH is
+       not set.  Thanks to Bill Schottstaedt.
+
+2004-08-12  Marius Vollmer  <marius.vollmer@uni-dortmund.de>
+
+       * socket.c (scm_inet_aton, scm_inet_pton): Convert SCM strings to
+       locale strings instead of accessing their internals.
+       (scm_recv, scm_send, scm_recvfrom, scm_sendto): Use
+       SCM_I_STRING_CHARS and SCM_I_STRING_LENGTH instead of
+       SCM_STRING_CHARS and SCM_STRING_LENGTH.
+       
+       * simpos.c (scm_system): Convert SCM strings to locale strings
+       instead of accessing their internals.
+
+       * script.c (scm_compile_shell_switches): Convert version to locale
+       string before printing it.
+
+       * rdelim.c (scm_read_delimited_x): Avoid
+       SCM_VALIDATE_SUBSTRING_SPEC_COPY and use scm_from_size_t instead
+       of scm_from_long for the returned number of read characters.
+
+       * ioext.c (scm_fdopen): Use scm_i_fdes_to_port together with
+       scm_i_mode_bits to avoid accessing internals of SCM string from C.
+
+       * filesys.c (STRING_SYSCALL, STRING2_SYSCALL): New helper macros.
+       Use them instead of SCM_SYSCALL when one or two strings need to be
+       converted into locale strings.
+       (my_rename): New, gathers platform dependent code for renaming.
+       (scm_rename): Use it.
+       (scm_readlink, scm_copy_file): Convert SCM strings to locale
+       strings instead of accessing their internals.
+       (scm_basename, scm_dirname): Use SCM_I_STRING_CHARS and
+       SCM_I_STRING_LENGTH instead of SCM_STRING_CHARS and
+       SCM_STRING_LENGTH.
+       
+       * extensions.c (load_extension): Convert lib and init to locale
+       strings instead of accessing the internals directly.
+       (scm_c_load_extension): Use scm_from_locale_string instead of
+       scm_makfrom0str.
+       
+       * fports.h, fports.c (scm_i_fdes_to_port): New, like
+       scm_fdes_to_port, but take mode bits directly instead of as a C
+       string.
+       (scm_i_fdes_to_port): Implement using above.
+       (scm_open_file): Use scm_i_fdes_to_port together with
+       scm_i_mode_bits to avoid accessing internals of SCM string from C.
+       * vports.c (scm_make_soft_port): Use scm_i_fdes_to_port together
+       with scm_i_mode_bits to avoid accessing internals of SCM string
+       from C.
+
+       * ports.h (scm_i_mode_bits): New, same as scm_mode_bits but with a
+       SCM string as argument.
+
+       * ports.c (scm_i_void_port): New, like scm_void_port but take mode
+       bits directly instead of C string.
+       (scm_void_port): Implement using above.
+       (scm_sys_make_void_port): Use scm_i_void_port together with
+       scm_i_mode_bits to avoid accessing internals of SCM string.
+       
+       * strings.h, strings.c (scm_i_get_substring_spec): New.
+
+       * socket.c, rw.c, deprecated.h, validate.h
+       (SCM_VALIDATE_STRING_COPY): Deprecated.  Replaced all uses with
+       SCM_VALIDATE_STRING plus SCM_I_STRING_CHARS or
+       scm_to_locale_string, etc.
+       (SCM_VALIDATE_SUBSTRING_SPEC_COPY): Deprecated.  Replaced as
+       above, plus scm_i_get_substring_spec.
+       
+       * regex-posix.c, read.c, random.c, ramap.c, print.c, numbers.c,
+       hash.c, gc.c, gc-card.c, convert.i.c, backtrace.c, strop.c,
+       strorder.c, strports.c, struct.c, symbols.c, unif.c, ports.c: Use
+       SCM_I_STRING_CHARS, SCM_I_STRING_UCHARS, and SCM_I_STRING_LENGTH
+       instead of SCM_STRING_CHARS, SCM_STRING_UCHARS, and
+       SCM_STRING_LENGTH, respectively.  Also, replaced scm_return_first
+       with more explicit scm_remember_upto_here_1, etc, or introduced
+       them in the first place.
+
+       * posix.c (WITH_STRING): New helper macro.  Use it where one
+       locale string is needed for a short piece of code.
+       (STRING_SYSCALL): New helper macro.  Use it instead of SCM_SYSCALL
+       when one locale string is needed.
+       (scm_mkstemp): Convert tmpl to a locale string.
+       (scm_putenv): Rewritten to use only C strings.
+       (scm_setlocale, scm_crpt): Convert argument strings to locale
+       strings.
+       
+2004-08-11  Marius Vollmer  <marius.vollmer@uni-dortmund.de>
+
+       * load.c (scm_primitive_load_path): Do not check for absolute
+       filenames when scm_sys_search_load_path returns false, which will
+       return absolute filenames unchanged.
+
+2004-08-11  Marius Vollmer  <mvo@zagadka.de>
+
+       * gc.c, procprop.c (scm_init_storage, scm_stand_in_procs,
+       scm_stand_in_proc): Use a hastable for scm_stand_in_procs instead
+       of an alist.  Thanks to Matthias Koeppe!
+
+2004-08-10  Marius Vollmer  <marius.vollmer@uni-dortmund.de>
+
+       * strings.h, deprecated.h (SCM_STRING_COERCE_0TERMINATION_X):
+       Moved from string.h to deprecated.h.
+
+       * deprecated.c, deprecated.h (SCM_CHARS, SCM_LENGTH): Removed.
+
+       * strings.h, strings.c (SCM_MAKE_STRING_TAG): Renamed to
+       SCM_I_MAKE_STRING_TAG, changed all uses.
+       (SCM_STRING_CHARS, SCM_STRING_UCHARS, SCM_STRING_LENGTH): Renamed
+       to SCM_I_STRING_CHARS, SCM_I_STRING_UCHARS, and SCM_I_LENGTH
+       respectively.  For a short time, the old names are still there as
+       aliases.  Not all uses have been changed yet, but the ones in
+       strings.c have.
+       (SCM_STRING_MAX_LEN): Do not hardcode to 24 bits, compute from
+       SCM_T_BITS_MAX.
+       (scm_is_string, scm_from_locale_string, scm_from_locale_stringn,
+       scm_take_locale_string, scm_take_locale_stringn,
+       scm_to_locale_string, scm_to_locale_stringn,
+       scm_to_locale_stringbuf): New.
+       (scm_c_string2str, scm_c_substring2str): Deprecated by moving to
+       deprecated.[hc]. Implemented in terms of the new functions above.
+       (scm_take_str, scm_take0str, scm_mem2string, scm_str2string,
+       scm_makfrom0str): Reimplemented in terms of the new functions from
+       above.  They will be discouraged shortly.
+       (scm_substring): Do not use scm_mem2string.
+       (scm_i_allocate_string_pointers, scm_i_free_string_pointers): New,
+       to replace similar code from posix.c, simpos.c, and dynl.c.
+       (scm_string_append): Use memcpy instead of explicit loop.  Do not
+       use register keyword.  Use plain 'char' instead of 'unsigned
+       char'.
+       
+       * strports.c (scm_mkstrport): Use SCM_I_STRING_UCHARS instead of
+       SCM_STRING_UCHARS.  Use SCM_I_STRINGP instead of SCM_STRINGP.
+
+       * strop.c (scm_i_index): Replaced SCM_STRINGP, SCM_STRING_CHARS,
+       and SCM_STRING_LENGTH with SCM_I_STRINGP, SCM_I_STRING_CHARS, and
+       SCM_I_STRING_LENGTH, respectively.  Pass string object directly,
+       not as a pointer.  Use scm_remember_upto_here_1 to protect it.
+
+       * read.c (scm_input_error): Use a SCM value for 'fn', not a C
+       string.  This avoids a conversion round-trip.
+
+       * gh_data.c: Replaced SCM_STRINGP, SCM_STRING_CHARS, and
+       SCM_STRING_LENGTH with SCM_I_STRINGP, SCM_I_STRING_CHARS, and
+       SCM_I_STRING_LENGTH, respectively.
+       (gh_scm2newstr): Implement in terms of scm_to_locale_string.
+       
+       * environments.c: Instead calling scm_puts on the SCM_STRING_CHARS
+       of a string, call scm_display on the string itself.
+
+       * dynwind.c, dynwind.h (scm_frame_free): New.
+
+       * stime.c, socket.c, simpos.c, procs.c, posix.c, ports.c,
+       net_db.c, fports.c, filesys.c, eval.c, deprecation.c, dynl.c:
+       Replaced uses of SCM_STRING_CHARS with proper uses of
+       scm_to_locale_string.  Replaced SCM_STRINGP with scm_is_string.
+       Replaced scm_mem2string with scm_from_locale_string.
+
+       * simpos.c, posix.c (allocate_string_pointers, environ_list_to_c):
+       Removed, replaced all uses with scm_i_allocate_string_pointers.
+
+       * load.h, load.c (scm_internal_parse_path): Removed.
+       (scm_parse_path): Use scm_string_split to do the work.
+       (scm_init_load_path): Use scm_parse_path instead of
+       scm_internal_parse_path.
+       (scm_search_path): Rewritten string handling part of the code in
+       terms of scm_to_locale_stringbuf and so that it is thread safe.
+
+       * error.c (scm_error_scm): Throw directly instead of calling
+       scm_error, this avoids the back and forth conversion of SUBR and
+       MESSAGE and also plugs a memory leak.
+       (scm_error): Call scm_error_scm.
+       
+       * backtrace.c: Replaced SCM_STRINGP with scm_is_string.
+       (display_header): Print FNAME when it is true, not
+       merely when it is a string.
+
+       * strings.h (SCM_SET_STRING_LENGTH, SCM_SET_STRING_CHARS): Removed
+       unceremoniously.  They were unused by Guile itself, and external
+       use should stop immediately.
+       
+
+2004-08-10  Marius Vollmer  <mvo@zagadka.de>
+
+       * numbers.h, number.c, deprecated.h, deprecated.c (scm_round,
+       scm_truncate): Renamed to scm_c_round and scm_c_truncate;
+       deprecated versions installed in deprecated.h and deprecated.c.
+       Changed all uses.
+       
+2004-08-06  Rob Browning  <rlb@defaultvalue.org>
+
+       * net_db.c (scm_resolv_error): don't cause an exception while
+       trying to throw an exception -- call scm_misc_error with correct
+       arguments.  The previous arguments needed a format escape that
+       wasn't in any of the format strings.
+
+2004-08-06  Kevin Ryde  <user42@zip.com.au>
+
+       * ramap.c (scm_array_fill_x): For byvect char fill, force signed char
+       so as not to depend on signedness of plain char.  For byvect range
+       check, throw out-of-range rather than wrong-type-arg.
+
+       * unif.c (scm_uniform_vector_ref, scm_array_set_x): For byvect, force
+       signed byte range checks by using scm_to_schar and scm_from_schar,
+       don't want to depend on signedness of C char.
+
+2004-08-05  Kevin Ryde  <user42@zip.com.au>
+
+       * arbiters.c (scm_try_arbiter): Use scm_i_misc_mutex instead of
+       SCM_DEFER_INTS.
+       (scm_release_arbiter): Use scm_i_misc_mutex so return value can be
+       guaranteed if multiple threads compete to unlock.
+       Update docstrings per doc/ref/api-scheduling.texi.
+
+       * filesys.c (scm_copy_file): Use fstat on the input fd rather than
+       stat on the filename, to be certain a file rename can't mean we get
+       info on one filesystem object but open another.  This fstat usage is
+       similar to Emacs copy-file.
+       
+       * posix.c (scm_setgroups): Enhance docstring, per doc/ref/posix.texi.
+
+       * simpos.c (scm_system_star): Change scm_from_long to scm_from_int on
+       SIGINT and SIGQUIT, since those values are ints.
+
+2004-08-03  Marius Vollmer  <marius.vollmer@uni-dortmund.de>
+
+       * num2integral.i.c, num2float.i.c: Removed.
+       * Makefile.am (noinst_HEADERS): Updated.
+
+       * numbers.h. numbers.c (scm_make_ratio): Renamed to
+       scm_i_make_ratio and made static, replaced uses with scm_divide.
+       (scm_complex_p): New, export as "complex?" to Scheme.
+       (scm_number_p): Export as "number?" to Scheme.
+       (scm_is_complex, scm_is_number): New.
+       (scm_c_make_rectangular, scm_c_make_polar): New.
+       (scm_make_rectangular, scm_make_polar): Use above.
+       (scm_c_real_part, scm_c_imag_part, scm_c_magnitude, scm_c_angle):
+       New.
+       (scm_make_complex): Discouraged by moving to discouraged.h and
+       discouraged.c.  Replaced all uses with scm_c_make_rectangular.
+       
+       * discouraged.h, discouraged.c, numbers.c, numbers.h
+       (scm_is_rational): New.
+       (scm_i_short2big, scm_i_int2big, scm_i_uint2big, scm_i_size2big,
+       scm_i_ptrdiff2big, scm_i_long_long2big, scm_i_ulong_long2big):
+       Removed prototypes.
+       (scm_make_real, scm_num2dbl, scm_float2num, scm_double2num):
+       Discouraged by moving to discouraged.h and discouraged.c.
+       Replaced all uses with scm_from_double.
+       (scm_num2float, scm_num2double): Discouraged by moving prototype
+       to discouraged.h and rewriting in terms of scm_to_double.
+       Replaced all uses with scm_to_double.
+       (scm_to_double): Do not implement in terms of scm_num2dbl, use
+       explicit code.
+       (scm_from_double): Do not implement in terms of scm_make_real, use
+       explicit code.
+       
+2004-08-02  Marius Vollmer  <marius.vollmer@uni-dortmund.de>
+
+       * init.c (scm_init_guile_1): Call scm_i_init_discouraged.
+
+       * gen-scmconfig.h.in (SCM_I_GSC_ENABLE_DISCOURAGED): New.
+       * gen-scmconfig.c (SCM_ENABLE_DISCOURAGED): Emit based on above.
+
+       * eval.c (SCM_EVALIM, SCM_EVALIM2, SCM_XEVAL, SCM_XEVALCAR):
+       Renamed to SCM_I_* in order to avoid collisions with the versions
+       defined in deprecated.h.
+
+       * discouraged.h, discouraged.c: New files.
+
+       * deprecated.h (SCM_FALSEP, SCM_NFALSEP, SCM_BOOLP, SCM_EQ_P,
+       SCM_NEGATE_BOOL, SCM_BOOL, SCM_BOOT_NOT): Promoted from being
+       deprecated to being discouraged by moving to discouraged.h.
+
+       * numbers.h, numbers.c, discouraged.h, discouraged.c
+       (scm_short2num, scm_ushort2num, scm_int2num, scm_uint2num,
+       scm_long2num, scm_ulong2num, scm_size2num, scm_ptrdiff2num,
+       scm_num2short, scm_num2ushort, scm_num2int, scm_num2uint,
+       scm_num2long, scm_num2ulong, scm_num2size, scm_num2ptrdiff,
+       scm_long_long2num, scm_ulong_long2num, scm_num2long_long,
+       scm_num2ulong_long): Discouraged by moving to discouraged.h and
+       discouraged.c and reimplementing in terms of scm_from_* and
+       scm_to_*.  Changed all uses to the new scm_from_* and scm_to_*
+       functions.
+
+       * numbers.h, numbers.c: Removed GUILE_DEBUG code.
+       (scm_i_short2big, scm_i_ushort2big, scm_i_int2big, scm_i_uint2big,
+       scm_i_size2big, scm_i_ptrdiff2big): Removed.
+       (scm_i_long2big, scm_i_ulong2big): New, explicit definitions.  
+       * conv-integer.i.c, conv-uinteger.i.c: Use them instead of
+       explicit code.
+
+2004-08-02  Kevin Ryde  <user42@zip.com.au>
+
+       * __scm.h (SCM_DEFER_INTS, SCM_ALLOW_INTS): Add comments about past
+       and current usage and migration.
+
 2004-07-31  Kevin Ryde  <user42@zip.com.au>
 
        * error.c (scm_strerror): Use scm_i_misc_mutex around strerror since