+2005-03-09 Marius Vollmer <mvo@zagadka.de>
+
+ * script.c (scm_compile_shell_switches): Added 2005 to Copyright
+ years.
+
+2005-03-09 Marius Vollmer <marius.vollmer@uni-dortmund.de>
+
+ * gc-card.c (scm_i_sweep_card): Do not increase/decrease
+ scm_gc_running_p. Sweeping can happen in parallel with
+ allocation.
+
+ * inline.h: Updated comments for current threading implementation.
+
+ * threads.h, threads.c (scm_i_frame_single_threaded): Removed.
+ (scm_i_thread): Removed unused signal_asyncs field.
+ (threads_mark): Do not mark it.
+ (guilify_self_1): Do not initialize it. Do initialize
+ continuation_root field.
+ (do_thread_exit): Do not remove thread from all_threads list.
+ (on_thread_exit): Do it here, after leaving guile mode.
+ (sleep_level): Removed.
+ (scm_i_thread_put_to_sleep): Leave thread_admin_mutex locked when
+ returning. Do not support recursive sleeps.
+ (scm_i_thread_wake_up): Expect thread_admin_mutex to be locked on
+ entry. Do not support recursive sleeps.
+
+ * fluids.c (ensure_state_size, ensure_all_state_sizes,
+ resize_all_states): Collapsed ensure_state_size and
+ ensure_all_state_sizes into one function named resize_all_states.
+ Allocate new vectors outside of single threaded region. Do only
+ simple things inside that region.
+ (scm_make_fluid, scm_make_dynamic_state): Lock fluid_admin_mutex
+ while adding to the global lists.
+
+
+2005-03-08 Marius Vollmer <mvo@zagadka.de>
+
+ libltdl is no longer distributed. We expect it to be installed
+ already.
+
+ * Makefile.am (INCLUDES): Removed @LTDLINCL@.
+ (libguile_la_LIBADD): Removed @LIBLTDL@.
+
+2005-03-07 Marius Vollmer <mvo@zagadka.de>
+
+ * threads.h, async.h, threads.c (SCM_CRITICAL_SECTION_START,
+ SCM_CRITICAL_SECTION_END): Moved here from threads.h since now
+ they also block/unblock execution of asyncs and call
+ scm_async_click which is declared in async.h but threads.h can not
+ include async.h since async.h already includes threads.h.
+ (scm_i_critical_section_level): New, for checking mistakes in the
+ use of the SCM_CRITICAL_SECTION_* macros.
+ (scm_i_critical_section_mutex): Make it a recursive mutex so that
+ critical sections can be nested.
+
+ * throw.c (scm_ithrow): Abort when scm_i_critical_section_level is
+ not zero.
+
+ * threads.h, threads.c (scm_frame_lock_mutex): New.
+ (scm_frame_critical_section): Take mutex as argument.
+ (framed_critical_section_mutex): New, used as default for above.
+ (scm_init_threads): Initialize it.
+ (scm_threads_prehistory): Do not initialize thread_admin_mutex and
+ scm_i_critical_section_mutex; both are initialized statically.
+
+ * continuation.c, deprecated.c, goops.c, guardians.c keywords.c,
+ libguile_la-arrays.loT, objprop.c, ports.c, smob.c, sort.s,
+ srcprop.c, stime.c, struct.c, throw.c, regex-posix.c: Include
+ "libguile/async.h" for SCM_CRITICAL_SECTION_START/END.
+
+ * debug.c (scm_debug_options): Replace
+ SCM_CRITICAL_SECTION_START/END with a frame and
+ scm_frame_critical_section.
+
+ * continuations.c (scm_make_continuation): No longer a critical
+ section.
+ (scm_dynthrow): Abort when scm_i_critical_section_level is
+ not zero.
+
+2005-03-04 Marius Vollmer <marius.vollmer@uni-dortmund.de>
+
+ * threads.c (scm_try_mutex): Renamed argument for consistency.
+
+ * root.c (scm_call_with_dynamic_root): New docstring.
+
+ * eval.c: Define _GNU_SOURCE.
+
+2005-03-02 Marius Vollmer <marius.vollmer@uni-dortmund.de>
+
+ Big merge from the mvo-thread-cleanup branch. The main changes
+ are:
+
+ - The dynamic roots functionality has been split into dynamic
+ states and continuations barriers. Fluids have been
+ reimplemented and can now be garbage collected.
+
+ - Initialization of Guile now works in a multi-thread friendly
+ manner. Threads can freely enter and leave guile mode.
+
+ - Blocking on mutexes or condition variables or while selecting
+ can now be reliably interrupted via system asyncs.
+
+ - The low-level threading interface has been removed.
+
+ - Signals are delivered via a pipe to a dedicated 'signal delivery
+ thread'.
+
+ - SCM_DEFER_INTS, SCM_ALLOW_INTS etc have been deprecated.
+
+ * throw.c (scm_handle_by_message): Exit only the current thread,
+ not the whole process.
+ (scm_handle_by_message_noexit): Exit when catching 'quit.
+
+ * scmsigs.c (take_signal, signal_delivery_thread,
+ start_signal_delivery_thread, ensure_signal_delivery_thread,
+ install_handler): Reimplemented signal delivery as explained in
+ the comments.
+
+ * pthreads-threads.h (scm_i_pthread_t, scm_i_pthread_self,
+ scm_i_pthread_create, scm_i_pthread_detach, scm_i_pthread_exit,
+ scm_i_sched_yield, scm_i_pthread_sigmask,
+ SCM_I_PTHREAD_MUTEX_INITIALIZER,
+ SCM_I_PTHREAD_RECURSIVE_MUTEX_INITIALIZER, scm_i_pthread_mutex_t ,
+ scm_i_pthread_mutex_init, scm_i_pthread_mutex_destroy,
+ scm_i_pthread_mutex_trylock, scm_i_pthread_mutex_lock,
+ scm_i_pthread_mutex_unlock, SCM_I_PTHREAD_COND_INITIALIZER,
+ scm_i_pthread_cond_t, scm_i_pthread_cond_init,
+ scm_i_pthread_cond_destroy, scm_i_pthread_cond_signal,
+ scm_i_pthread_cond_broadcast, scm_i_pthread_cond_wait,
+ scm_i_pthread_cond_timedwait, scm_i_pthread_once_t,
+ SCM_I_PTHREAD_ONCE_INIT, scm_i_pthread_once, scm_i_pthread_key_t ,
+ scm_i_pthread_key_create, scm_i_pthread_setspecific,
+ scm_i_pthread_getspecific, scm_i_scm_pthread_mutex_lock,
+ scm_i_frame_pthread_mutex_lock, scm_i_scm_pthread_cond_wait,
+ scm_i_scm_pthread_cond_timedwait): Provide the obvious mapping
+ when using pthreads.
+ * null-threads.c, null-threads.h: Provide dummy definitions for
+ the above symbols when not using pthreads.
+
+ * modules.h, modules.c (scm_frame_current_module): New.
+
+ * load.c (scm_primitive_load): Use scm_i_frame_current_load_port
+ instead of scm_internal_dynamic_wind.
+
+ * init.h, init.c (restart_stack, start_stack): Removed.
+ (scm_boot_guile, invoke_main_func): Simply use scm_with_guile.
+ (scm_boot_guile_1): Removed.
+ (scm_i_init_mutex): New.
+ (really_cleanup_for_exit, cleanup_for_exit): New.
+ (scm_init_guile_1, scm_i_init_guile): Renamed former to latter.
+ Moved around some init funcs. Call
+ scm_init_threads_default_dynamic_state. Register cleanup_for_exit
+ with atexit.
+
+ * hashtab.c (scm_hash_fn_create_handle_x, scm_hash_fn_remove_x):
+ Use "!scm_is_eq" instead of "!=".
+
+ * ge-scmconfig.c, gen-scmconfig.h.in (SCM_I_GSC_USE_COOP_THREADS,
+ SCM_USE_COOP_THREADS): Removed.
+
+ * gc.c (scm_igc): Take care that scm_gc_running_p is properly
+ maintained. Unlock scm_i_sweep_mutex before running
+ scm_after_gc_c_hook.
+ (scm_permanent_object): Allocate outside of critical section.
+ (cleanup): Removed.
+
+ * fluids.h, fluids.c: Reimplemented completely.
+ (SCM_FLUID_NUM, SCM_FAST_FLUID_REF,
+ SCM_FAST_FLUID_SET): Reimplemented as functions.
+ (scm_is_fluid): New.
+ (scm_i_make_initial_fluids, scm_i_copy_fluids): Removed.
+ (scm_make_dynamic_state, scm_dynamic_state_p,
+ scm_is_dynamic_state, scm_current_dynamic_state,
+ scm_set_current_dynamic_state, scm_frame_current_dynamic_state,
+ scm_c_with_dynamic_state, scm_with_dynamic_state,
+ scm_i_make_initial_dynamic_state, scm_fluids_prehistory): New.
+
+ * feature.c (progargs_fluid): New.
+ (scm_program_arguments, scm_set_program_arguments): Use it instead
+ of scm_progargs.
+ (scm_init_feature): Allocate it. Also, only add "threads" feature
+ when SCM_USE_PTHREAD_THREADS is true.
+
+ * eval.c (scm_makprom): Use scm_make_recursive_mutex instead of
+ scm_make_rec_mutex, with all the consequences.
+ (scm_eval_x, scm_eval): Use scm_frame_begin etc instead of
+ scm_internal_dynamic_wind. Handle dynamic states as second
+ argument.
+
+ * threads.h, threads.c (scm_internal_select): Renamed to
+ scm_std_select and discouraged old name.
+ (scm_thread_sleep, scm_thread_usleep): Likewise, as scm_std_sleep
+ and scm_std_usleep.
+ (scm_tc16_fair_mutex, scm_tc16_fair_condvar, SCM_MUTEXP,
+ SCM_FAIR_MUTEX_P, SCM_MUTEX_DATA, SCM_CONDVARP,
+ SCM_FAIR_CONDVAR_P, SCM_CONDVAR_DATA, SCM_THREADP,
+ SCM_THREAD_DATA): Removed.
+ (SCM_I_IS_THREAD, SCM_I_THREAD_DATA): New.
+ (scm_i_thread): New.
+ (SCM_VALIDATE_THREAD, SCM_VALIDATE_MUTEX, SCM_VALIDATE_CONDVAR):
+ Use scm_assert_smob_type.
+ (scm_c_scm2thread, scm_thread_join, scm_thread_detach,
+ scm_thread_self, scm_thread_yield, scm_mutex_init,
+ scm_mutex_destroy, scm_mutex_trylock, scm_mutex_unlock,
+ scm_rec_mutex_init, scm_rec_mutex_destroy, scm_make_rec_mutex,
+ scm_rec_mutex_free, scm_rec_mutex_lock, scm_rec_mutex_trylock,
+ scm_cond_init, scm_cond_destroy, scm_cond_wait,
+ scm_cond_timedwait, scm_cond_signal, scm_cond_broadcast,
+ scm_key_create, scm_key_delete, scm_setspecific, scm_getspecific,
+ scm_thread_select): Removed. Replaced with scm_i_pthread
+ functions as appropriate.
+ (scm_in_guile, scm_outside_guile): Removed.
+ (scm_t_guile_ticket, scm_leave_guile, scm_enter_guile): Return and
+ take a ticket.
+ (scm_with_guile, scm_without_guile, scm_i_with_guile_and_parent):
+ New.
+ (scm_i_frame_single_threaded): New.
+ (scm_init_threads_default_dynamic_state): New.
+ (scm_i_create_thread): Removed.
+ (scm_make_fair_mutex, scm_make_fair_condition_variable): Removed.
+ (scm_make_recursive_mutex): New.
+ (scm_frame_critical_section): New.
+ (SCM_CURRENT_THREAD, SCM_I_CURRENT_THREAD): Renamed former to
+ latter, changed all uses.
+ (scm_i_dynwinds, scm_i_setdynwinds, scm_i_last_debug_frame,
+ scm_i_set_last_debug_frame): New, use them instead of scm_root
+ stuff.
+ (SCM_THREAD_LOCAL_DATA, SCM_SET_THREAD_LOCAL_DATA,
+ scm_i_root_state_key,m scm_i_set_thread_data): Removed.
+ (scm_pthread_mutex_lock, scm_frame_pthread_mutex_lock,
+ scm_pthread_cond_wait, scm_pthread_cond_timedwait).
+ (remqueue): Allow the removal of already removed cells. Indicate
+ whether a real removal has happened.
+ (scm_thread): Removed, replaced with scm_i_thread.
+ (make_thread, init_thread_creatant): Removed.
+ (cur_thread): Removed.
+ (block_self, unblock_from_queue): New.
+ (block, timed_block, unblock): Removed.
+ (guilify_self_1, guilify_self_2, do_thread_exit,
+ init_thread_key_once, init_thread_key,
+ scm_i_init_thread_for_guile, get_thread_stack_base,
+ scm_init_guile): New initialisation method.
+ (scm_call_with_new_thread, scm_spawn_thread): Use it to simplify
+ thread creation.
+ (fair_mutex, fat_mutex, etc, fair_condvar, fat_condvar): Renamed
+ "fair" to fat and implemented new semantics, including reliable
+ interruption.
+ (all_threads): Now a pointer to a scm_i_thread, not a SCM.
+ (scm_threads_mark_stacks): Explicitly mark handle.
+ (scm_std_select): Allow interruption by also selecting on the
+ sleep_pipe.
+ (scm_i_thread_put_to_sleep): Handle recursive requests for
+ single-threadedness.
+ (scm_threads_prehistory, scm_init_threads): Put current thread
+ into guile mode via guileify_self_1 and guileify_self_2,
+ respectively.
+
+ * fluid.h (SCM_FLUIDP): Deprecated.
+
+ * coop-threads.c: Removed.
+
+ * continuations.h, continuations.c (scm_with_continuation_barrier,
+ scm_c_with_continuation_barrier, scm_i_with_continuation_barrier):
+ New.
+
+ * async.h, async.c (scm_i_setup_sleep, scm_i_reset_sleep): New.
+ (async_mutex): New.
+ (scm_async_click): Protected with async_mutex. Do not deal with
+ signal_asyncs, which are gone. Set cdr of handled async cell to
+ #f.
+ (scm_i_queue_async_cell): Protected with async_mutex. Interrupt
+ current sleep.
+ (scm_system_async_mark_for_thread): Do not use scm_current_thread
+ since that might not work during early initialization.
+
+ * __scm.h (SCM_DEFER_INTS, SCM_ALLOW_INTS, SCM_REDEFER_INTS,
+ SCM_REALLOW_INTS): Deprecated by moving into deprecated.h and
+ deprecated.c. Replaced all uses with SCM_CRITICAL_SECTION_START
+ and SCM_CRITICAL_SECTION_END.
+ (SCM_ENTER_A_SECTION, SCM_EXIT_A_SECTION): Removed. Replaced with
+ SCM_CRITICAL_SECTION_START/END.
+
+ * Makefile.am (modinclude_HEADER): Removed threads-plugin.h.
+ (libguile_la_SOURCES): Added null-threads.c
+ (EXTRA_libguile_la_SOURCES): Removed pthread-threads.c and
+ threads-plugin.c.
+ * pthread-threads.c, threads-plugin.c, threads-plugin.h: Removed.
+
+ * root.h, root.c (scm_tc16_root, SCM_ROOTP, SCM_ROOT_STATE,
+ scm_root_state, scm_stack_base, scm_save_regs_gc_mark,
+ scm_errjmp_bad, scm_rootcont, scm_dynwinds, scm_progargs,
+ scm_last_debug_frame, scm_exitval, scm_cur_inp, scm_outp,
+ scm_cur_err, scm_cur_loadp, scm_root, scm_set_root,
+ scm_make_root): Removed or deprecated. Replaced with references
+ to the current thread, dynamic state, continuation barrier, or
+ some fluid, as appropriate.
+ (root_mark, root_print): Removed.
+ (scm_internal_cwdr): Reimplemented guts with
+ scm_frame_current_dynamic_state and
+ scm_i_with_continuation_barrier.
+ (scm_dynamic_root): Return current continuation barrier.
+
+
+2005-02-28 Marius Vollmer <mvo@zagadka.de>
+
+ * socket.c (scm_setsockopt): Handle IP_ADD_MEMBERSHIP and
+ IP_DROP_MEMBERSHIP options. Also, reorganized the code a bit for
+ cleanliness.
+ (scm_init_socket): Define IP_ADD_MEMBERSHIP and
+ IP_DROP_MEMBERSHIP.
+ Thanks to Greg Troxel!
+
+2005-02-27 Mikael Djurfeldt <djurfeldt@nada.kth.se>
+
+ * gh.h: Bugfix: Include <libguile.h> outside of the extern "C"
+ block.
+
+2005-02-25 Marius Vollmer <mvo@zagadka.de>
+
+ * hashtab.c (scm_i_rehash): Remove elements from old bucket vector
+ so that no two weak alist vectors share a spine.
+ (scm_hash_fn_create_handle_x): Deal with a possible rehashing
+ during GC before inserting the new alist cell.
+
+2005-02-23 Marius Vollmer <marius.vollmer@uni-dortmund.de>
+
+ * hashtab.c (scm_i_rehash): Cope with the case that a GC modifies
+ the hashtable.
+ (scm_hash_fn_create_handle_x): Likewise.
+ * vectors.h (SCM_I_SET_WVECT_TYPE): New, for use in scm_i_rehash.
+
+2005-02-10 Mikael Djurfeldt <djurfeldt@nada.kth.se>
+
+ * unif.c (prototype_to_type): Bugfix: Don't compare prototype to
+ the prototypical examples mentioned in the old reference manual.
+ Instead keep the old semantics of dispatching on type. (Yes, this
+ is extremely ugly, but the whole point of keeping the deprecated
+ interface is not to break old code.)
+
+2005-02-08 Mikael Djurfeldt <djurfeldt@nada.kth.se>
+
+ * deprecated.h (SCM_ARRAY_DIMS): Rename scm_i_attay_dims -->
+ scm_i_array_dims.
+
+2005-01-28 Kevin Ryde <user42@zip.com.au>
+
+ * numbers.c (scm_ash): Rewrite using shifts, much faster than
+ integer-expt and multiply/divide. Inexacts and fractions no longer
+ supported (they happened to work before for left shifts, but not
+ right). Don't really need inexacts and fractions, since ash is
+ documented as a "bitwise operation", and all the rest of those only
+ take exact integers.
+
+2005-01-27 Han-Wen Nienhuys <hanwen@xs4all.nl>
+
+ * gc-card.c (scm_i_card_statistics): map structs, closures and
+ subrs to one tag.
+
+ * gc.c (s_scm_gc_live_object_stats): return alist, not hashtable.
+ (tag_table_to_type_alist): ignore unknown types.
+
+ * gc-segment.c (scm_i_all_segments_statistics): new function.
+ (scm_i_heap_segment_statistics): new function
+
+ * gc.c (s_scm_gc_live_object_stats): new GUILE callable: return
+ statistics on the number of live objects of each type.
+
+ * gc-card.c (scm_i_tag_name): new function.
+ (scm_i_card_statistics): new function.
+
+2005-01-24 Kevin Ryde <user42@zip.com.au>
+
+ * posix.c (scm_setlocale): Force errno=EINVAL for an error, since
+ POSIX and C99 don't document errno being set. Reported by Bruno
+ Haible.
+ (scm_flock): Update docstring from manual.
+
+ * random.c (scm_i_init_rstate): Compare w to -1 not 0xffffffffUL, now
+ that it's an scm_t_int32. Otherwise gcc 3.4 says it's always false on
+ a 64-bit system.
+
+ * scmsigs.c (scm_sigaction_for_thread): Use scm_to_long for
+ sa_handler, needs to be a long on 64-bit systems where int is only 32
+ bits.
+
+2005-01-20 Marius Vollmer <marius.vollmer@uni-dortmund.de>
+
+ * environments.c (obarray_enter, obarray_replace): Call
+ SCM_HASHTABLE_INCREMENT when adding a new entry.
+
+ * objects.c: Include goops.h for the scm_class_of prototype.
+
+ * hashtab.c (hashtable_size, HASHTABLE_SIZE_N): Restrict hashtable
+ sizes to be smaller than the maximum lengths of vectors.
+
+2005-01-18 Marius Vollmer <marius.vollmer@uni-dortmund.de>
+
+ * ports.c, smob.c: Include "libguile/goops.h".
+
+ * objects.h, objects.c, goops.c, goops.h (scm_class_boolean,
+ scm_class_char, scm_class_pair, scm_class_procedure,
+ scm_class_string, scm_class_symbol,
+ scm_class_procedure_with_setter, scm_class_primitive_generic,
+ scm_class_vector, scm_class_null, scm_class_real,
+ scm_class_complex, scm_class_integer, scm_class_fraction,
+ scm_class_unknown, scm_port_class, scm_smob_class,
+ scm_no_applicable_method, scm_class_of): Moved from objects to
+ goops since they are only useable once goops has been loaded.
+ (scm_classes_initialized): Removed.
+ (scm_class_of): Do not check it.
+ (create_standard_classes): Do not set it.
+
+2005-01-17 Marius Vollmer <marius.vollmer@uni-dortmund.de>
+
+ * objects.h, objects.c (scm_classes_initialized): New.
+ (scm_class_of): Signal error when scm_classes_initialized is zero.
+ * goops.c (create_standard_classes): Set scm_classes_initialized
+ to one.
+
+ * random.c (scm_random_solid_sphere_x): Use
+ scm_c_generalized_vector_length instead of
+ scm_uniform_vector_length.
+
+2005-01-16 Marius Vollmer <mvo@zagadka.de>
+
+ * script.c (scm_compile_shell_switches): Removed debugging output.
+
+2005-01-15 Kevin Ryde <user42@zip.com.au>
+
+ * numbers.c (scm_logtest, scm_logbit_p, scm_integer_expt): Update
+ docstrings from manual.
+ * random.c (scm_random_solid_sphere_x): Update docstring from manual.
+
+2005-01-14 Marius Vollmer <marius.vollmer@uni-dortmund.de>
+
+ * random.c: Don't check for definedness of SCM_HAVE_T_INT64, check
+ its value.
+
+ Implement u64 and s64 uniform numeric vectors with bignums when
+ scm_t_uint64 and scm_t_int64 are not available.
+
+ * srfi-4.h, srfi-4.c, srfi-4.i.c (scm_take_u64vector,
+ scm_array_handle_u64_elements,
+ scm_array_handle_u64_writable_elements, scm_u64vector_elements,
+ scm_u64vector_writable_elements): Do not define when scm_t_uint64
+ is not available.
+ (scm_take_s64vector, scm_array_handle_s64_elements,
+ scm_array_handle_s64_writable_elements, scm_s64vector_elements,
+ scm_s64vector_writable_elements): Likewise for scm_t_int64.
+ (uvec_sizes, uvec_print, uvec_equalp): Use SCM bignums when
+ scm_t_int64/scm_t_uint64 are not available.
+ (uvec_mark): New, to mark the bignums.
+ (alloc_uvec): Initialize bignums.
+ (uvec_fast_ref): Return bignums directly.
+ (scm_uint64_min, scm_uint64_max, scm_int64_min, scm_int64_max,
+ assert_exact_integer): New.
+ (uvec_fast_set): Use them to validate the bignums.
+ (scm_init_srfi_4): Set mark function of smob when needed.
+ Initialize scm_uint64_min, scm_uint64_max, scm_int64_min,
+ scm_int64_max.
+
+ Recognize 1.4 -e syntax.
+
+ * script.c (sym_at, sym_atat, sym_main, all_symbols): New.
+ (scm_compile_shell_switches): Use them to recognize and convert
+ 1.4 "-e" syntax.
+
+2005-01-12 Marius Vollmer <marius.vollmer@uni-dortmund.de>
+
+ * deprecated.h, deprecated.c, strings.h, strings.c: Turn all
+ deprecated features that once were macros but are now functions
+ back into macros.
+
+2005-01-11 Marius Vollmer <marius.vollmer@uni-dortmund.de>
+
+ * eval.c, debug.h (SCM_WARN_DEPRECATED): New debug option.
+ * deprecation.c (scm_issue_deprecation_warning,
+ scm_c_issue_deprecation_warning_fmt): Use it.
+ (mode): Removed.
+ (print_summary): New.
+ (scm_init_deprecation): Initialize SCM_WARN_DEPRECATED instead of
+ mode.
+
+ Deprecated SCM_ARRAY* macros.
+
+ * unif.h, unif.c, ramap.c, vectors.c, srfi-4.c, srfi-4.i.c
+ (SCM_ARRAYP, SCM_I_ARRAYP): Renamed former to latter internal
+ version. Changed all uses.
+ (scm_tc16_array, scm_i_tc16_array,
+ scm_tc16_enclosed_array, scm_i_tc16_enclosed_array,
+ SCM_ARRAY_FLAG_CONTIGUOUS, SCM_I_ARRAY_FLAG_CONTIGUOUS,
+ SCM_ENCLOSE_ARRAYP, SCM_I_ENCLOSE_ARRAYP,
+ SCM_ARRAY_NDIM, SCM_I_ARRAY_NDIM,
+ SCM_ARRAY_CONTP, SCM_I_ARRAY_CONTP,
+ SCM_ARRAY_MEM, SCM_I_ARRAY_MEM,
+ SCM_ARRAY_V, SCM_I_ARRAY_V,
+ SCM_ARRAY_BASE, SCM_I_ARRAY_BASE,
+ SCM_ARRAY_DIMS, SCM_I_ARRAY_DIMS,
+ scm_t_array, scm_i_t_array): Likewise.
+ (SCM_SET_ARRAY_CONTIGUOUS_FLAG, SCM_CLR_ARRAY_CONTIGUOUS_FLAG):
+ Moved from unif.h to unif.c.
+ (scm_c_array_rank): New.
+ (scm_array_rank): Reimplement using it.
+
+ * deprecated.h, deprecated.c (SCM_ARRAYP, SCM_ARRAY_NDIM,
+ SCM_ARRAY_CONTP, SCM_ARRAY_MEM, SCM_ARRAY_V, SCM_ARRAY_BASE,
+ SCM_ARRAY_DIMS, scm_t_array): New deprecated versions.
+
+2005-01-11 Marius Vollmer <mvo@zagadka.de>
+
+ * ramap.c: Replace uses of scm_make_ra with scm_i_make_ra.
+ (GVREF, GVSET): New abbreviations. Use them everywhere instead of
+ scm_c_generalized_vector_ref and scm_cvref, and
+ scm_c_generalized_vector_set_x, respectively.
+ (RVREF, IVDEP, BINARY_ELTS_CODE, BINARY_PAIR_ELTS_CODE,
+ UNARY_ELTS_CODE, UNARY_PAIR_ELTS_CODE): Removed since unused.
+
+ * unif.h, unif.c (indices_to_pos, scm_array_handle_pos): Renamed
+ former to latter and made public. Changed all uses.
+ (scm_i_make_ra): Made public, changed tag param to enclosed flag.
+ (scm_make_ra): Deprecated, changed all uses to scm_i_make_ra.
+ (scm_i_shap2ra): New internal version of scm_shap2ra.
+ (scm_shap2ra): Deprecated, changed all uses to scm_i_shap2ra.
+ (scm_i_ra_set_contp): New internal version of scm_ra_set_contp.
+ (scm_ra_set_contp): Deprecated, changed all uses to
+ scm_i_ra_set_contp.
+ (scm_cvref, scm_aind, scm_raprin1): Deprecated.
+
+2005-01-10 Marius Vollmer <marius.vollmer@uni-dortmund.de>
+
+ * eval.c (scm_eval): Added example to docstring. Thanks to Issac
+ Trotts!
+
+ * unif.c (scm_list_to_typed_array): Allow the specification of the
+ upper bound as well. This is needed for empty arrays.
+ (l2ra): Give needed number of elements in error message.
+ (scm_i_print_array): Print length information for arrays that need
+ it.
+ (scm_i_read_array): Parse it.
+
+ * deprecated.h, deprecated.c (SCM_CHARS, SCM_UCHARS, SCM_LENGTH,
+ scm_i_object_chars, scm_i_object_length): Brought back from the
+ dead.
+
+2005-01-10 Marius Vollmer <mvo@zagadka.de>
+
+ * ramap.c: Replaced single-index uses of scm_array_set_x with
+ scm_c_generalized_vector_set_x.
+
+ * unif.c (scm_array_rank, scm_array_dimensions,
+ scm_shared_array_offset, scm_shared_array_increments,
+ scm_array_ref, scm_array_set_x): Use scm_t_array_handle operations
+ to simplify code and make it more general.
+ (scm_shared_array_root): Work with all kinds of arrays, including
+ naked vectors.
+ (indices_to_pos): New.
+ (scm_make_shared_array): Use it instead of scm_aind; use handle
+ for oldra.
+
+2005-01-10 Kevin Ryde <user42@zip.com.au>
+
+ * posix.c (scm_mkstemp): Update docstring from manual.
+
+ * stime.c (scm_mktime): Missing default errno=EINVAL from prev change.
+
+2005-01-09 Marius Vollmer <mvo@zagadka.de>
+
+ * srfi-4.h, srfi-4.c, srfi-4.i.c (scm_i_uniform_vector_ref_proc,
+ scm_i_uniform_vector_set_proc): New.
+ (u8ref, u8set, s8ref, s8set, etc): New.
+ (uvec_reffers, uvec_setters): New.
+ (uvec_to_list): Use generic scm_array_handle_ref instead of
+ uvec_fast_ref since scm_array_handle_ref should be faster now.
+ (coerce_to_uvec, scm_c_uniform_vector_ref,
+ scm_c_uniform_vector_set_x): Likewise.
+
+ * unif.h, unif.c, inline.h (scm_i_t_array_ref, scm_i_t_array_set):
+ New.
+ (scm_t_array_handle): Added ref, set, elements and
+ writable_elements for fast inline operation of
+ scm_array_handle_ref and scm_array_handle_set.
+ (scm_array_handle_ref, scm_array_handle_set): Moved to inline.h
+ and replaced with inline code that simply calls the ref/set
+ members of the handle.
+ (enclosed_ref, vector_ref, string_ref, bitvector_ref, memoize_ref,
+ enclosed_set, vector_set, string_set, bitvector_set, memoize_set):
+ New.
+ (scm_array_handle_get): Initialize ref/set fields to memoize_ref
+ and memoize_set.
+ (scm_bitvector_fill_x, scm_bitvector_to_list, scm_bit_count,
+ scm_bit_position, scm_bit_set_star_x, scm_bit_count_star,
+ scm_bit_invert_x): Correctly multiply index with increment in the
+ general case.
+
+ * unif.c (scm_array_handle_set): Correctly execute only one
+ alternative. D'Oh!
+ (scm_list_to_typed_array, l2ra): Use scm_t_array_handle to fill
+ the array; this covers all cases with much simpler code.
+
+ * srfi-4.c (scm_uniform_element_size): Deprecated implementation
+ as well.
+
+2005-01-09 Marius Vollmer <marius.vollmer@uni-dortmund.de>
+
+ * srfi-4.c (uvec_type): New.
+ (uvec_to_list, uvec_ref, uvec_set_x, scm_c_uniform_vector_ref,
+ scm_c_uniform_vector_x): Use it to get concrete type.
+
+ * unif.h (scm_t_array_dim): Changed type of members to ssize_t, to
+ fit the docs.
+
+ * unif.c (ra2l): Handle zero rank arrays.
+ (scm_i_print_array): Print zero rank arrays specially.
+ (tag_to_type): Return #t for an empty tag, not the empty symbol.
+ (scm_i_read_array): Allow zero rank arrays.
+
+2005-01-07 Marius Vollmer <marius.vollmer@uni-dortmund.de>
+
+ * hashtab.h, hashtab.c (SCM_HASHTAB_BUCKET_LOC): Removed.
+ (scan_weak_hashtables): Rewrote its use with SCM_HASHTAB_BUCKET
+ and SCM_SET_HASHTAB_BUCKET.
+
+ * print.h, print.c (scm_print_state, SCM_PRINT_STATE_LAYOUT):
+ Removed ref_stack field.
+ (PSTATE_STACK_REF, PSTATE_STACK_SET): New, for accessing the stack
+ of a print state. Use them everywhere instead of ref_stack.
+
+ * srfi-4.h (scm_uniform_element_size): Deprecated for real.
+
+ * srfi-4.c: Include deprecation.h.
+
+ * vectors.h, vectors.c, unif.h, unif.c, deprecated.h,
+ deprecated.c, eq.c
+ (SCM_BITVEC_REF, SCM_BITVEC_SET, SCM_BITVEC_CLR): Removed.
+ (scm_vector_elements, scm_vector_writable_elements,
+ scm_generalized_vector_get_handle): Moved to vectors.[hc] from
+ unif.[hc].
+ (SCM_SIMPLE_VECTOR_LOC): Removed.
+ (SCM_VECTOR_MAX_LENGTH, SCM_VECTOR_LENGTH, SCM_VELTS,
+ SCM_WRITABLE_VELTS, SCM_VECTOR_REF, SCM_VECTOR_SET,
+ scm_vector_equal_p): Moved from vectors.[hc] to deprecated.[hc].
+ (scm_vector_equal_p, scm_i_vector_equal_p): Renamed former to
+ latter. Changed use in eq.c.
+
+2005-01-07 Marius Vollmer <mvo@zagadka.de>
+
+ Make the uniform vector routines also deal with one dimensional
+ arrays.
+
+ * srfi-4.c (SCM_IS_UVEC): New, use it instead of
+ SCM_SMOB_PREDICATE in this file.
+ (is_uvec): Also recognize one-dimensional uniform numeric arrays
+ of the right type.
+ (scm_is_uniform_vector): Likewise.
+ (uvec_fast_ref): Made BASE param const.
+ (uvec_writable_elements, uvec_elements): New.
+ (uvec_to_list, uvec_ref, uvec_set_x, uvec_length,
+ scm_c_uniform_vector_length, scm_c_uniform_vector_ref,
+ scm_c_uniform_set_x): Use them to also deal with one-dimensional
+ arrays.
+ (scm_uniform_vector_ref, scm_uniform_vector_set_x): Deprecate old
+ argument convention.
+ (scm_uniform_vector_to_list): Let uvec_to_list do all the
+ checking.
+ (scm_uniform_vector_length): Use uvec_length.
+
+2005-01-06 Marius Vollmer <marius.vollmer@uni-dortmund.de>
+
+ * srfi-4.h, srfi-4.c (scm_c_uniform_vector_element_size,
+ scm_c_uniform_vector_size): Removed.
+ (scm_array_handle_uniform_element_size): New.
+
+
+ * unif.h (scm_array_handle_ref, scm_array_handle_set): Changed
+ type of POS parameter to be signed, positions can be negative.
+ (scm_array_handle_release): New, changed all uses of
+ scm_t_array_handle to properly call it.
+ (scm_vector_get_handle, scm_generalized_vector_get_handle):
+ Renamed former to latter, changed all uses.
+
+2005-01-05 Marius Vollmer <mvo@zagadka.de>
+
+ Updated bitvector routines to also use scm_t_array_handles.
+
+ * unif.h (scm_bitvector_elements,
+ scm_bitvector_writable_elements): Use a scm_t_array_handle and
+ deliver offset, length and increment to caller. Changed all uses.
+ (scm_bitvector_release_elements,
+ scm_frame_bitvector_release_elements,
+ scm_bitvector_release_writable_elements,
+ scm_frame_bitvector_release_writable_elements): Removed.
+ (scm_array_handle_bit_elements,
+ scm_array_handle_bit_writable_elements,
+ scm_array_handle_bit_elements_offset): New.
+ (scm_make_typed_array): The special value for non-initialized
+ arrays is now SCM_UNSPECIFIED. The old special value SCM_BOOL_F
+ was a valid value to fill bitvectors with, so it can't really be
+ specialed out.
+
+2005-01-04 Kevin Ryde <user42@zip.com.au>
+
+ * stime.c (scm_strftime): Free t.tm_zone produced by bdtime2c.
+ Reported by Bill Schottstaedt.
+
+2005-01-02 Marius Vollmer <mvo@zagadka.de>
+
+ * sort.c (quicksort): Added INC parameter for non-contigous
+ vectors.
+ (quicksort1): New, for contigous vectors. Both functions are
+ generated from the same code by including "quicksort.i.c".
+ (scm_restricted_vector_sort_x): Call one of quicksort and
+ quicksort1, depending on increment of vector.
+ (scm_sort): Simply call scm_sort_x on a copy of the list or
+ vector.
+ (scm_merge_vector_x, scm_merge_vector_step): Changed indices to
+ size_t, added inc parameter.
+ (scm_stable_sort_x): Allocate temporary storage as Scheme vector
+ so that it doesn't leak.
+ (scm_stable_sort): Simply call scm_stable_sort_x on a copy of the
+ list or vector.
+
+ * ramap.c (scm_array_map_x): Do not try to convert fill value
+ before filling, any necessary conversion is done while storing.
+
+ * gc-card.c (scm_i_sweep_card): Call scm_i_vector_free instead of
+ doing it inline.
+
+ * hashtab.c, hashtab.h (SCM_HASHTABLE_BUCKETS): Removed.
+ (SCM_HASHTABLE_BUCKET, SCM_HASHTABLE_BUCKET_LOC): New. Replaced
+ all uses of SCM_HASHTABLE_BUCKETS with SCM_HASHTABLE_BUCKET.
+
+ * tags.h, weaks.c, vports.c, hashtab.c, convert.c, sort.c,
+ convert.c, convert.h, convert.i.c, deprecated.c, environments.c,
+ eval.c, filesys.c, fluids.c, gc-mark.c, gh.h, gh_data.c, goops.c,
+ hash.c, init.c, libguile_la-arrays.loT, modules.c, net_db.c,
+ objects.c, ports.c, posix.c, print.c, random.c, read.c,
+ regex-posix.c, scmsigs.c, socket.c, stime.c, symbols.c: Use new
+ vector elements API or simple vector API, as appropriate. Removed
+ SCM_HAVE_ARRAYS ifdefery. Replaced all uses of
+ SCM_HASHTABLE_BUCKETS with SCM_HASHTABLE_BUCKET.
+
+ * srfi-4.h, srfi-4.c,
+ srfi-4.i.c (scm_array_handle_uniform_elements,
+ scm_array_handle_uniform_writable_elements,
+ scm_uniform_vector_elements,
+ scm_uniform_vector_writable_elements):
+ (scm_<foo>vector_elements, scm_<foo>vector_writable_elements): Use
+ scm_t_array_handle, deliver length and increment.
+ (scm_array_handle_<foo>_elements,
+ scm_array_handle_<foo>_writable_elements): New.
+
+ * gen-scmconfig.h.in (SCM_I_GSC_HAVE_ARRAYS): Removed.
+ * gen-scmconfig.c: Hard code SCM_HAVE_ARRAYS to "1".
+
+ * unif.h, unif.c (scm_t_array_handle, scm_array_get_handle,
+ scm_array_handle_rank, scm_array_handle_dims, scm_array_handle_ref
+ scm_array_handle_set, scm_array_handle_elements
+ scm_array_handle_writable_elements, scm_vector_get_handle): New.
+ (scm_make_uve, scm_array_prototype, scm_list_to_uniform_array,
+ scm_dimensions_to_uniform_array): Deprecated for real.
+ (scm_array_p, scm_i_array_p): Use latter for SCM_DEFINE since
+ snarfing wont allow a mismatch between C and Scheme arglists.
+ (scm_make_shared_array, scm_enclose_array): Correctly use
+ scm_c_generalized_vector_length instead of
+ scm_uniform_vector_length.
+
+ * validate.h (SCM_VALIDATE_VECTOR,
+ SCM_VALIDATE_VECTOR_OR_DVECTOR): use scm_is_simple_vector instead
+ of SCM_VECTORP.
+
+ * weaks.h, weaks.c: Use new internal weak vector API from
+ vectors.h.
+
+ * Makefile.am (libguile_la_SOURCES, DOT_X_FILES, DOT_DOC_FILES,
+ EXTRA_libguile_la_SOURCES): Changed ramap.c and unif.c from being
+ 'extra' to being regular sources.
+ (noinst_HEADERS): Added quicksort.i.c.
+ * quicksort.i.c: New file.
+
+ * vectors.h, vector.c (SCM_VECTORP, SCM_VECTOR_LENGTH, SCM_VELTS,
+ SCM_WRITABLE_VELTS, SCM_VECTOR_REF, SCM_VECTOR_SET): Deprecated
+ and reimplemented. Replaced all uses with scm_vector_elements,
+ scm_vector_writable_elements, or SCM_SIMPLE_VECTOR_*, as
+ appropriate.
+ (scm_is_simple_vector, SCM_SIMPLE_VECTOR_LENGTH,
+ SCM_SIMPLE_VECTOR_REF, SCM_SIMPLE_VECTOR_SET,
+ SCM_SIMPLE_VECTOR_LOC): New.
+ (SCM_VECTOR_BASE, SCM_SET_VECTOR_BASE, SCM_VECTOR_MAX_LENGTH,
+ SCM_MAKE_VECTOR_TAG, SCM_SET_VECTOR_LENGTH,
+ SCM_VELTS_AS_STACKITEMS, SCM_SETVELTS, SCM_GC_WRITABLE_VELTS):
+ Removed.
+ (scm_vector_copy): New.
+ (scm_vector_elements, scm_vector_writable_elements): Use
+ scm_t_array_handle, deliver length and increment. Moved to
+ unif.h. Changed all uses.
+ (scm_vector_release_elements,
+ scm_vector_release_writable_elements,
+ (scm_frame_vector_release_elements,
+ scm_frame_vector_release_writable_elements): Removed.
+ (SCM_I_IS_VECTOR, SCM_I_VECTOR_ELTS, SCM_I_VECTOR_WELTS,
+ SCM_I_VECTOR_LENGTH, scm_i_vector_free): New internal API.
+ (SCM_I_WVECTP SCM_I_WVECT_LENGTH SCM_I_WVECT_VELTS
+ SCM_I_WVECT_GC_WVELTS SCM_I_WVECT_TYPE SCM_I_WVECT_GC_CHAIN
+ SCM_I_SET_WVECT_GC_CHAIN, scm_i_allocate_weak_vector): New, for
+ weak vectors.
+
+2004-12-29 Marius Vollmer <mvo@zagadka.de>
+
+ No longer use creators to specify the type of an array. Creators
+ expose the fact that arrays are wrapped around vectors, but that
+ might change.
+
+ * srfi-4.h (scm_i_proc_make_u8vector, scm_i_proc_make_s8vector,
+ scm_i_proc_make_u16vector, scm_i_proc_make_s16vector,
+ scm_i_proc_make_u32vector, scm_i_proc_make_s32vector,
+ scm_i_proc_make_u64vector, scm_i_proc_make_s64vector,
+ scm_i_proc_make_f32vector, scm_i_proc_make_f64vector,
+ scm_i_proc_make_c32vector, scm_i_proc_make_c64vector,
+ uvec_proc_vars): Removed.
+ (scm_i_generalized_vector_creator): Removed.
+ (scm_i_generalized_vector_type): New.
+
+ * unif.h, unif.c (scm_typed_array_p, scm_make_array,
+ scm_make_typed_array, scm_array_type, scm_list_to_array,
+ scm_list_to_typed_array, scm_is_array, scm_is_typed_array): New.
+ (scm_array_creator): Removed.
+ (scm_array_p): Deprecated second PROT argument.
+ (scm_dimensions_to_uniform_array, scm_list_to_uniform_array):
+ Deprecated, reimplemented in terms of scm_make_typed_array and
+ scm_list_to_typed_array.
+ (scm_i_proc_make_vector, scm_i_proc_make_string,
+ scm_i_proc_make_bitvector): Removed.
+ (type_creator_table, init_type_creator_table, type_to_creator,
+ make_typed_vector): New.
+ (scm_i_convert_old_prototype): Removed.
+ (prototype_to_type): New.
+ (scm_make_uve): Deprecated, reimplemented using make_typed_vector.
+ (scm_array_dimensions): Use scm_list_1 instead of scm_cons for
+ minor added clarity.
+ (scm_make_shared_array, scm_ra2contig): Use make_typed_vector
+ instead of scm_make_uve.
+ (tag_creator_table, scm_i_tag_to_creator): Removed.
+ (tag_to_type): New.
+ (scm_i_read_array): Use scm_list_to_typed_array instead of
+ scm_list_to_uniform_array.
+
+2004-12-27 Marius Vollmer <mvo@zagadka.de>
+
+ * unif.h, unif.c (scm_bitvector_elements): Made return value "const".
+ (scm_bitvector_writable_elements): New.
+ (scm_bitvector_release, scm_bitvector_release_elements):
+ Renamed former to latter. Added explicit call to
+ scm_remember_upto_here_1.
+ (scm_frame_bitvector_release,
+ scm_frame_bitvector_release_elements): Renamed former to latter.
+ (scm_bitvector_release_writable_elements,
+ scm_bitvector_release_writable_elements): New.
+ Changed all uses as required by the changes above.
+
+ * srfi-4.h, srfi-4.c, srfi-4.i.c (scm_uniform_vector_elements,
+ scm_u8vector_elements, etc): Made return value "const".
+ (scm_uniform_vector_writable_elements,
+ scm_u8vector_writable_elements, etc): New.
+ (scm_uniform_vector_release, scm_uniform_vector_release_elements):
+ Renamed former to latter. Added explicit call to
+ scm_remember_upto_here_1.
+ (scm_frame_uniform_vector_release,
+ scm_frame_uniform_vector_release_elements): Renamed former to latter.
+ (scm_uniform_vector_release_writable_elements,
+ scm_frame_uniform_vector_release_writable_elements): New. Takes
+ crown of longest identifier yet.
+ Changed all uses as required by the changes above.
+
+ * vectors.h, vectors.c (scm_c_vector_set_x): Make return type
+ void.
+ (scm_is_vector, scm_vector_p, scm_vector_length,
+ scm_c_vector_length, scm_vector_ref, scm_c_vector_ref,
+ scm_vector_set_x, scm_c_vector_set_x, scm_vector_to_list,
+ scm_vector_move_left_x, scm_vector_move_right_x,
+ scm_vector_fill_x): handle one-dimensional arrays.
+ (scm_vector_elements, scm_vector_release_elements,
+ scm_vector_frame_release_elements, scm_vector_writable_elements,
+ scm_vector_release_writable_elements,
+ scm_vector_frame_release_writable_elements): New.
+ (scm_list_to_vector, scm_vector_to_list, scm_vector_fill,
+ scm_vector_move_left_x, scm_vector_move_right_x): Use them.
+
+ * ramap.c (scm_ramapc, scm_raeql): Use
+ scm_c_generalized_vector_length instead of
+ scm_uniform_vector_length.
+ (scm_ramap, rafe): Use scm_c_vector_ref instead of SCM_VELTS. use
+ scm_c_generalized_vector_ref instead of scm_uniform_vector_ref.
+
+2004-12-23 Marius Vollmer <marius.vollmer@uni-dortmund.de>
+
+ * continuations.h, continuations.c (scm_t_contregs): New 'offset'
+ member for relocating debug frames.
+ (scm_make_continuation): Set it.
+
+ * stacks.c (read_frame, read_frames, scm_make_stack,
+ scm_last_stack_frame, scm_stack_id): Use the new 'offset' member
+ of continuations instead of calculating the offset ourselves.
+ Relocate 'vect' member of scm_t_debug_frame.
+
+2004-12-16 Kevin Ryde <user42@zip.com.au>
+
+ * ramap.c (scm_array_map_x): Check for at least one source argument.
+
+2004-12-14 Kevin Ryde <user42@zip.com.au>
+
+ * srfi-13.c (string-any, string-every): Use a scheme wrapper around
+ the C code so for the final call to the predicate procedure is a tail
+ call, per SRFI-13 spec.
+
+2004-12-10 Kevin Ryde <user42@zip.com.au>
+
+ * eq.c (scm_eq_p, scm_eqv_p, scm_equal_p): Update docstrings from
+ recent revision to the reference manual.
+
+ * numbers.c (scm_modulo): Amend fixme comment about negative divisor
+ with "%", C99 says it's well-defined.
+
+ * socket.c (scm_from_ipv6): Just use mpz_import. Don't bother trying
+ to fit scm_from_ulong_long, since that uses mpz_import anyway. Don't
+ bother trying to fit scm_from_ulong, not really worth the trouble if
+ addresses are more than 4 bytes usually.
+
+2004-11-30 Kevin Ryde <user42@zip.com.au>
+
+ * gc_os_dep.c (NetBSD): Test __m68k__ and __arm__ as well as m68k and
+ arm32. Reported by Greg Troxel.
+
+2004-11-14 mvo <mvo@zagadka.de>
+
+ * unif.c, unif.h (scm_i_cvref): Made non-static for ramap.c.
+
+ * Makefile.am (INCLUDES): It is "@LTDLINCL@", not "@LTDLINC@".
+
+2004-11-12 Marius Vollmer <marius.vollmer@uni-dortmund.de>
+
+ Enclosed arrays are now their own smob. This has been done to
+ make the code more explicit about them and to prepare for the time
+ when generalized vectors include arbitrary one-dimensional
+ arrays. (Uptonow, enclosed arrays have been recognized by their
+ use of an array as their storage 'vector'. When all generalized
+ vectors are allowed as storage, including one-dimensional arrays,
+ this will no longer work.)
+
+ * unif.h, unif.c: (scm_tc16_enclosed_array, SCM_ENCLOSED_ARRAYP):
+ New.
+ (exactly_one_third, singp): Removed.
+ (scm_array_p, scm_array_dimensions, scm_shared_array_root,
+ scm_shared_array_offset, scm_shared_array_increments): Handle
+ enclosed arrays explicitely.
+ (scm_array_rank): Likewise. Also, do not return zero for
+ non-arrays, signal an error instead since arrays with rank zero do
+ exist.
+ (scm_i_make_ra): New, for specifying the tag of the new array.
+ (scm_make_enclosed_array): Use it.
+ (scm_make_ra): Reimplemented in terms of scm_i_make_ra.
+ (scm_make_shared_array): Use scm_c_generalized_vector_length
+ instead of scm_uniform_vector_length.
+ (scm_array_in_bounds_p): Rewritten to be much cleaner.
+ (scm_i_cvref): New, doing the job of scm_cvref.
+ (scm_cvref): Use scm_i_cvref.
+ (scm_array_ref): Do not accept non-arrays when no indices are
+ given. Use scm_i_cvref to do the actual access.
+ ("uniform-array-set1"): Do not register.
+ (scm_array_set_x, scm_uniform_array_read_x,
+ scm_uniform_array_write): Handle enclosed arrays explicitly.
+ (ra2l): Use scm_i_cvref instead of scm_uniform_vector_ref to also
+ handle enclosed arrays.
+ (scm_array_to_list): Handle enclosed arrays explicitly.
+ (rapr1): Removed.
+ (scm_i_print_array_dimension): Use scm_i_cvref to also handle
+ enclosed arrays.
+ (scm_i_print_enclosed_array): New.
+ (tag_proto_table, tag_creator_table): Renamed former to latter.
+ Added "a" and "b" for strings and bitvectors, resp.
+ (scm_i_tag_to_prototype, scm_i_tag_to_creator): Renamed former to
+ latter. Tag "a" is in the table now, no need to handle it as a
+ legacy tag.
+ (scm_raprin1): Just call scm_iprin1.
+ (scm_array_creator, scm_array_prototype): Handle enclosed arrays
+ explicitly.
+ (scm_init_unif): Initialize scm_tc16_enclosed_array smob.
+ Use scm_i_print_array as printer for scm_tc16_array.
+
+2004-11-10 Marius Vollmer <mvo@zagadka.de>
+
+ * ramap.c (cind): Changed second arg to be pointer to long instead
+ of uniform vector.
+ (scm_ramapc): Allocate index vector with scm_malloc and not as
+ uniform vector. Wrap it in a frame so that it gets properly freed.
+ (scm_array_index_map_x): Likewise.
+
+ * unif.c: Changed all uses of scm_array_prototype to
+ scm_array_creator. (scm_i_get_old_prototype): Signal error when no
+ prototype is known.
+ (scm_uniform_array_read_x, scm_uniform_array_write): Reimplemented
+ in terms of scm_uniform_vector_read_x and
+ scm_uniform_vector_write, respectively. Strings and
+ bitvector support has been dropped.
+
+ * srfi-4.h, srfi-4.c: Do not include <libguile.h>, include the
+ needed files directly. Include config.h, <unistd.h> and <io.h>
+ when available.
+ (scm_uniform_vector_read_x, scm_uniform_vector_write): New.
+
+2004-11-09 Marius Vollmer <mvo@zagadka.de>
+
+ * gh_data.c (gh_uniform_vector_length): Properly use
+ scm_c_uniform_vector_length instead of scm_uniform_vector_length.
+
+2004-11-09 Marius Vollmer <marius.vollmer@uni-dortmund.de>
+
+ * srfi-4.h (scm_c_uniform_vector_ref, scm_c_uniform_vector_set_x):
+ New.
+ (scm_i_uniform_vector_creator): Removed.
+ (scm_i_generalized_vector_creator): New.
+ (scm_uniform_vector_length, scm_uniform_element_size): Do not
+ handle generalized vectors, only uniform numeric vectors.
+ (alloc_uvec): Do length check here...
+ (make_uvec): ...but not here.
+ (coerce_to_uvec): Use new generalized vector functions to handle
+ all kinds of vectors in one go.
+
+ * tags.h (scm_tc7_bvect): Renamed to scm_tc7_unused7, renaming the
+ remaining scm_tc7_unused tags to get a neatly ordered list.
+
+ * eq.c, evalext.c, gc-card.c, gc-mark.c, objects.c, print.c: Do no
+ longer handle scm_tc7_bvect bitvectors.
+
+ * ramap.c: Use the new generalized vector functions to handle all
+ vector like things.
+
+ * vectors.h, vectors.c (scm_is_vector, scm_c_vector_length,
+ scm_c_vector_ref, scm_c_vector_set_x, scm_generalized_vector_p,
+ scm_generalized_vector_length, scm_generalized_vector_ref,
+ scm_generalized_vector_set_x, scm_generalized_vector_to_list,
+ scm_is_generalized_vector, scm_c_generalized_vector_length,
+ scm_c_generalized_vector_ref, scm_c_generalized_vector_set_x):
+ New.
+
+ * unif.h, unif.c (scm_bitvector_p, scm_bitvector,
+ scm_make_bitvector, scm_bitvector_length, scm_bitvector_ref,
+ scm_bitvector_set_x, scm_list_to_bitvector, scm_bitvector_to_list,
+ scm_bitvector_fill_x, scm_is_bitvector, scm_c_make_bitvector,
+ scm_c_bitvector_length, scm_c_bitvector_ref,
+ scm_c_bitvector_set_x, scm_bitvector_elements,
+ scm_bitvector_release, scm_frame_bitvector_release,
+ scm_tc16_bitvector, bitvector_free, bitvector_print,
+ bitvector_equalp, count_ones, find_first_one): New.
+ (scm_bit_count, scm_bit_position, scm_bit_set_star_x,
+ scm_bit_count_star, scm_bit_invert_x, scm_istr2bve): Rewritten
+ using the new C API for bitvectors and maybe count_ones or
+ find_first_one, as appropriate.
+ (SCM_I_MAX_LENGTH, SCM_BITVECTOR_P, SCM_BITVECTOR_BASE,
+ SCM_SET_BITVECTOR_BASE, SCM_BITVECTOR_MAX_LENGTH,
+ SCM_BITVECTOR_LENGTH, SCM_MAKE_BITVECTOR_TAG,
+ SCM_SET_BITVECTOR_LENGTH): Removed. Replaced all uses with the
+ new functions from above.
+ (scm_i_proc_make_vector, scm_i_proc_make_string,
+ scm_i_proc_make_bitvector): Made non-static for use in
+ scm_i_generalized_vector_creator.
+ (scm_make_u1vector): Removed, replaced by scm_make_bitvector.
+ (scm_make_uve): Validate that the created object is a generalized
+ vector.
+ (scm_i_legacy_tag): Removed.
+ (scm_i_print_array): Do it here.
+ (scm_raprin1): Only print enclosed arrays.
+
+ * Makefile.am (DOT_DOC_FILES): Added srfi-4.doc.
+
2004-11-04 Marius Vollmer <marius.vollmer@uni-dortmund.de>
+ * srfi-4.c (make_uvec): Use SCM_I_SIZE_MAX instead of SIZE_MAX for
+ added portability.
+
+ * chars.c (scm_charnames, scm_charnums): Added "sp" as an alias
+ for "space". Thanks to Bruce Korb!
+
* rw.c (scm_read_string_x_partial): Bugfix, apply offset to dest
only after dest has been set. Thanks to Hyper Division!
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
+ following '#' 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-08 Han-Wen Nienhuys <hanwen@xs4all.nl>
+ * gc.c (scm_igc): put scm_gc_running-- before running hooks.
+
* inline.h (scm_double_cell): abort if GC running.
(scm_cell): idem.