+2004-04-28 Kevin Ryde <user42@zip.com.au>
+
+ * backtrace.c (display_frame_expr), numbers.c (XDIGIT2UINT,
+ mem2uinteger, mem2decimal_from_point, mem2ureal): Cast char to int for
+ ctype.h tests, to avoid warnings from gcc on HP-UX about char as array
+ subscript. Reported by Andreas Vögele.
+ Also cast through unsigned char to avoid passing negatives to those
+ macros if input contains 8-bit values.
+
+ * num2integral.i.c (NUM2INTEGRAL): Under non-BIGMPZ_FITSP case,
+ corrections to range check for signed numbers. Remove
+ scm_remember_upto_here_1(num) from these checks, since num is used
+ subsequently anyway.
+
+ * num2integral.i.c (NUM2INTEGRAL): Test BIGMPZ_FITSP with "!= 0" to
+ avoid warning from gcc 3.4. Reported by Hyperdivision.
+
+ * numbers.c (scm_bit_extract): Use min instead of MIN.
+ (MIN): Remove, this conflicts with similar macro defined by limits.h
+ on HP-UX. Reported by Andreas Vögele.
+
+ * stime.c (_POSIX_C_SOURCE): Define to 199506L to get gmtime_r (in
+ particular on HP-UX). Reported by Andreas Vögele.
+
+ * threads.c (scm_threads_mark_stacks): Correction sizet -> size_t.
+ Reported by Andreas Vögele.
+
+ * threads-plugin.h (SCM_MUTEX_MAXSIZE): Increase to 25*sizeof(long),
+ for the benefit of hpux11 where pthread_mutex_t is 88 bytes. Reported
+ by Andreas Vögele.
+
+2004-04-22 Dirk Herrmann <dirk@dirk-herrmanns-seiten.de>
+
+ * eval.c (s_macro_keyword): New static identifier.
+
+ (scm_m_define): Change order to first create binding and
+ evaluating the expression afterwards.
+
+ (scm_m_set_x): Memoize complete set! expression. Only leave
+ symbols if no binding exists at memoization time. Throw error if
+ assigning to a syntactic keyword.
+
+ (lazy_memoize_variable): New function.
+
+ (CEVAL): When execution set!, perform lazy memoization if
+ unmemoized symbol is detected.
+
+ * modules.c (module_variable): Return variables with unbound
+ value.
+
+ * tags.h: Fix comment.
+
+2004-04-25 Kevin Ryde <user42@zip.com.au>
+
+ * chars.c (scm_char_upcase, scm_char_downcase, scm_c_upcase,
+ scm_c_downcase): Use ctype.h toupper and tolower. This will be useful
+ in 8-bit locales, and ensures consistency with char-upper-case? and
+ char-lower-case? which already use ctype.h.
+ (scm_c_upcase_table, scm_c_downcase_table, scm_lowers, scm_uppers):
+ Remove.
+ * chars.c, chars.h, init.c (scm_tables_prehistory): Remove.
+
+ * socket.c (VALIDATE_INET6): Correction to bignum_in_ipv6_range_p
+ call. Reported by Hyperdivision.
+
+ * threads.c (scm_yield): Correction, actually call scm_thread_yield.
+ Reported by Hyperdivision.
+
+ * unif.c (s_scm_make_uve): Remove unused local variable. Reported by
+ Hyperdivision.
+
+2004-04-22 Dirk Herrmann <dirk@dirk-herrmanns-seiten.de>
+
+ Hide the implementation of ilocs and isyms in eval.c.
+
+ * deprecated.h (SCM_IFRINC, SCM_ICDR, SCM_IFRAME, SCM_IDIST,
+ SCM_ICDRP), eval.c (SCM_IFRINC, SCM_ICDR, SCM_IFRAME, SCM_IDIST,
+ SCM_ICDRP), eval.h (SCM_ICDR, SCM_IFRINC, SCM_IFRAME, SCM_IDIST,
+ SCM_ICDRP): Deprecated and added to deprecated.h. Moved from
+ eval.h to eval.c.
+
+ * deprecated.c (scm_isymnames), deprecated.h (scm_isymnames,
+ SCM_ISYMNUM, SCM_ISYMCHARS), eval.c (SCM_ISYMNUM, isymnames,
+ scm_unmemocopy, CEVAL), print.c (scm_isymnames), tags.h
+ (SCM_ISYMNUM, scm_isymnames, SCM_ISYMCHARS): Deprecated
+ scm_isymnames, SCM_ISYMNUM and SCM_ISYMCHARS and added to
+ deprecated.[hc]. Moved scm_isymnames from print.c to eval.c and
+ renamed to isymnames. Moved SCM_ISYMNUM from tags.h to eval.c and
+ renamed to ISYMNUM.
+
+ * eval.c (scm_i_print_iloc, scm_i_print_isym), eval.h
+ (scm_i_print_iloc, scm_i_print_isym), print.c (scm_iprin1):
+ Extracted printing of ilocs and isyms to guile internal functions
+ scm_i_print_iloc, scm_i_print_isym of eval.c.
+
+2004-04-22 Kevin Ryde <user42@zip.com.au>
+
+ * numbers.c (scm_bit_extract): Use SCM_SRS for signed right shift.
+
+ * numbers.c (scm_round): Test for x already an integer, to avoid bad
+ rounding in x+0.5 when x is a big value already an integer. In
+ certain hardware rounding cases x+0.5 can give an adjacent integer,
+ leading to that as the result, when we really just wanted x itself.
+
+2004-04-19 Dirk Herrmann <dirk@dirk-herrmanns-seiten.de>
+
+ * eval.c (scm_unmemocopy): Fixed unmemoization of let*.
+
+ (deval_args, CEVAL): Minor improvements: Reduced variable scopes,
+ added const qualifiers, cast intentionally unused expressions to
+ void for emphasis, improved comment.
+
+2004-04-18 Dirk Herrmann <dirk@dirk-herrmanns-seiten.de>
+
+ * tags.h (scm_tags, scm_tc8_tags, scm_tc9_flag, scm_tc8_flag,
+ scm_tc8_isym): Renamed scm_tags to scm_tc8_tags. Renamed
+ scm_tc9_flag to scm_tc8_flag. Introduced new identifier
+ scm_tc8_isym. Defined tc8-tags relative to scm_tc3_imm24.
+ Defined the tc8-tag for flags to be 0x04, which will mean that
+ SCM_BOOL_F will also have the value 0x04 instead of 0x013c. Due
+ to the reduced number of bits and the simpler bit pattern for
+ SCM_BOOL_F, certain machines may be able to use more efficient
+ processor instructions to deal with SCM_BOOL_F.
+
+ (SCM_ITAG9, SCM_MAKE_ITAG9, SCM_ITAG9_DATA): Removed. These have
+ never been defined in a released version, thus no need to
+ deprecate them.
+
+ (SCM_IFLAGP, SCM_MAKIFLAG, SCM_IFLAGNUM): Flags now use tc8
+ instead of tc9 tags.
+
+ (SCM_ISYMP, SCM_MAKISYM, SCM_ISYMNUM): Isyms now use tc8 instead
+ of tc9 tags.
+
+ (SCM_MAKSPCSYM): Removed. It is almost impossible that user code
+ could have used this definition.
+
+ (SCM_IM_AND, SCM_IM_BEGIN, SCM_IM_CASE, SCM_IM_COND, SCM_IM_DO,
+ SCM_IM_IF, SCM_IM_LAMBDA, SCM_IM_LET, SCM_IM_LETSTAR,
+ SCM_IM_LETREC, SCM_IM_OR, SCM_IM_QUOTE, SCM_IM_SET_X): Now encoded
+ as isyms, as special isyms don't exist any more.
+
+2004-04-18 Kevin Ryde <user42@zip.com.au>
+
+ * filesys.c (scm_readdir): Use readdir_r when available, for thread
+ safety.
+
+ * numbers.c (scm_max, scm_min): For big/real, use SCM_SWAP rather than
+ explicit swapping code.
+
+2004-04-15 Kevin Ryde <user42@zip.com.au>
+
+ * cpp_sig_symbols.in: Add SIGSYS.
+
+ * list.c (scm_append_x): Use iterative style, to avoid non-tail
+ recursion.
+
+ * numbers.c (scm_max, scm_min): For inum/frac, frac/inum, big/frac,
+ frac/big and frac/frac, use scm_less_p for exact comparison.
+
+ * numbers.c (scm_gcd): For inum/big, use mpz_gcd_ui by sharing code
+ with big/inum.
+
+ * numbers.c (xisinf): Add a comment about solaris 7 lacking isinf.
+
+2004-04-06 Han-Wen Nienhuys <hanwen@xs4all.nl>
+
+ * inline.h (scm_cell): use SCM_GC_CELL_WORD for checking tag.
+
+ * chars.h (scm_init_chars): change scm_{upcase,downcase} to
+ scm_c_{up,down}case.
+ (SCM_MAKE_CHAR): add (unsigned char) cast. This prevents havoc
+ when hi-bit ASCII is subjected to SCM_MAKE_CHAR().
+
+2004-04-06 Kevin Ryde <user42@zip.com.au>
+
+ * numbers.c (scm_ash): Remove stray "}" in docstring.
+
+ * numbers.c (scm_make_ratio): For inum/bignum integer detection, use
+ x==SCM_MOST_NEGATIVE_FIXNUM explicitly, for clarity and to avoid
+ calling mpz_cmp_ui in most cases.
+
+ * numbers.c (scm_quotient, scm_remainder): In inum/big, use mpz_cmp_ui
+ for big == abs(most-negative-fixnum) special case.
+ (abs_most_negative_fixnum): Remove, no longer used.
+
+ * scmsigs.c (scm_sigaction_for_thread): Correction to signum range
+ test, avoids SCM_VECTOR_REF outside bounds of signal_handlers on
+ calling (sigaction NSIG).
+
+ * simpos.c (scm_system_star): Fix execargv memory leak, merge parent
+ and fork error cases to do this.
+
+2004-04-03 Dirk Herrmann <dirk@dirk-herrmanns-seiten.de>
+
+ * eval.c (CEVAL): Don't distinguish between short and long
+ instructions when dispatching - just always dispatch on the
+ instruction code, which is common for short and long instructions.
+ Further, removed unnecessary goto statements and added comment.
+
+2004-04-03 Dirk Herrmann <dirk@dirk-herrmanns-seiten.de>
+
+ * eval.c (scm_unmemocopy): Don't distinguish between short and
+ long instructions when dispatching - just always dispatch on the
+ instruction code, which is common for short and long instructions.
+ Further, removed unnecessary goto statements, fixed indentation
+ and replaced SCM_IMP predicates by SCM_NULLP.
+
+2004-04-03 Dirk Herrmann <dirk@dirk-herrmanns-seiten.de>
+
+ * eval.c (scm_lookupcar1, CEVAL): Use SCM_ILOCP instead of
+ comparison with SCM_ILOC00. In CEVAL, eliminate goto-label
+ 'checkmacro'.
+
+2004-03-31 Kevin Ryde <user42@zip.com.au>
+
+ * simpos.c: Include <signal.h> for SIG_IGN and friends.
+
+2004-03-29 Dirk Herrmann <dirk@dirk-herrmanns-seiten.de>
+
+ Introduce scm_debug_mode_p as a replacement for scm_debug_mode and
+ SCM_DEBUGGINGP:
+
+ * debug.h (scm_debug_mode_p, scm_debug_mode, SCM_DEBUGGINGP),
+ eval.c (scm_debug_mode_p): Deprecated scm_debug_mode and
+ SCM_DEBUGGINGP. Provided scm_debug_mode_p instead, to have one
+ single interface that also matches the naming conventions.
+ Probably scm_debug_mode_p should be part of the private interface
+ anyway.
+
+ * debug.h (scm_debug_mode_p), backtrace.c (display_error_body),
+ eval.c (SCM_APPLY, scm_trampoline_0, scm_trampoline_1,
+ scm_trampoline_2): Change uses of scm_debug_mode or SCM_DEBUGGINGP
+ to scm_debug_mode_p.
+
+
+ Deprecate direct access to scm_ceval, scm_deval and scm_ceval_ptr:
+
+ * eval.h (scm_ceval, scm_deval, scm_ceval_ptr), debug.h
+ (scm_ceval_ptr): Deprecated. Moved declaration of scm_ceval_ptr
+ from debug.h to eval.h.
+
+ * debug.h (SCM_RESET_DEBUG_MODE): Don't access scm_ceval_ptr any
+ more, just leave it with setting scm_debug_mode_p, which is
+ equivalent for practical purposes.
+
+ * deprecated.h (SCM_XEVAL, SCM_XEVALCAR): Call scm_i_eval_x
+ instead of *scm_ceval_ptr. Leave all evaluating to scm_i_eval_x.
+
+ * gdbint.c (gdb_eval): Call scm_i_eval_x instead of scm_ceval.
+
+ * eval.c (ceval, deval, scm_ceval, scm_deval): Made scm_ceval
+ static and renamed it to ceval throughout. Provide a new exported
+ but deprecated function scm_ceval as a wrapper for backwards
+ compatibility. The same is done for the deval/scm_deval pair of
+ functions.
+
+ * eval.c (CEVAL, SCM_CEVAL): Renamed SCM_CEVAL to CEVAL
+ throughout. Defined CEVAL to ceval or deval, based on compilation
+ phase.
+
+ * eval.c (SCM_XEVAL, SCM_XEVALCAR): Dispatch on scm_debug_mode_p
+ to ceval and deval instead of calling *scm_ceval_ptr.
+
+ * eval.c (dispatching_eval): New deprecated static function.
+
+ * eval.c (scm_ceval_ptr): Initialized to dispatching_eval in order
+ to emulate its old behaviour as closely as possible.
+
+
+ Change the evaluator such that only expressions for which pair? is
+ true are passed to CEVAL, and such that all other expressions are
+ evaluated outside of CEVAL:
+
+ * eval.c (EVAL): New, provided in analogy to EVALCAR. Evaluate an
+ expression that is assumed to be memoized already. All but
+ expressions of the form '(<form> <form> ...)' are evaluated inline
+ without calling an evaluator.
+
+ * eval.c (SCM_XEVAL, SCM_XEVALCAR, EVALCAR): Evaluate all but
+ expressions of the form '(<form> <form> ...)' inline without
+ calling an evaluator.
+
+ * eval.c (scm_i_eval_x, scm_i_eval, scm_ceval, scm_deval): Handle
+ the special case of unmemoized symbols passed on the top level.
+
+ * eval.c (CEVAL): Change calls to CEVAL to EVAL, except where it
+ is known that the expression passed to CEVAL is of the form
+ '(<form> <form> ...)'. Remove handling of the tc7-objects, since
+ now it is known that the input expression of CEVAL is a pair.
+
+2004-03-29 Dirk Herrmann <dirk@dirk-herrmanns-seiten.de>
+
+ * eval.c (is_self_quoting_p): New static function.
+
+ (scm_m_quote): Use is_self_quoting_p.
+
+ (copy_tree): Corrected typo in comment.
+
+2004-03-28 Han-Wen Nienhuys <hanwen@xs4all.nl>
+
+ * eval.c (s_scm_copy_tree): idem.
+
+ * list.c (s_scm_filter): remove "pointer" from doc string.
+
+ * gc.h (SCM_GC_CELL_TYPE): SCM_GC_CELL_TYPE uses SCM_GC_CELL_OBJECT.
+
+ * goops.h (SCM_NUMBER_OF_SLOTS): don't SCM_UNPACK the result.
+
+ * backtrace.c ("display_backtrace_body"): SCM_PACK before SCM_EQ_P
+ (display_frame): idem.
+ (display_backtrace_file_and_line): idem.
+
+ * tags.h (SCM_UNPACK): stricter typechecking on SCM_UNPACK
+ arguments.
+
+2004-03-26 Kevin Ryde <user42@zip.com.au>
+
+ * filesys.c (scm_getcwd, scm_readlink): Avoid memory leak on errors.
+
+ * numbers.c (scm_modulo): For inum/big and big/big, remove test of
+ big==0 since that never occurs.
+
+ * numbers.c, numbers.h (scm_modulo_expt): Renamed from
+ scm_modular_expt, matching scheme level name `modulo-expt'.
+
+ * numbers.c (scm_modular_expt): Return a negative remainder for a
+ negative divisor, the same as `modulo' does.
+
+2004-03-26 Eric Hanchrow <offby1@blarg.net>
+
+ * numbers.c, numbers.h (scm_modular_expt): New function.
+
+2004-03-25 Kevin Ryde <user42@zip.com.au>
+
+ * numbers.c (scm_min, scm_max): Correction to big/real and real/big,
+ return inexact as required by r5rs.
+
+2004-03-24 Dirk Herrmann <dirk@dirk-herrmanns-seiten.de>
+
+ * eval.c: Separated some definitions relevant for execution from
+ the memoization part of the file.
+
+ (copy_tree): New static function
+
+ (scm_copy_tree): Rewritten to fix two kinds or bugs: First, cyclic
+ structures are detected now and will lead to an exception instead
+ of forcing guile to run in an endless loop, using up all the
+ system's memory. Second, arrays in the cdr of an improper list
+ are now copied. See the new test cases in eval.test.
+
+2004-03-24 Dirk Herrmann <dirk@dirk-herrmanns-seiten.de>
+
+ * posix.c (scm_gethostname): Make sure len is initialised before
+ it is used. Restructured to (hopefully) represent possible
+ configurations more clearly in the code. Added unwind handler.
+
+2004-03-23 Kevin Ryde <user42@zip.com.au>
+
+ * posix.c (scm_gethostname): Use sysconf(_SC_HOST_NAME_MAX) and/or
+ MAXHOSTNAMELEN when available.
+
+2004-03-21 Marius Vollmer <mvo@zagadka.de>
+
+ * read.c (skip_scsh_block_comment): Also recognize '\r' as a line
+ terminator. Rewritten the logic as a state machine, I must have
+ been doing too much VHDL lately...
+
+ * eval.c (scm_ceval, scm_deval): Explicitely evaluate ports to
+ themselves. Thanks to Han-Wen Nienhuys!
+
+ * list.c: Changed docstrings so that they no longer talk about
+ returning 'pointers' to something.
+
+2004-03-20 Han-Wen Nienhuys <hanwen@xs4all.nl>
+
+ * gc.c: remove set_debug_cell_accesses! when
+ SCM_DEBUG_CELL_ACCESSES is not defined. Scheme source code should
+ use (if (defined? 'set-debug-cell-accesses!) .. ) to switch on
+ debugging conditionally.
+
+2004-03-21 Kevin Ryde <user42@zip.com.au>
+
+ * stime.c (scm_gmtime): Use gmtime_r when available, for thread safety.
+
+2004-03-20 Kevin Ryde <user42@zip.com.au>
+
+ * posix.c (scm_gethostname): Preserve errno across free() call.
+
+2004-03-18 Han-Wen Nienhuys <hanwen@xs4all.nl>
+
+ * gc-card.c (sweep_card): use SCM_GC_SET_CELL_WORD for setting
+ free cells.
+
+2004-03-14 Kevin Ryde <user42@zip.com.au>
+
+ * stime.c: Define _GNU_SOURCE for strptime prototype from glibc.
+ (strptime): Use HAVE_DECL_STRPTIME for when to give own prototype.
+
+2004-03-07 Kevin Ryde <user42@zip.com.au>
+
+ * stime.c (scm_gmtime): Return bd_time->tm_zone when available, rather
+ than "GMT" always.
+ (filltime): Make zname parameter "const".
+
+2004-03-03 Mikael Djurfeldt <mdj@chunk.mit.edu>
+
+ * threads.c, threads.h (scm_c_scm2thread): New function.
+
+2004-02-29 Kevin Ryde <user42@zip.com.au>
+
+ * numbers.c (guile_ieee_init): Use C99 INFINITY and NAN when
+ available. Test HAVE_DINFINITY and HAVE_DQNAN for those globals, in
+ particular don't assume "defined (__alpha__) && ! defined (linux)"
+ means OSF. Remove "SCO" code, which was not really SCO specific and
+ which John W. Eaton advises should be long past being needed.
+
+ * posix.c (scm_execl, scm_execlp, scm_execle): Avoid memory leak under
+ error throw.
+
+2004-02-24 Kevin Ryde <user42@zip.com.au>
+
+ * posix.c (scm_cuserid): Use a private result buffer, for thread safe.
+
+2004-02-22 Kevin Ryde <user42@zip.com.au>
+
+ * numbers.c (scm_max, scm_min): For one arg, dispatch to generic for
+ complex, same as for two args. (Handle only inum, big, real, frac).
+
+2004-02-21 Kevin Ryde <user42@zip.com.au>
+
+ * posix.c (scm_crypt): Use new HAVE_CRYPT.
+ (<crypt.h>): Remove HAVE_LIBCRYPT condition.
+ Reported by Andreas Voegele.
+
+2004-02-20 Neil Jerram <neil@ossau.uklinux.net>
+
+ * list.c (scm_list_n): Add #if SCM_DEBUG_CELL_ACCESSES_P around
+ validation.
+
+ * read.c (scm_lreadparen): Removed.
+ (scm_lreadparen1): Renamed scm_i_lreadparen.
+
+2004-02-20 Han-Wen Nienhuys <hanwen@xs4all.nl>
+
+ * list.c (scm_list_n): validate non-immediate arguments;
+ this will catch forgotten a SCM_UNDEFINED.
+
+2004-02-18 Marius Vollmer <mvo@zagadka.de>
+
+ * gc.h (scm_gc_cells_collected): Removed duplicated declaration.
+ Thanks to Bill Schottstaedt!
+
+ * socket.h (scm_gethost): Removed prototype it is already in
+ "net_db.h". Thanks to Bill Schottstaedt!
+
+2004-02-18 Kevin Ryde <user42@zip.com.au>
+
+ * num2integral.i.c (INTEGRAL2BIG): WORDS_BIGENDIAN not right for word
+ order parameter to mpz_import, in fact with just one word there's no
+ order to worry about at all.
+
+ * numbers.c (scm_num_eq_p): For real==frac, complex==frac, frac==real
+ and frac==complex, make an exact comparison rather than converting
+ with fraction2double.
+
+ * posix.c, putenv.c, stime.c (environ): Use _NSGetEnviron in Darwin
+ shared library, since environ is not directly available there.
+
+ * script.c (scm_shell_usage): Print to stdout for --help, per GNU
+ standard.
+
+ * stime.c (scm_localtime, scm_gmtime, scm_mktime): Provide a default
+ errno EINVAL in case localtime and gmtime don't set it.
+ (scm_mktime, scm_strptime): Forcibly use errno EINVAL for our
+ SCM_SYSERROR, since mktime and strptime generally don't set errno.
+
+2004-02-16 Kevin Ryde <kevin@swox.se>
+
+ * gc-malloc.c (scm_done_malloc, scm_done_free): Allow negative sizes,
+ which were permitted in the past for these.
+
+ * num2float.i.c (NUM2FLOAT): Expand isfinite to !xisinf, as per
+ previous change to numbers.c.
+
+ * script.c (scm_shell_usage): Print bug-guile email address, as per
+ GNU standard. Reported by Han-Wen Nienhuys.
+
+2004-02-13 Mikael Djurfeldt <djurfeldt@nada.kth.se>
+
+ * unif.c (scm_make_uve): Removed local variable and simplified
+ code in order to avoid compiler used uninitialized warnings.
+
+ * hashtab.c, hashtab.h (scm_hash_map_to_list): Renamed from
+ scm_hash_map.
+ (scm_hash_fold): Use scm_call_3 directly in the call to
+ scm_internal_hash_fold instead of going via fold_proc (which is
+ now removed).
+ (scm_hash_for_each): Use a trampoline +
+ scm_internal_hash_for_each_handle.
+ (scm_internal_hash_for_each_handle, scm_hash_for_each_handle): New
+ functions.
+
+2004-02-12 Kevin Ryde <user42@zip.com.au>
+
+ * ports.c (scm_port_line): In docstring, note first line is 0.
+ (scm_set_port_line_x): In docstring, note first line is 0.
+ (scm_port_column): In docstring, there's no default to current input
+ port, and remove shared port-line @defun.
+ (scm_set_port_column_x): In docstring, there's no default to current
+ input port, note first column is 0, remove shared set-port-line!
+ @defun.
+
+ * ramap.c (scm_array_fill_x): For fvect and dvect, use scm_num2dbl to
+ convert args the same way that array-set! does.
+
+ * unif.c (scm_make_uve, scm_array_p): Allow fraction 1/3 as prototype
+ for dvect.
+ (scm_array_p): Add missing "break"s in switch, fix llvect test look
+ for "l" not "s", fix dvect to be false for singp(prot) since such a
+ value is for fvect.
+ (scm_array_prototype): Return 1/3 for dvect, rather than 0.33..33.
+ (exactly_one_third): New variable.
+ (scm_init_unif): Initialize it.
+
+2004-02-10 Neil Jerram <neil@ossau.uklinux.net>
+
+ * read.c (scm_read_opts): Change `escaped-parens' to
+ `elisp-strings'.
+
+2004-02-08 Neil Jerram <neil@ossau.uklinux.net>
+
+ * read.c (scm_read_opts): New opts `elisp-vectors' and
+ `escaped-parens'.
+ (s_vector): New.
+ (scm_lreadr): Use scm_lreadparen1 instead of scm_lreadparen. Make
+ handling of elisp vector syntax dependent on SCM_ENABLE_ELISP and
+ `elisp-vectors' option instead of SCM_ELISP_READ_EXTENSIONS.
+ Allow "\(" and "\)" in strings when SCM_ENABLE_ELISP defined and
+ `escaped-parens' option set.
+ (scm_read_token): If elisp vector syntax active, disallow [ and ]
+ in tokens.
+ (scm_lreadparen): Rewrite as interface to scm_lreadparen1.
+ (scm_lreadparen1): New.
+
+ * read.h: Remove conditionally compiled last arg to
+ scm_lreadparen.
+ (SCM_ELISP_VECTORS_P, SCM_ESCAPED_PARENS_P): New.
+
+2004-01-23 Han-Wen Nienhuys <hanwen@xs4all.nl>
+
+ * eval.c (m_expand_body): remove stray variable new_body.
+
+2004-01-22 Marius Vollmer <mvo@zagadka.de>
+
+ * eval.c (m_expand_body): Rewrite the expression in place (by
+ overwriting FORMS) also when a letrec is constructed, not only
+ when no definitions are found. Do not return rewritten expression
+ to emphasize the in-place rewriting. Changed all users.
+
+2004-01-19 Han-Wen Nienhuys <hanwen@xs4all.nl>
+
+ * gc.c: add protected_object_count, a number that is dumped from
+ gc_stats()
+
+2004-01-11 Marius Vollmer <mvo@zagadka.de>
+
+ * dynwind.h, dynwind.c (scm_frame_unwind,
+ scm_frame_unwind_handler): Renamed and changed all uses.
+ (scm_frame_rewind, scm_frame_rewind_handler): Likewise.
+
+2004-01-11 Kevin Ryde <user42@zip.com.au>
+
+ * unif.c (scm_bit_count, scm_bit_position, s_scm_bit_set_star_x,
+ s_scm_bit_count_star, s_scm_bit_invert_x): Clarify docstrings, as per
+ changes made to scheme-compound.texi.
+
+2004-01-10 Marius Vollmer <mvo@zagadka.de>
+
+ * print.c (scm_print_symbol_name): Handle #{`foo}#, #{,foo}#,
+ #{.}#, and all numeric strings specially. Thanks to Paul Jarc!
+
+ * guile-snarf.in: Use mkdir to create a unique temporary directory
+ that we can safely use. Thanks to Stefan Nordhausen!
+
+2004-01-07 Marius Vollmer <marius.vollmer@uni-dortmund.de>
+
+ * dynwind.h, dynwind.c (scm_i_dowinds): Removed 'explicit'
+ argument since it is always zero now. Changed all callers.
+ Removed code for handling fluids.
+
+ * fluids.c (scm_c_with_fluids): Use frames instead of adding to
+ the wind chain explicitely. Use scm_c_with_fluid for the common
+ case of only one fluid.
+ (scm_with_fluid): New.
+ (scm_c_with_fluid): Use frames instead of scm_c_with_fluids.
+
+ * fluids.h, fluids.c (scm_frame_fluid): New.
+ (scm_with_fluid): New.
+ (scm_i_swap_fluids, scm_i_swap_fluids_reverse): Removed.
+
+ * dynwind.c (scm_frame_end): Do not use scm_i_dowinds. Instead,
+ do the unwinding directly. It is simple enough.
+
+ * dynwind.h, dynwind.c: Did the following renamings:
+ scm_begin_frame -> scm_frame_begin,
+ scm_end_frame -> scm_frame_end,
+ scm_on_unwind -> scm_frame_unwind,
+ scm_on_rewind -> scm_frame_rewind,
+ scm_on_unwind_with_scm -> scm_frame_unwind_with_scm,
+ scm_on_rewind_with_scm -> scm_frame_rewind_with_scm.
+ Changed all uses.
+
+ * aync.h, async.c: Did the follwing renamings:
+ scm_with_blocked_asyncs -> scm_frame_block_asyncs,
+ scm_with_unblocked_asyncs -> scm_frame_unblock_asyncs.
+ Changed all uses.
+
+ * ports.h, ports.c: Did the follwing renamings:
+ scm_with_current_input_port -> scm_frame_current_input_port,
+ scm_with_current_output_port -> scm_frame_current_output_port,
+ scm_with_current_error_port -> scm_frame_current_error_port.
+ Changed all uses.
+
+2004-01-07 Kevin Ryde <user42@zip.com.au>
+
+ * numbers.c (s_bignum): Remove, not used since gmp bignums.
+ Reported by Richard Todd.
+
+ * threads-plugin.h (SCM_MUTEX_MAXSIZE): Increase to 12*sizeof(long),
+ for the benefit of powerpc-apple-darwin5.5. Reported by Richard Todd.
+
+ * unif.c (scm_aind): Test SCM_CONSP rather than !SCM_NULLP while
+ traversing the args list, fixes segv if an improper list is given.
+ Reported by Rouben Rostamian.
+
+2004-01-06 Marius Vollmer <marius.vollmer@uni-dortmund.de>
+
+ * ports.c (swap_ports, scm_with_current_foo_port): Do not allocate
+ swap_data on stack, use a 'malloc obj'.
+
+ * fluids.h, fluids.c (scm_make_initial_fluids, scm_copy_fluids,
+ scm_swap_fluids, scm_swap_fluids_reverse): Renamed to
+ scm_i_... since they are internal. Changed all uses.
+
+ * dynwind.c (frame_print): Removed, use the default printer.
+ (WINDER_F_MARK, WINDER_MARK_P, winder_mark): New.
+ (scm_on_unwind_with_scm, scm_on_rewind_with_scm): New. Use above
+ to protect SCM values.
+
+ * dynwind.h (SCM_F_WIND_EXPLICITELY,
+ SCM_F_WIND_EXPLICITLY): It's "explicitly" not "explicitely", damn.
+ Changed all uses.
+ (scm_on_unwind_with_scm, scm_on_rewind_with_scm): New.
+
+2004-01-05 Marius Vollmer <mvo@zagadka.de>
+
+ * ports.h, ports.c (scm_with_current_input_port,
+ scm_with_current_output_port, scm_with_current_error_port): New.
+
+ * async.h, async.c (scm_with_blocked_asyncs,
+ scm_with_unblocked_asyncs): New.
+
+2004-01-03 Marius Vollmer <mvo@zagadka.de>
+
+ * dynwind.h, scm_dynwind.c (scm_t_frame_flags, scm_t_wind_flags,
+ scm_begin_frame, scm_end_frame, scm_on_unwind, scm_on_rewind):
+ New.
+ (scm_dowinds, scm_i_dowinds): scm_dowinds has been renamed to
+ scm_i_dowinds and extended to handle frames and to invoke a 'turn'
+ function when the outermost wind point has been reached. The
+ latter is used to copy a continuation stack at the right time.
+ scm_dowinds remains available.
+ (SCM_GUARDSP, SCM_BEFORE_GUARD, SCM_AFTER_GUARD, SCM_GUARD_DATA,
+ tc16_guard, guards_print): Removed.
+ (scm_internal_dynamic_wind): Reimplemented using frames.
+
+ * continuations.c (copy_stack): New, do only the stack copying
+ part of copy_stack_and_call.
+ (copy_stack_and_call): Copy the stack after unwinding and before
+ rewinding.
+ (scm_dynthrow): Do not call scm_dowinds, this is now done by
+ copy_stack_and_call.
+
+2004-01-04 Kevin Ryde <user42@zip.com.au>
+
+ * numbers.c (scm_less_p): Don't convert frac to float for compares,
+ can give bad results due to rounding.
+
+ * stime.c (scm_current_time, scm_gettimeofday): Add a comment about
+ setzone/restorezone protection for DOS.
+
+2003-12-26 Marius Vollmer <mvo@zagadka.de>
+
+ * gen-scmconfig.h.in, gen-scmconfig.c: Arrange for scm_t_intmax
+ and scm_t_uintmax to be defined in scmconfig.h
+
+2003-12-03 Kevin Ryde <user42@zip.com.au>
+
+ * numbers.c (scm_less_p): Remove spurious xisnan from frac+big case.
+
+ * numbers.c (scm_make_ratio): Check for numerator equal to
+ SCM_MOST_NEGATIVE_FIXNUM and bignum denominator the negative of that,
+ giving integer -1.
+
+ * numbers.c (scm_real_part): Return fraction unchanged rather than
+ converting to flonum.
+
+2003-11-30 Dirk Herrmann <D.Herrmann@tu-bs.de>
+
+ * modules.c (module_variable): Fixed (and thus simplified) the
+ definition of SCM_BOUND_THING_P to reflect the fact that since
+ after the 1.4 series of guile, obarrays only hold variable
+ objects.
+
+2003-11-30 Marius Vollmer <mvo@zagadka.de>
+
+ * numbers.c (scm_logand): It's "#b...", not "#\b...".
+
+ From Paul Jarc:
+
+ * read.c (scm_lreadr): Signal an error for invalid escape
+ sequences in strings. Code cleanups too.
+
+ * print.c (scm_iprin1): use \xNN hexadecimal sequences when
+ writing control characters in strings.
+
+2003-11-21 Marius Vollmer <mvo@zagadka.de>
+
+ * ports.c (scm_drain_input): Bug fix: only access the port after
+ checking that it indeed is one.
+
+2003-11-22 Dirk Herrmann <D.Herrmann@tu-bs.de>
+
+ * eval.c (s_bad_define): New static identifier.
+
+ (m_body): Fixed comment.
+
+ (scm_m_define): Don't generate memoized code for definitions that
+ are not on the top level. As a consequence, no memoized code at
+ all is generated for definitions any more: Top level definitions
+ are executed immediately during memoization and internal
+ definitions are handled separately in m_expand_body.
+
+ (scm_unmemocopy, unmemocopy): Removed code for unmemoizing
+ definitions. Consequently, there is no unmemoizing code any more
+ that might modify the environment. Thus, the old scm_unmemocopy
+ is removed and the old unmemocopy is renamed to scm_unmemocopy.
+
+ (SCM_CEVAL): The SCM_IM_DEFINE keyword can no longer occur in
+ memoized code. Call EVALCAR for continuations. Prefer !SCM_NULLP
+ over SCM_NIMP in places, where the argument is known to be part of
+ a proper list.
+
+2003-11-21 Kevin Ryde <user42@zip.com.au>
+
+ * numbers.c (scm_abs): Allocate a new real only for negatives, as done
+ for bignums.
+
+ * numbers.c (scm_bit_extract): Use mpz functions, rearrange inum case
+ to share some shifting.
+
+ * numbers.c (scm_integer_expt): Don't mpz_init after scm_i_clonebig or
+ scm_i_mkbig, since they do so already. Don't mpz_clear a bignum SCM,
+ since gc does this.
+
+2003-11-19 Marius Vollmer <mvo@zagadka.de>
+
+ * numbers.c (scm_make_ratio): Rewritten to have a simpler
+ structure. Previously, not all cases with a negative denominator
+ were covered.
+
+ * numbers.c (mem2decimal_from_point): use scm_divide instead of
+ scm_divide2real when forming the fractional part. This allows
+ "#e1.2" to yield 6/5.
+
+ * numbers.c (scm_i_fraction_equalp): Do not treat the return value
+ of scm_equal_p as a C boolean, use SCM_FALSEP. Previously, all
+ fractions were equal to each other regardless of value. Ooops.
+
+ * numbers.c (scm_rationalize): Return an inexact result when given
+ inexact arguments.
+
+ * numbers.c (scm_exact_p, scm_inexact_p): Throw error for
+ non-numbers.
+
+2003-11-18 Marius Vollmer <marius.vollmer@uni-dortmund.de>
+
+ Support for exact fractions from Bill Schottstaedt! Thanks!
+
+ * print.c (scm_iprin1): Handle fractions.
+
+ * objects.h (scm_class_fraction): New.
+ * objects.c (scm_class_fraction): New.
+ (scm_class_of): Handle fractions.
+
+ * hash.c (scm_hasher): Handle fractions.
+
+ * numbers.c: New code for handling fraction all over the place.
+ (scm_odd_p, scm_even_p): Handle inexact integers.
+ (scm_rational_p): New function, same as scm_real_p.
+ (scm_round_number, scm_truncate_number, scm_ceiling, scm_floor):
+ New exact functions that replace the inexact 'dsubr'
+ implementations.
+ (scm_numerator, scm_denominator): New.
+
+ * numbers.h (SCM_NUMP): Recognize fractions.
+ (SCM_FRACTIONP, SCM_SLOPPY_FRACTIONP, SCM_FRACTION_NUMERATOR,
+ SCM_FRACTION_DENOMINATOR, SCM_FRACTION_SET_NUMERATOR,
+ SCM_FRACTION_SET_DENOMINATOR, SCM_FRACTION_REDUCED_BIT,
+ SCM_FRACTION_REDUCED_SET, SCM_FRACTION_REDUCED_CLEAR,
+ SCM_FRACTION_REDUCED): New.
+ (scm_floor, scm_ceiling, scm_truncate_number, scm_round_number):
+ New prototypes.
+ (scm_make_ratio, scm_rationalize, scm_numerator, scm_denominator,
+ scm_rational_p): New prototypes.
+ (scm_i_dbl2num, scm_i_fraction2double, scm_i_fraction_equalp,
+ scm_i_print_fraction): New prototypes.
+
+ * goops.c (create_standard_classes): Create "<fraction>" class.
+
+ * gc-mark.c (scm_gc_mark_dependencies): Handle fractions.
+
+ * gc-card.c (scm_i_sweep_card): Include scm_tc16_fraction as a
+ case in the switch, but do nothing for now.
+
+ * eval.c (SCM_CEVAL, SCM_APPLY, call_dsubr_1): Convert fractions
+ to doubles when calling 'dsubr' functions.
+
+ * eq.c (scm_eqv_p, scm_equal_p): Handle fractions.
+
+2003-11-18 Rob Browning <rlb@defaultvalue.org>
+
+ * gen-scmconfig.c (main): remove public definition of
+ SCM_SIZEOF___INT64 and SCM_SIZEOF_UNSIGNED___INT64 and add
+ direct typedef of long_long and ulong_long inside deprecated block
+ when appropriate.
+
+ * deprecated.h: move long_long and ulong_long definitions to
+ gen-scmconfig.c so that we don't need to add SCM_SIZEOF___INT64
+ and SCM_SIZEOF_UNSIGNED___INT64 to the public namespace.
+
+2003-11-17 Marius Vollmer <mvo@zagadka.de>
+
+ * hash.c (scm_string_hash): New hashing algorithm that takes the
+ complete string into account.
+
+ * eval.c (scm_m_generalized_set_x): Macroexpand the target when it
+ is a list. This allows (@ ...) to work with set!.
+ (scm_m_generalized_set_x): Use ASSERT_SYNTAX_2 instead of
+ SCM_ASSYNT.
+
+ * script.c (scm_compile_shell_switches): Use scm_c_read_string for
+ the "-e" option instead of scm_str2symbol. This allows things
+ like (@ ...) to be specified for the entry point.
+
+2003-11-16 Dirk Herrmann <D.Herrmann@tu-bs.de>
+
+ * eval.c (scm_m_letstar): Create memoized code in place to
+ minimize consing.
+
+2003-11-16 Dirk Herrmann <D.Herrmann@tu-bs.de>
+
+ * eval.c (s_splicing): Commented and reformulated.
+
+ (lookup_global_symbol, lookup_symbol): New static functions.
+
+ (s_test, s_bindings, s_duplicate_bindings, s_variable): Removed.
+
+ (try_macro_lookup, literal_p): Use lookup_symbol instead of
+ creating a temporary pair for scm_lookupcar.
+
+ (scm_unmemocar, unmemocar): Renamed scm_unmemocar to unmemocar,
+ created deprecated wrapper function scm_unmemocar.
+
+ (SCM_VALIDATE_NON_EMPTY_COMBINATION, scm_sym_else,
+ scm_sym_unquote, scm_sym_uq_splicing, scm_sym_enter_frame,
+ scm_sym_apply_frame, scm_sym_exit_frame, scm_sym_trace, f_apply,
+ undefineds, sym_three_question_marks): Moved around without
+ modifications.
+
+ * eval.c, eval.h (scm_macroexp, scm_unmemocar): Deprecated.
+
+2003-11-15 Dirk Herrmann <D.Herrmann@tu-bs.de>
+
+ * eval.c (try_macro_lookup, expand_user_macros, is_system_macro_p,
+ m_expand_body, scm_m_expand_body): Grouped together with m_body.
+ No further modifications.
+
+2003-11-15 Dirk Herrmann <D.Herrmann@tu-bs.de>
+
+ * eval.c (s_mixed_body_forms): New static identifier.
+
+ (canonicalize_define, scm_m_define): The check for a bad
+ expression is performed in canonicalize_define now.
+
+ (try_macro_lookup, expand_user_macros, is_system_macro_p): New
+ static helper functions for m_expand_body.
+
+ (m_expand_body): Use ASSERT_SYNTAX to signal syntax errors. Only
+ expand user defined macros. Fixed handling of the definition/
+ expression boundary. Fixed handling of definitions grouped with
+ 'begin. Use canonicalize_define to expand definitions.
+
2003-11-13 Marius Vollmer <mvo@zagadka.de>
+ * read.c (scm_lreadr): detect EOF after backslash, and interpret
+ \xNN hexadecimal sequences. From Paul Jarc, thanks!
+
* snarf.h (SCM_SMOB, SCM_GLOBAL_SMOB, SCM_SMOB_MARK,
SCM_GLOBAL_SMOB_MARK, SCM_SMOB_FREE, SCM_GLOBAL_SMOB_FREE,
SCM_SMOB_PRINT, SCM_GLOBAL_SMOB_PRINT, SCM_SMOB_EQUALP,