Reported by Sylvain Beucler <beuc@beuc.net>.
* configure.ac: Check for 'pthread_cancel'.
* libguile/threads.c (scm_cancel_thread): Conditionalize on
!SCM_USE_PTHREAD_THREADS || defined HAVE_PTHREAD_CANCEL.
* test-suite/tests/threads.test (require-cancel-thread): New procedure.
("timed joining fails if timeout exceeded", "join-thread returns
timeoutval on timeout", "cancel succeeds", "handler result passed to
join", "can cancel self"): Use it.
* libguile/load.c (scm_i_mirror_backslashes): New function.
(scm_init_load_path): Call it to produce MS-Windows file names
with forward slashes.
(FILE_NAME_SEPARATOR_STRING): Define as "/" on all platforms.
* libguile/load.h (scm_i_mirror_backslashes): Add prototype.
* libguile/init.c (scm_boot_guile): Call scm_i_mirror_backslashes
on argv[0].
* libguile/filesys.c (scm_getcwd): Call scm_i_mirror_backslashes
on the directory name returned by getcwd.
* test-suite/tests/ports.test ("file name separators"): New test.
* libguile/simpos.c (scm_system_star) [!HAVE_FORK]: An
implementation of 'system*' for MS-Windows, which doesn't have
'fork', but can use 'spawnvp' in this case.
* libguile/list.c (scm_ilength): Test for SCM_NULL_OR_NIL_P only after
testing scm_is_pair. Conform to GNU coding standards.
* libguile/srfi-1.c (scm_srfi1_length_plus): Ditto.
Fixes <http://bugs.gnu.org/17296>.
* libguile/srfi-1.c (scm_srfi1_length_plus): Rewrite to raise an error
unless passed a proper or circular list, based on code from
'scm_ilength'.
* test-suite/tests/srfi-1.test (length+): Add tests.
Fixes <http://bugs.gnu.org/17661>.
Reported and fixed by Chris Vine <chris@cvine.freeserve.co.uk>.
* libguile/async.h (scm_c_call_with_blocked_asyncs)
(scm_c_call_with_unblocked_asyncs, scm_dynwind_block_asyncs)
(scm_dynwind_unblock_asyncs): Mark as SCM_API.
* THANKS: Add Chris Vine to fixes section.
Fixes <http://bugs.gnu.org/17466>.
Reported by J Kalbhenn <jkal@posteo.eu>.
* libguile/bytevectors.c (scm_c_shrink_bytevector): When BV is
contiguous, add use of 'SCM_BYTEVECTOR_SET_CONTENTS'.
* libguile/fports.c (scm_setvbuf): Initialize 'drained'. GCC 4.9 raises
a "may be used uninitialized warning" for 'drained', because it can't
tell that 'drained' is initialized anytime NDRAINED > 0.
* libguile/foreign-object.c:
* libguile/foreign-object.h (scm_make_foreign_object_1)
(scm_make_foreign_object_2, scm_make_foreign_object_3)
(scm_make_foreign_object_n): Change to take void * arguments, and to
add a comment to the header indicating that these are convenience
constructors.
* libguile/foreign-object.c:
* libguile/foreign-object.h (scm_foreign_object_unsigned_ref)
(scm_foreign_object_unsigned_set_x): New functions, equivalent to the
old scm_foreign_object_ref and scm_foreign_object_set_x.
* libguile/foreign-object.c:
* libguile/foreign-object.h (scm_foreign_object_signed_ref)
(scm_foreign_object_signed_set_x): New functions taking
scm_t_signed_bits.
* libguile/foreign-object.c:
* libguile/foreign-object.h (scm_foreign_object_ref)
(scm_foreign_object_set_x): New functions that take void*.
* libguile/goops.c (scm_sys_initialize_object): Refactor initialization
so that we don't ref uninitialized slots before initializing them.
This allows foreign slots, whose initial value is 0, to be initialized
via #:init-form.
* module/oop/goops.scm (@slot-ref, @slot-set!): Remove definitions.
Change callers to use struct-ref and struct-set!. slot-ref and
slot-set! were only marginally more efficient and were much more
dangerous. This change allows the standard accessors to work on
foreign slots; that was not the case before, as the 'u' fields of the
struct were read as if they were 'p' slots.
* module/language/tree-il/compile-glil.scm (lambda): Remove support for
compiling @slot-ref/@slot-set!. These were private to GOOPS.
* test-suite/tests/goops.test ("active-slot"): Update to not expect a
ref before initialization.
("foreign slots"): Add tests.
* libguile/finalizers.h:
* libguile/finalizers.c (run_finalizers_async_thunk): Call the new
scm_run_finalizers helper.
(scm_set_automatic_finalization_enabled, scm_run_finalizers): New
functions.
(scm_init_finalizers): Only set a finalizer notifier if automatic
finalization is enabled.
* doc/ref/libguile-smobs.texi (Garbage Collecting Smobs): Add discussion
of concurrency.
* doc/ref/api-smobs.texi (Smobs): Document new functions.
* libguile/script.c (realloc0): New helper.
(script_read_arg, scm_get_meta_args): Use realloc0, not realloc.
Signed-off-by: Dmitry Bogatov <KAction@gnu.org>
* libguile/list.c (scm_reverse_x): Do not validate first argument to
reverse! in advance. Instead undo reversal in error case.
Signed-off-by: David Kastrup <dak@gnu.org>
Signed-off-by: Mark H Weaver <mhw@netris.org>
This is a follow-up to e26ab06.
* libguile/print.c (scm_simple_format): Pass 1 to
SCM_VALIDATE_OPORT_VALUE, for 'destination'.
* test-suite/tests/format.test ("simple-format"): Add test.
* libguile/srfi-4.c (DEFINE_SRFI_4_C_FUNCS): Fix bad assumption that
width was a byte width. Thanks very much to Barry Fishman for the
report, and to Daniel Llorens for tracking it down.
* test-suite/standalone/Makefile.am (test_srfi_4_CFLAGS):
* test-suite/standalone/test-srfi-4.c: Add test.
* libguile/Makefile.am (install-data-local): Rename to...
(install-data-hook): ... this. This guarantees that the rule runs
after libguile-2.0.so has been installed.
* libguile/Makefile.am (gen-scmconfig.$(OBJEXT)): When cross-compiling,
pass -DCROSS_COMPILING=1.
(c-tokenize.$(OBJEXT)): Likewise.
* libguile/c-tokenize.lex (%top): Include <config.h> only when
CROSS_COMPILING is undefined.
* libguile/gen-scmconfig.c: Likewise.
* libguile/numbers.h (SCM_SRS): Rewrite preprocessor test to avoid
left-shifting negative integers, and to test more comprehensively for
the behavior we need. Rewrite fallback implementation to avoid
unspecified behavior.
* libguile/srfi-60.c (scm_srfi60_rotate_bit_field): Avoid division by
zero in the (start == end) case. Rewrite inum case to work with
unsigned integers in two's complement format.
* test-suite/tests/srfi-60.test ("rotate-bit-field"): Add more tests.
* libguile/numbers.c (scm_logbit_p): If the requested bit is the sign
bit (or above), check the sign portably. Otherwise, ensure that we're
testing the bit in a two's complement representation.
(left_shift_exact_integer): Avoid left-shifting negative integers.
* libguile/vm-i-scheme.c (ash): Avoid left-shifting negative integers.
* configure.ac: Add -fwrapv when using GCC (or compatible), if
supported.
* libguile/numbers.h (SCM_I_MAKINUM): Cast to scm_t_bits (unsigned)
before shifting, to avoid undefined behavior.
* libguile/guile-snarf.in (modern_snarf): Rewrite sed script to cope
with newlines in the snarfed code segments, or multiple code segments
on the same line.
* module/scripts/snarf-check-and-output-texi.scm (process-stream):
Strip all 'hash' tokens from the stream.
(do-command): Remove special cases that handled 'hash' tokens
in a few places.
* libguile/c-tokenize.lex: Add %top directive to include <config.h>
first. This fixes builds on systems that use Gnulib's <stdio.h> and
similar replacements. See <http://hydra.nixos.org/build/9259627> for
an example.
* libguile/libguile-2.0-gdb.scm: New file.
* libguile/Makefile.am (install-data-local): New target. Based on code
from GNU libstdc++.
(EXTRA_DIST): Add 'libguile-2.0-gdb.scm'.
* doc/ref/api-debug.texi (GDB Support): New section.
* libguile/iselect.h:
* libguile/threads.c:
* libguile/deprecated.h: Rely on Gnulib for sys/select.h.
* libguile/filesys.c: Rely on Gnulib for 'lstat' and 'mkstemp'.
* libguile/vectors.c (scm_is_vector): Deprecate use on weak vectors and
arrays.
(scm_is_simple_vector): Deprecate use on weak vectors.
(scm_vector_length, scm_c_vector_ref, scm_c_vector_set_x): Deprecate
use on arrays.
* libguile/sort.c: Adapt to check explicitly for arrays.