Mark H Weaver [Wed, 12 Mar 2014 00:34:28 +0000 (20:34 -0400)]
SRFI-60: Reimplement 'rotate-bit-field' on inums to be more portable.
* 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.
Mark H Weaver [Wed, 12 Mar 2014 00:31:38 +0000 (20:31 -0400)]
Use 'offsetof' to avoid undefined behavior.
* libguile/socket.c (SUN_LEN): Use 'offsetof'.
Mark H Weaver [Wed, 12 Mar 2014 00:19:17 +0000 (20:19 -0400)]
Avoid undefined behavior regarding signed integers and left shifts.
* 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.
Mark H Weaver [Wed, 12 Mar 2014 00:15:27 +0000 (20:15 -0400)]
Avoid signed overflow in random.c.
* libguile/random.c (scm_i_mask32): Avoid signed overflow from shifting
an unsigned char (promoted to signed int) 24 bits to the left.
Mark H Weaver [Wed, 12 Mar 2014 00:12:32 +0000 (20:12 -0400)]
Avoid side effects in argument to SCM_I_INUM.
* libguile/vm-i-system.c (halt): Avoid side effects in argument to
SCM_I_INUM.
Ludovic Courtès [Tue, 11 Mar 2014 23:03:03 +0000 (00:03 +0100)]
Thank Paul.
Ludovic Courtès [Tue, 11 Mar 2014 23:02:01 +0000 (00:02 +0100)]
Provide glthread/lock.h implementation in terms of Guile threads.
Fixes <http://bugs.gnu.org/14404>.
Thanks to Paul Eggert <eggert@cs.ucla.edu> for the suggestion.
* m4/gnulib-cache.m4: Avoid 'lock' module.
* m4/lock.m4, m4/threadlib.m4, lib/glthread/threadlib.c,
lib/glthread/lock.c: Remove.
* lib/glthread/lock.h: Rewrite in terms of libguile/threads.h.
* m4/gnulib-common.m4, m4/gnulib-comp.m4, lib/Makefile.am,
lib/unistd.in.h, maint.mk : Update, from Gnulib
v0.1-92-g546ff82.
* configure.ac (GNULIB_LOCK): Define 'GNULIB_LOCK'. Define
'USE_POSIX_THREADS' when building with pthread support.
* Makefile.am (noinst_HEADERS): New variable.
(BUILT_SOURCES): Add libguile/scmconfig.h.
(libguile/scmconfig.h): New target.
Mark H Weaver [Fri, 7 Mar 2014 09:21:46 +0000 (04:21 -0500)]
Improve compliance with C standards regarding signed integer shifts.
* 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.
Mark H Weaver [Fri, 7 Mar 2014 04:59:56 +0000 (23:59 -0500)]
chars.c: Remove duplicate 'const' specifiers.
* libguile/chars.c (scm_r5rs_charnums, scm_r6rs_charnums)
(scm_r7rs_charnums, scm_C0_control_charnums, scm_alt_charnums):
Remove duplicate 'const' specifiers.
Mark H Weaver [Fri, 7 Mar 2014 04:56:48 +0000 (23:56 -0500)]
snarf.h: Declare static const function name vars as SCM_UNUSED.
* libguile/snarf.h (SCM_DEFINE_GSUBR, SCM_DEFINE, SCM_PRIMITIVE_GENERIC,
SCM_DEFINE_PUBLIC, SCM_PROC, SCM_REGISTER_PROC, SCM_GPROC): Declare
static const function name variables as SCM_UNUSED to avoid spurious
warnings.
Mark H Weaver [Thu, 6 Mar 2014 22:17:11 +0000 (17:17 -0500)]
Make snarfing tools more robust to varied C preprocessor 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.
Mark H Weaver [Mon, 3 Mar 2014 22:20:03 +0000 (17:20 -0500)]
SRFI-19: Update the table of leap seconds.
* module/srfi/srfi-19.scm (leap-second-table): Update to include the two
most recent leap seconds.
Mark H Weaver [Sun, 2 Mar 2014 00:03:35 +0000 (19:03 -0500)]
Add missing files to the test-suite Makefile.
* test-suite/Makefile.am (SCM_TESTS): Add "tests/compiler.test",
"tests/encoding-escapes.test", "tests/encoding-iso88591.test",
"tests/encoding-iso88597.test", "tests/encoding-utf8.test",
"tests/pairs.test", "tests/records.test", "tests/sort.test",
"tests/srfi-17.test", "tests/srfi-18.test", "tests/srfi-98.test",
"tests/streams.test", "tests/vectors.test", and "tests/web-client.test".
Ludovic Courtès [Fri, 28 Feb 2014 20:00:11 +0000 (21:00 +0100)]
build: Make c-tokenize.c build on non-GNU systems.
* 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.
Mark H Weaver [Fri, 28 Feb 2014 02:31:57 +0000 (21:31 -0500)]
SRFI-18: Export 'current-thread'.
Fixes <http://debbugs.gnu.org/16890>.
Reported by Xin Wang <dram.wang@gmail.com>.
* module/srfi/srfi-18.scm: Reexport 'current-thread'.
* THANKS: Add "Xin Wang" to fixes section.
Mark H Weaver [Fri, 28 Feb 2014 03:04:39 +0000 (22:04 -0500)]
Rely on Gnulib for <unistd.h>.
* libguile/async.c:
* libguile/backtrace.c:
* libguile/error.c:
* libguile/filesys.c:
* libguile/fports.c:
* libguile/gc-malloc.c:
* libguile/gc.c:
* libguile/gdbint.c:
* libguile/init.c:
* libguile/ioext.c:
* libguile/load.c:
* libguile/mallocs.c:
* libguile/mkstemp.c:
* libguile/ports.c:
* libguile/posix.c:
* libguile/r6rs-ports.c:
* libguile/random.c:
* libguile/rw.c:
* libguile/scmsigs.c:
* libguile/script.c:
* libguile/simpos.c:
* libguile/socket.c:
* libguile/stime.c:
* libguile/strports.c:
* libguile/threads.c: Unconditionally include <unistd.h>.
Mark H Weaver [Fri, 28 Feb 2014 02:24:40 +0000 (21:24 -0500)]
Rely on Gnulib for fsync, link, readlink, mkdir, rmdir, and rename.
* libguile/filesys.c: Remove 'fsync' wrapper for MinGW.
(scm_link, scm_readlink, scm_mkdir, scm_rmdir): Define these
unconditionally.
(my_rename): Remove.
(scm_rename): Use 'rename' instead of 'my_rename'.
Mark H Weaver [Thu, 27 Feb 2014 03:15:13 +0000 (22:15 -0500)]
Import Gnulib modules: link, fsync, readlink, rename, mkdir, rmdir, unistd.
* lib/fsync.c:
* lib/link.c:
* lib/mkdir.c:
* lib/strdup.c:
* m4/fsync.m4:
* m4/link.m4:
* m4/mkdir.m4:
* m4/strdup.m4: New files.
* lib/Makefile.am
* m4/gnulib-cache.m4
* m4/gnulib-comp.m4: Add modules.
Mark H Weaver [Tue, 25 Feb 2014 22:38:34 +0000 (17:38 -0500)]
Fix typo in manual.
* doc/ref/api-foreign.texi (Void Pointers and Byte Access):
(rnrs bytevector) --> (rnrs bytevectors).
Ludovic Courtès [Thu, 27 Feb 2014 13:14:21 +0000 (14:14 +0100)]
build: Fix out-of-source-tree installation of libguile-2.0-gdb.scm.
* libguile/Makefile.am (install-data-local): Use $< instead of just
libguile-2.0-gdb.scm. Quote file names in $(INSTALL_DATA) invocation.
Ludovic Courtès [Thu, 20 Feb 2014 21:57:26 +0000 (22:57 +0100)]
Make sure 'ftw' allows directory traversal when running as root.
* module/ice-9/ftw.scm (stat-dir-readable?-proc): Return #t when UID is
zero. Reported Frank Terbeck <ft@bewatermyfriend.org>.
Ludovic Courtès [Thu, 20 Feb 2014 21:56:17 +0000 (22:56 +0100)]
build: Bail out when 'PKG_CHECK_MODULES' is missing.
* configure.ac: Add 'm4_pattern_forbid' invocation.
Ludovic Courtès [Mon, 17 Feb 2014 14:40:34 +0000 (15:40 +0100)]
Add GDB extension to support Guile.
* 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.
Ludovic Courtès [Tue, 18 Feb 2014 22:04:01 +0000 (23:04 +0100)]
Add (system base types).
* module/system/base/types.scm, test-suite/tests/types.test: New files.
* module/Makefile.am (SYSTEM_BASE_SOURCES): Add system/base/types.scm.
* test-suite/Makefile.am (SCM_TESTS): Add tests/types.test.
Mark H Weaver [Wed, 12 Feb 2014 19:28:03 +0000 (14:28 -0500)]
Fix inline asm of VM numerical operations for x32.
* libguile/vm-i-scheme.c (_CX): Choose register size based on
'SIZEOF_VOID_P' instead of '__x86_64__'.
Mark H Weaver [Wed, 12 Feb 2014 22:47:13 +0000 (17:47 -0500)]
Rely on Gnulib for 'select', 'lstat', and 'mkstemp'.
* 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'.
Mark H Weaver [Wed, 12 Feb 2014 22:43:35 +0000 (17:43 -0500)]
Import 'lstat' and 'mkstemp' modules from Gnulib.
* lib/mkstemp.c:
* lib/secure_getenv.c:
* lib/tempname.c:
* lib/tempname.h:
* m4/mkstemp.m4:
* m4/secure_getenv.m4:
* m4/tempname.m4: New files.
* lib/Makefile.am:
* m4/gnulib-cache.m4:
* m4/gnulib-comp.m4: Add modules.
David Thompson [Sun, 19 Jan 2014 18:16:02 +0000 (13:16 -0500)]
Add cooperative REPL server module.
Modified-by: Mark H Weaver <mhw@netris.org>
* module/system/repl/coop-server.scm: New module.
* module/system/repl/repl.scm (start-repl): Extract body to start-repl*.
(start-repl*): New procedure.
(run-repl): Extract body to run-repl*.
(run-repl*): New procedure.
* module/system/repl/server.scm (run-server): Extract body to
run-server*.
(run-server*): New procedure.
* doc/ref/api-evaluation.texi (Cooperative REPL Servers): New node.
* module/Makefile.am (SYSTEM_SOURCES): Add system/repl/coop-server.scm.
Mark H Weaver [Tue, 4 Feb 2014 17:18:22 +0000 (12:18 -0500)]
REPL Server: Fix 'stop-server-and-clients!'.
* module/system/repl/server.scm: Import (ice-9 match) and (srfi srfi-1).
(*open-sockets*): Add comment. This is now a list of pairs with a
'force-close' procedure in the cdr.
(close-socket!): Add comment noting that it is unsafe to call this
from another thread.
(add-open-socket!): Add 'force-close' argument, and put it in the cdr
of the '*open-sockets*' entry.
(stop-server-and-clients!): Use 'match'. Remove the first element
from *open-sockets* immediately. Call the 'force-close' procedure
instead of 'close-socket!'.
(errs-to-retry): New variable.
(run-server): Add a pipe, used in the 'force-close' procedure to
cleanly shut down the server. Put the server socket into non-blocking
mode. Use 'select' to monitor both the server socket and the pipe.
Don't call 'add-open-socket!' on the client-socket. Close the pipe
and the server socket cleanly when we're asked to shut down.
(serve-client): Call 'add-open-socket!' with a 'force-close' procedure
that cancels the thread. Set the thread cleanup handler to call
'close-socket!', instead of calling it in the main body.
* doc/ref/api-evaluation.texi (REPL Servers): Add a caveat to the manual
entry for 'stop-servers-and-clients!'.
Andy Wingo [Tue, 11 Feb 2014 19:59:38 +0000 (20:59 +0100)]
guile.m4 tweaks
* meta/guile.m4 (GUILE_PKG): Don't print "checking for guile 2.0" if
we've already found 2.2. Print the correct effective version at the
end.
(GUILE_PROGS): Allow prereleases, whose micro version does not yet
match the effective version. Default to the already-chosen effective
version.
Mark H Weaver [Sat, 8 Feb 2014 17:35:35 +0000 (12:35 -0500)]
Fix improper use of 'with-locale'.
* test-suite/guile-test (run-tests): Use 'setlocale' with check
instead of 'with-locale'.
Andy Wingo [Sat, 8 Feb 2014 15:13:54 +0000 (16:13 +0100)]
Deprecate the use of the vector interface on arrays
* 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.
Andy Wingo [Sat, 8 Feb 2014 15:02:59 +0000 (16:02 +0100)]
Deprecate use of vector-length, vector-ref, vector-set! as primitive-generics
* libguile/vectors.c (scm_vector_length, scm_c_vector_ref):
(scm_c_vector_set_x): Deprecate the use of vector-length, vector-ref,
and vector-set! as primitive generics.
Andy Wingo [Sat, 8 Feb 2014 13:18:40 +0000 (14:18 +0100)]
Deprecate general "uniform-vector" interface
* libguile/uniform.h:
* libguile/uniform.c (scm_is_uniform_vector, scm_uniform_vector_p)
(scm_c_uniform_vector_length, scm_uniform_vector_length)
(scm_uniform_vector_element_type, scm_uniform_vector_element_size)
(scm_c_uniform_vector_ref, scm_uniform_vector_ref):
(scm_c_uniform_vector_set_x, scm_uniform_vector_set_x):
(scm_uniform_vector_to_list)
(scm_uniform_vector_elements, scm_uniform_vector_writable_elements):
Deprecate. This interface lacked both generality and specificity.
The general replacement is array-length, array-ref, and friends on the
scheme side, or the array handle interface on the C side. On the
specific side of things, there are the specific bytevector, srfi-4,
and bitvector interfaces.
* test-suite/tests/arrays.test:
* test-suite/tests/bitvectors.test:
* test-suite/tests/ports.test:
* test-suite/tests/srfi-4.test: Update to use array interfaces.
* doc/ref/api-foreign.texi (Void Pointers and Byte Access):
* doc/ref/srfi-modules.texi (SRFI-4): Update.
Andy Wingo [Sat, 8 Feb 2014 12:52:21 +0000 (13:52 +0100)]
Simplify srfi-4 C implementation
* libguile/srfi-4.c (DEFINE_SRFI_4_C_FUNCS): In the raw element
accessors (e.g scm_u32vector_writable_elements), only permit
bytevectors, as the constructors will only make bytevectors. This
harmonizes with the Scheme interfaces as well, which expect packed
bytevectors.
(scm_make_srfi_4_vector): Knowing that the new value is a bytevector
with base 0 and inc 1, simplify initialization.
Andy Wingo [Sat, 8 Feb 2014 13:27:49 +0000 (14:27 +0100)]
Deprecate htons, htonl, ntohs, ntohl
* libguile/sockets.h:
* libguile/sockets.c:
* libguile/deprecated.h:
* libguile/deprecated.c (scm_htons, scm_htonl, scm_ntohs, scm_ntohl):
Deprecate. Bytevectors adequately subsume their functionality.
* doc/ref/posix.texi:
* test-suite/tests/00-socket.test: Update.
Mark H Weaver [Sat, 8 Feb 2014 02:42:28 +0000 (21:42 -0500)]
Improve handling of locales in the test suite.
* test-suite/guile-test (run-tests): Load each test file within
(with-locale "C" ...).
* test-suite/tests/encoding-iso88591.test:
* test-suite/tests/encoding-iso88597.test:
* test-suite/tests/encoding-utf8.test:
* test-suite/tests/srfi-14.test: Remove broken code to save and restore
the previous locale.
* test-suite/tests/bytevectors.test:
* test-suite/tests/format.test:
* test-suite/tests/regexp.test:
* test-suite/tests/srfi-19.test:
* test-suite/tests/tree-il.test: Make sure 'setlocale' is defined before
calling it.
Mark H Weaver [Fri, 7 Feb 2014 21:53:48 +0000 (16:53 -0500)]
Better error reporting in 'weak-vector-ref' and 'weak-vector-set!'.
* libguile/weaks.c (scm_c_weak_vector_ref, scm_c_weak_vector_set_x):
Pass procedure name to 'scm_out_of_range'.
Mark H Weaver [Fri, 7 Feb 2014 21:38:58 +0000 (16:38 -0500)]
Make size argument optional to 'make-doubly-weak-hash-table'; fix docs.
* libguile/hashtab.c (scm_make_doubly_weak_hash_table): Make 'size'
argument optional, like the weak hash table constructors.
* doc/ref/api-memory.texi (Weak hash tables): Document that 'size'
argument is optional for the weak hash table constructors.
Mark H Weaver [Fri, 7 Feb 2014 21:26:38 +0000 (16:26 -0500)]
Fix 'weak-vector?' doc: Weak hash tables are not weak vectors.
* doc/ref/api-memory.texi (Weak vectors): In 'weak-vector?' entry, don't
claim that weak hash tables are weak vectors. Remove statement that
weak vectors are mainly useful for implementing weak hash tables.
Andy Wingo [Fri, 7 Feb 2014 17:04:20 +0000 (18:04 +0100)]
Fix truncated-print for uniform vectors
* module/ice-9/pretty-print.scm (truncated-print): Use bytevector?
instead of uniform-vector?; the latter could be true for shared arrays
with non-zero lower bounds.
Andy Wingo [Fri, 7 Feb 2014 17:00:04 +0000 (18:00 +0100)]
(srfi srfi-4 gnu) uses private define-bytevector-type from (srfi srfi-4)
* module/srfi/srfi-4/gnu.scm: Re-use implementation of
define-bytevector-type from srfi-4.
Andy Wingo [Fri, 7 Feb 2014 16:57:30 +0000 (17:57 +0100)]
Remove private unused duplicate c32/c64vector definitions
* module/srfi/srfi-4.scm: Remove vestigial definitions for c32vectors
and c64vectors. Those are defined in (srfi srfi-4 gnu).
Andy Wingo [Fri, 7 Feb 2014 16:53:01 +0000 (17:53 +0100)]
SRFI-4 predicates, length accessors only accept bytevectors (not arrays)
* module/srfi/srfi-4.scm (define-bytevector-type): For the predicates
and length accessors, only accept bytevectors. Since arrays don't
work for u32vector-ref et al, they shouldn't pass u32vector?.
Andy Wingo [Fri, 7 Feb 2014 11:42:44 +0000 (12:42 +0100)]
Deprecate vector-ref, vector-length, vector-set! on weak vectors
* libguile/vectors.c (scm_vector_length, scm_c_vector_length):
(scm_c_vector_ref, scm_c_vector_set_x): Deprecate the use of these
procedures on weak vectors.
* test-suite/tests/guardians.test:
* test-suite/tests/weaks.test: Adapt test suites.
Andy Wingo [Fri, 7 Feb 2014 11:25:05 +0000 (12:25 +0100)]
Add weak-vector-length, weak-vector-ref, weak-vector-set!
* libguile/weaks.c (scm_is_weak_vector, scm_c_weak_vector_length):
(scm_c_weak_vector_ref, scm_c_weak_vector_set_x): New interfaces for
dealing with weak vectors from C.
(scm_weak_vector_length, scm_weak_vector_ref, scm_weak_vector_set_x):
New Scheme interfaces to weak vectors; to be used instead of
vector-length, vector-ref, etc.
* module/ice-9/weak-vector.scm: Export the new interfaces.
* doc/ref/api-memory.texi (Weak vectors): Document them.
Mark H Weaver [Thu, 6 Feb 2014 04:40:25 +0000 (23:40 -0500)]
Remove outdated documentation of LTDL_LIBRARY_PATH.
* doc/ref/guile-invoke.texi (Environment Variables): Remove
documentation of 'LTDL_LIBRARY_PATH'.
Mark H Weaver [Thu, 6 Feb 2014 04:25:32 +0000 (23:25 -0500)]
Document 'equal?' in list of R6RS incompatibilities.
* doc/ref/r6rs.texi (R6RS Incompatibilities): Mention that 'equal?'
may not terminate when applied to cyclic datums.
Mark H Weaver [Tue, 4 Feb 2014 19:21:13 +0000 (14:21 -0500)]
REPL Server: Remove unneeded error case in 'run-server'.
* module/system/repl/server.scm (run-server): Remove case that handled
'interrupt' exceptions specially. It is no longer needed since
e6c8e6047ed2e772cc4e1fb5ad4d389e5c616feb (REPL Server: Don't establish
a SIGINT handler.)
Mark H Weaver [Tue, 4 Feb 2014 17:08:48 +0000 (12:08 -0500)]
REPL Server: Redirect warnings to client socket.
* module/system/repl/server.scm (serve-client): Use parameterize.
Redirect warnings to client socket.
Mark H Weaver [Tue, 4 Feb 2014 04:09:23 +0000 (23:09 -0500)]
Don't check HAVE_ALARM, which no longer exists.
* libguile/scmsigs.c (scm_alarm): Remove check for HAVE_ALARM.
Conditionalize only on HAVE_DECL_ALARM.
Mark H Weaver [Tue, 4 Feb 2014 02:04:39 +0000 (21:04 -0500)]
Update Gnulib to
v0.1-77-gd9361da
Mark H Weaver [Mon, 3 Feb 2014 02:13:47 +0000 (21:13 -0500)]
define-values: Blackhole 'dummy'; work around lack of toplevel hygiene.
* module/ice-9/boot-9.scm (define-values): Use 'generate-temporaries' to
generate a fresh name for 'dummy', to work around the lack of hygiene
for macro-introduced toplevel identifiers. Blackhole 'dummy' to avoid
keeping garbage alive. Add more comments.
Mark H Weaver [Sun, 12 Jan 2014 09:43:37 +0000 (04:43 -0500)]
Implement R7RS 'define-values'.
* module/ice-9/boot-9.scm (%define-values-arity-error): New procedure.
(define-values): New macro.
* doc/ref/api-binding.texi (Binding Multiple Values): Add docs.
* test-suite/tests/syntax.test: Add tests.
Mark H Weaver [Wed, 29 Jan 2014 07:20:01 +0000 (02:20 -0500)]
Implement SRFI-64 - A Scheme API for test suites.
* module/srfi/srfi-64.scm: New file.
* module/srfi/srfi-64/testing.scm: New file.
* module/Makefile.am: Add rule for srfi-64.go dependency on
srfi-64/testing.scm.
(SRFI_SOURCES): Add srfi/srfi-64.scm.
(NOCOMP_SOURCES): Add srfi/srfi-64/testing.scm.
* doc/ref/srfi-modules.texi (SRFI-64): New node.
* test-suite/tests/srfi-64.test: New file.
* test-suite/tests/srfi-64-test.scm: New file.
* test-suite/Makefile.am (SCM_TESTS): Add test-suite/tests/srfi-64.test.
(EXTRA_DIST): Add tests/srfi-64-test.scm.
Mark H Weaver [Mon, 27 Jan 2014 22:17:23 +0000 (17:17 -0500)]
Implement SRFI-43 Vector Library.
* module/srfi/srfi-43.scm: New file.
* module/Makefile.am (SRFI_SOURCES): Add module/srfi/srfi-43.scm.
* test-suite/tests/srfi-43.test: New file.
* test-suite/Makefile.am (SCM_TESTS): Add test-suite/tests/srfi-43.test.
* doc/ref/srfi-modules.texi (SRFI-43, SRFI-43 Constructors)
(SRFI-43 Predicates, SRFI-43 Selectors, SRFI-43 Iteration)
(SRFI-43 Searching, SRFI-43 Mutators, SRFI-43 Conversion): New nodes.
Mark H Weaver [Tue, 28 Jan 2014 22:44:22 +0000 (17:44 -0500)]
Compile numerical comparisons with more than 2 arguments to VM code.
* module/language/tree-il/primitives.scm (chained-comparison-expander):
New procedure.
(*primitive-expand-table*): Add primitive expanders for '<', '>',
'<=', '>=', and '='.
Mark H Weaver [Fri, 31 Jan 2014 09:01:12 +0000 (04:01 -0500)]
Revert "Primitive expand numerical comparisons with more than 2 arguments."
This reverts commit
4dc4b86e858d391d20d0ea2551614a89fa3bd4d1.
Mark H Weaver [Tue, 28 Jan 2014 22:44:22 +0000 (17:44 -0500)]
Primitive expand numerical comparisons with more than 2 arguments.
* module/language/tree-il/primitives.scm (chained-comparison-expander):
New procedure.
(*primitive-expand-table*): Add primitive expanders for '<', '>',
'<=', '>=', and '='.
Mark H Weaver [Tue, 28 Jan 2014 21:54:10 +0000 (16:54 -0500)]
Add 'positive?' and 'negative?' as primitives.
* module/language/tree-il/primitives.scm (*interesting-primitive-names*)
(*effect-free-primitives*): Add 'positive?' and 'negative?'.
(*primitive-expand-table*): Add primitive expanders for 'positive?'
and 'negative?'.
Andy Wingo [Tue, 28 Jan 2014 21:28:08 +0000 (22:28 +0100)]
Minor for-each speedup
* module/ice-9/boot-9.scm (for-each): Minor speedup by unrolling
tortoise/hare loop.
Mark H Weaver [Fri, 24 Jan 2014 05:21:17 +0000 (00:21 -0500)]
Implement SRFI-111 Boxes.
* module/srfi/srfi-111.scm: New file.
* module/Makefile.am (SRFI_SOURCES): Add srfi/srfi-111.scm.
* test-suite/tests/srfi-111.test: New file.
* test-suite/Makefile.am (SCM_TESTS): Add tests/srfi-111.test.
* doc/ref/srfi-modules.texi (SRFI-111): New node.
Mark H Weaver [Thu, 23 Jan 2014 16:37:36 +0000 (11:37 -0500)]
Fix thread-unsafe lazy initializations.
* libguile/backtrace.c (print_exception_var): New static variable.
(init_print_exception_var): New static function.
(scm_print_exception): Remove thread-unsafe lazy initialization.
Call 'init_print_exception_var' using 'scm_i_pthread_once'.
Use 'print_exception_var'.
* libguile/continuations.c (call_cc): New static variable.
(init_call_cc): New static function.
(scm_i_call_with_current_continuation): Remove thread-unsafe lazy
initialization. Call 'init_call_cc' using 'scm_i_pthread_once'.
* libguile/debug.c (local_eval_var): New static variable.
(init_local_eval_var): New static function.
(scm_local_eval): Remove lazy initialization using mutexes.
Call 'init_local_eval_var' using 'scm_i_pthread_once'.
Use 'scm_variable_ref' instead of 'SCM_VARIABLE_REF'.
* libguile/eval.c (map_var, for_each_var): New static variables.
(init_map_var, init_for_each_var): New static functions.
(scm_map, scm_for_each): Remove thread-unsafe lazy initializations.
Call 'init_map_var' (or 'init_for_each_var') using 'scm_i_pthread_once'.
Use 'map_var' (or 'for_each_var').
* libguile/frames.c (frame_arguments_var): New static variable.
(init_frame_arguments_var): New static function.
(scm_frame_arguments): Remove thread-unsafe lazy initialization.
Call 'init_frame_arguments_var' using 'scm_i_pthread_once'.
Use 'frame_arguments_var'. Use 'scm_variable_ref' instead of
'SCM_VARIABLE_REF'.
* libguile/goops.c (delayed_compile_var): New static variable.
(init_delayed_compile_var): New static function.
(make_dispatch_procedure): Remove thread-unsafe lazy initialization.
Call 'init_delayed_compile_var' using 'scm_i_pthread_once'.
Use 'delayed_compile_var'. Use 'scm_variable_ref' instead of
'SCM_VARIABLE_REF'.
* libguile/instructions.c (instructions_by_name): New static variable.
(init_instructions_by_name): New static function.
(scm_lookup_instruction_by_name): Remove thread-unsafe lazy
initialization. Call 'init_instructions_by_name' using
'scm_i_pthread_once'.
* libguile/ports.c (current_warning_port_var)
(current_warning_port_once): New static variables.
(init_current_warning_port_var): New static function.
(scm_current_warning_port): Remove lazy initialization using mutexes.
Call 'init_current_warning_port_var' using 'scm_i_pthread_once'.
Use 'current_warning_port_var'.
(scm_set_current_warning_port): Remove thread-unsafe lazy initialization.
Call 'init_current_warning_port_var' using 'scm_i_pthread_once'.
Use 'current_warning_port_var'.
* libguile/strings.c (null_stringbuf): New static variable.
(init_null_stringbuf): New static function.
(scm_i_make_string): Remove thread-unsafe lazy initialization.
Call 'init_null_stringbuf' using 'scm_i_pthread_once'.
* libguile/strports.c (eval_string_var, k_module): New static variables.
(init_eval_string_var_and_k_module): New static function.
(scm_eval_string_in_module): Remove lazy initialization using mutexes.
Call 'init_eval_string_var_and_k_module' using 'scm_i_pthread_once'.
Use 'eval_string_var'.
* libguile/throw.c (CACHE_VAR): Remove incorrect macro.
(catch_var, throw_var, with_throw_handler_var): New static variables.
(scm_catch, scm_catch_with_pre_unwind_handler): Remove thread-unsafe
lazy initialization. Use 'catch_var'.
(init_with_throw_handler_var): New static function.
(scm_with_throw_handler): Remove thread-unsafe lazy initialization.
Call 'init_with_throw_handler_var' using 'scm_i_pthread_once'.
Use 'with_throw_handler_var'.
(scm_throw): Remove thread-unsafe lazy initialization.
Use 'throw_var'.
(scm_init_throw): Initialize 'catch_var' and 'throw_var'.
Mark H Weaver [Thu, 23 Jan 2014 15:09:29 +0000 (10:09 -0500)]
Improve correctness and consistency of 'eval-when' usage.
* module/ice-9/boot-9.scm:
* module/ice-9/i18n.scm:
* module/ice-9/poll.scm:
* module/ice-9/popen.scm:
* module/ice-9/r6rs-libraries.scm:
* module/oop/goops.scm:
* module/oop/goops/compile.scm:
* module/oop/goops/dispatch.scm:
* module/srfi/srfi-88.scm:
* module/system/foreign.scm:
* module/texinfo/serialize.scm: Change most uses of 'compile' to
'expand', except where we must avoid it during initial bootstrap
before the module system is loaded. Remove redundant uses of
'compile' where 'expand' is also given. Standardize on the
"(expand load eval)" order of conditions.
Mark H Weaver [Thu, 23 Jan 2014 08:49:21 +0000 (03:49 -0500)]
Improve docs for 'eval-when'.
* doc/ref/api-macros.texi (Eval When): Explain in detail what each
condition means, including 'expand' which was previously undocumented.
Change the example to use (expand load eval) and recommend that set of
conditions, instead of (compile load eval) which was previously
recommended and shown in the example.
Ludovic Courtès [Tue, 21 Jan 2014 22:39:30 +0000 (23:39 +0100)]
Buffered custom binary input ports correctly handle partial read requests.
* libguile/r6rs-ports.c (cbip_fill_input): Always initialize 'read_pos'
when BUFFERED.
* test-suite/tests/r6rs-ports.test ("7.2.7 Input Ports")["custom binary
input port buffered partial reads"]: New test.
Mark H Weaver [Tue, 21 Jan 2014 21:21:36 +0000 (16:21 -0500)]
Fix nested block comment example in manual.
Reported by Chris K. Jester-Young <cky944@gmail.com>.
* doc/ref/api-evaluation.texi (Block Comments): Fix example.
Mark H Weaver [Tue, 21 Jan 2014 21:06:40 +0000 (16:06 -0500)]
REPL Server: Don't establish a SIGINT handler.
* module/system/repl/server.scm (call-with-sigint): Remove.
(accept-new-client): Don't wrap 'call-with-sigint' around call to
'accept'.
Mark H Weaver [Tue, 21 Jan 2014 20:50:58 +0000 (15:50 -0500)]
Write out HTTP Basic auth headers correctly.
Fixes <http://bugs.gnu.org/14370>.
Reported by Atom X Zane <atomx@deadlyhead.com>.
* module/web/http.scm (write-credentials): Handle the Basic auth scheme
correctly.
* test-suite/tests/web-http.test (pass-if-round-trip): Use
'pass-if-equal' for better error reporting.
("request headers"): Add tests.
* THANKS: Add "Atom X Zane" to bug fix section.
Andy Wingo [Sat, 18 Jan 2014 20:08:52 +0000 (21:08 +0100)]
Add support for content-disposition
* module/web/http.scm ("Content-Disposition"): Add a parser and
serializer. Defined in RFC2616 section 19.5.1.
* test-suite/tests/web-http.test ("entity headers"): New test case.
Ludovic Courtès [Thu, 16 Jan 2014 22:43:31 +0000 (23:43 +0100)]
Custom binary input ports support 'setvbuf'.
* libguile/r6rs-ports.c (CBIP_BUFFER_SIZE): Adjust comment. Set to 8KiB.
(SCM_SET_CBIP_BYTEVECTOR): New macro.
(cbip_setvbuf): New function.
(make_cbip): Set PORT's 'setvbuf' internal field.
(cbip_fill_input): Check whether PORT is buffered. When unbuffered,
check whether BV can hold C_REQUESTED bytes, and allocate a new
bytevector if not; copy the data back from BV to c_port->read_pos.
Remove 'again' label, and don't loop there.
* test-suite/tests/r6rs-ports.test ("7.2.7 Input Ports")["custom binary
input port unbuffered & 'port-position'", "custom binary input port
unbuffered & 'read!' calls", "custom binary input port, unbuffered
then buffered", "custom binary input port, buffered then unbuffered"]:
New tests.
* doc/ref/api-io.texi (R6RS Binary Input): Document the buffering of
custom binary input ports, and link to 'setvbuf'.
Ludovic Courtès [Thu, 16 Jan 2014 22:52:01 +0000 (23:52 +0100)]
Prepare 'setvbuf' to support for non-file ports.
* libguile/ports-internal.h (struct scm_port_internal): Add
setvbuf' field. Change 'pending_eof' to a 1-bit unsigned char.
* libguile/ports.c (scm_new_port_table_entry): Clear 'pti->setvbuf'.
* libguile/fports.c (scm_setvbuf): Accept any open port, and error out
when PORT's setvbuf' field is NULL. Remove explicit 'scm_gc_free' calls.
(scm_i_fdes_to_port): Set PORT's 'setvbuf' field.
* test-suite/tests/ports.test ("setvbuf")["closed port", "string port"]:
New tests.
* doc/ref/posix.texi (Ports and File Descriptors): Suggest that
'setvbuf' works for different port types.
Arne Babenhauserheide [Fri, 17 Jan 2014 15:25:16 +0000 (16:25 +0100)]
doc: embedding example more readable.
* doc/ref/guile.texi (A Sample Guile Main Program): Easier to read
example code and building split into 2 subsections.
Signed-off-by: Ludovic Courtès <ludo@gnu.org>
Ludovic Courtès [Fri, 17 Jan 2014 17:20:09 +0000 (18:20 +0100)]
Thank Sree Harsha.
Ludovic Courtès [Fri, 17 Jan 2014 17:18:41 +0000 (18:18 +0100)]
Arrange so that 'file-encoding' does not truncate the encoding name.
Fixes <http://bugs.gnu.org/16463>.
Reported by Sree Harsha Totakura <sreeharsha@totakura.in>.
* libguile/read.c (ENCODING_NAME_MAX_SIZE): New macro.
(SCM_ENCODING_SEARCH_SIZE): Change to 500 + ENCODING_NAME_MAX_SIZE.
(scm_i_scan_for_encoding): Return NULL if there's less than
ENCODING_NAME_MAX_SIZE bytes once "coding: *" has been read.
* test-suite/tests/coding.test ("line
comment")["http://bugs.gnu.org/16463"]: New test.
Ludovic Courtès [Wed, 15 Jan 2014 22:41:23 +0000 (23:41 +0100)]
web: Don't throw if a response is longer than its Content-Length says.
* module/web/response.scm (make-delimited-input-port): Read at most LEN
bytes from PORT, instead of trying to read more and returning an error
if more is available. Try again when 'get-bytevector-n!' return zero.
* test-suite/tests/web-response.test (example-1): Add garbage after the
body itself.
Ludovic Courtès [Wed, 15 Jan 2014 22:07:25 +0000 (23:07 +0100)]
Custom binary input ports sanity-check the return value of 'read!'.
* libguile/r6rs-ports.c (cbip_fill_input): Throw an exception when
C_OCTETS is greater than what was requested.
* test-suite/tests/r6rs-ports.test ("7.2.7 Input Ports")["custom binary
input port 'read!' returns too much"]: New test.
Mark H Weaver [Wed, 15 Jan 2014 08:08:32 +0000 (03:08 -0500)]
Document that we support srfi-46 and add it to %cond-expand-features.
* module/ice-9/boot-9.scm (%cond-expand-features): Add srfi-46.
* doc/ref/srfi-modules.texi (SRFI-0): Add srfi-46 to the list of core
features.
(SRFI-46): New node.
* doc/ref/api-macros.texi (Syntax Rules): Mention that the custom
ellipsis identifier support is specified by SRFI-46.
* test-suite/tests/syntax.test ("syntax-rules"): Add ellipsis hygiene
test from SRFI-46.
Mark H Weaver [Wed, 15 Jan 2014 07:37:46 +0000 (02:37 -0500)]
Document that we support srfi-87 and add it to %cond-expand-features.
* module/ice-9/boot-9.scm (%cond-expand-features): Add srfi-87.
* doc/ref/srfi-modules.texi (SRFI-0): Add srfi-87 to the list of core
features.
(SRFI-87): New node.
Mark H Weaver [Wed, 15 Jan 2014 04:29:50 +0000 (23:29 -0500)]
print: In R7RS |...| symbols, print most graphic characters unescaped.
* libguile/print.c (print_r7rs_extended_symbol): Print any unicode
graphic character other than '|' or '\' unescaped. Escape any spacing
character other than ASCII space.
Mark H Weaver [Tue, 14 Jan 2014 22:38:30 +0000 (17:38 -0500)]
print: Support R7RS |...| symbol notation.
* libguile/print.c (scm_print_opts): Add 'r7rs-symbols' print option.
(symbol_has_extended_read_syntax): If the 'r7rs-symbols' option is
enabled, then disallow '|' and '\' from bare symbols.
(print_extended_symbol): Use 'scm_lfwrite' and 'scm_putc' instead of
'display_string' and 'display_character' when printing ASCII literals.
(print_r7rs_extended_symbol): New static function.
(scm_i_print_symbol_name): If the 'r7rs-symbols' option is enabled,
use 'print_r7rs_extended_symbol' instead of 'print_extended_symbol'.
* libguile/private-options.h (SCM_PRINT_R7RS_SYMBOLS_P): New macro.
(SCM_N_PRINT_OPTIONS): Increment.
* doc/ref/api-evaluation.texi (Scheme Write): Mention 'r7rs-symbols'
print option.
* test-suite/tests/print.test ("write"): Add tests.
Mark H Weaver [Sun, 12 Jan 2014 12:55:22 +0000 (07:55 -0500)]
read: Support R7RS |...| symbol notation.
* libguile/private-options.h (SCM_R7RS_SYMBOLS_P): New macro.
(SCM_N_READ_OPTIONS): Increment.
* libguile/read.c (scm_read_opts): Add entry for 'r7rs-symbols'.
(t_read_opts): Add field for 'r7rs_symbols_p'.
(scm_read_string_like_syntax): New function based on earlier
'scm_read_string' that handles either string literals or R7RS quoted
symbols (delimited by vertical bars), depending on the value of 'chr'.
(scm_read_string): Reimplement based on 'scm_read_string_like_syntax'.
(scm_read_r7rs_symbol): New static function.
* doc/ref/api-data.texi (Symbol Read Syntax): Briefly describe the R7RS
symbol syntax, mention the 'r7rs-symbols' read option, and give some
examples.
* doc/ref/api-evaluation.texi (Scheme Read): Mention the 'r7rs-symbols'
read option.
* test-suite/tests/reader.test ("reading"): Add test.
Mark H Weaver [Tue, 14 Jan 2014 18:26:30 +0000 (13:26 -0500)]
Document that we support srfi-62 and add it to %cond-expand-features.
* module/ice-9/boot-9.scm (%cond-expand-features): Add srfi-62.
* doc/ref/srfi-modules.texi (SRFI-0): Add srfi-62 to the list of core
features.
(SRFI-62): New node.
Mark H Weaver [Tue, 14 Jan 2014 08:13:58 +0000 (03:13 -0500)]
read: use 'c_tolower' instead of 'tolower' in 'try_read_ci_chars'.
* libguile/read.c: Include <c-ctype.h>.
(try_read_ci_chars): Use 'c_tolower' instead of 'tolower'.
Mark H Weaver [Sun, 12 Jan 2014 09:36:57 +0000 (04:36 -0500)]
Recognize 'escape' character name, per R7RS.
* libguile/chars.c (scm_r7rs_charnames, scm_r7rs_charnums):
New static constants.
(SCM_N_R7RS_CHARNAMES): New macro.
(scm_i_charname, scm_i_charname_to_char): Adapt to new R7RS
char names.
* doc/ref/api-data.texi (Characters): Document #\escape.
* test-suite/tests/reader.test ("reading"): Add test.
Mark H Weaver [Sun, 12 Jan 2014 09:36:29 +0000 (04:36 -0500)]
read: Accept "\|" in string literals.
* libguile/read.c (scm_read_string): Accept "\|" in string literals.
* doc/ref/api-data.texi (String Syntax): Add "\|" to the list of
supported backslash escapes.
* test-suite/tests/reader.test ("reading"): Add test.
Mark H Weaver [Sun, 12 Jan 2014 09:36:02 +0000 (04:36 -0500)]
read: Support R7RS '#true' and '#false' syntax for booleans.
* libguile/read.c (try_read_ci_chars): New static function.
(scm_read_boolean, scm_read_array): Use 'try_read_ci_chars'.
* doc/ref/api-data.texi (Booleans): Update docs.
* test-suite/tests/reader.test ("reading"): Add tests.
Mark H Weaver [Tue, 14 Jan 2014 07:19:52 +0000 (02:19 -0500)]
Add srfi-16 and srfi-30 to %cond-expand-features.
* module/ice-9/boot-9.scm (%cond-expand-features): Add srfi-16 and
srfi-30.
* doc/ref/srfi-modules.texi (SRFI-0): Add srfi-16 and srfi-30 to the
list of core features.
* module/srfi/srfi-16.scm: Remove call to 'cond-expand-provide'.
Ludovic Courtès [Mon, 13 Jan 2014 22:15:28 +0000 (23:15 +0100)]
'port-position' works on CBIPs that do not support 'set-port-position!'.
* libguile/r6rs-ports.c (cbp_seek)[WHENCE == SEEK_CUR]: Break out of the
switch statement when OFFSET is zero.
Pass 'scm_wrong_type_arg_msg' a phrase suitable for use after
"expecting".
* test-suite/tests/r6rs-ports.test ("7.2.7 Input Ports")["custom binary
input port supports `port-position', not `set-port-position!'"]: New
test.
Mark H Weaver [Sun, 12 Jan 2014 12:47:00 +0000 (07:47 -0500)]
Fix 'exact-integer?' comment in numbers.test.
* test-suite/tests/numbers.test: Fix 'exact-integer?' comment.
Mark H Weaver [Sun, 12 Jan 2014 12:11:44 +0000 (07:11 -0500)]
Fix hashing of empty vectors.
Fixes a bug introduced in
cc1cd04f8111c306cf48b93e131d5c1765c808a3
"Fix hashing of vectors to run in bounded time."
* libguile/hash.c (scm_hasher): Avoid division by zero.
* test-suite/tests/hash.test ("hash"): Add tests.
Mark H Weaver [Sun, 12 Jan 2014 09:16:39 +0000 (04:16 -0500)]
Bump user-visible copyright years to 2014.
* doc/ref/guile.texi: Add 2014 to list of copyright years in @copying
section.
* module/ice-9/command-line.scm (version-etc): Bump 'copyright-year' to
2014.
* module/system/repl/common.scm (*version*): Add 2014 to the range of
copyright years.
Mark H Weaver [Sat, 11 Jan 2014 15:18:40 +0000 (10:18 -0500)]
Fix hashing of vectors to run in bounded time.
* libguile/hash.c (SCM_MIN): New macro.
(scm_hasher): In vector case, do nothing if d is 0. Make sure to
recurse with a reduced d. Move the loop out of the 'if'.
Mark H Weaver [Thu, 19 Dec 2013 18:22:50 +0000 (13:22 -0500)]
Implement R7RS 'syntax-error'.
* module/ice-9/psyntax.scm (syntax-error): New macro.
(syntax-rules): Handle 'syntax-error' templates specially
for improved error reporting.
* module/ice-9/psyntax-pp.scm: Regenerate.
* doc/ref/api-macros.texi (Syntax Rules): Add new subsection "Reporting
Syntax Errors in Macros".
* test-suite/tests/syntax.test: Add tests.
Mark H Weaver [Wed, 18 Dec 2013 23:49:37 +0000 (18:49 -0500)]
psyntax: custom ellipses using 'with-ellipsis' or R7RS syntax-rules.
* module/ice-9/psyntax.scm (binding-type): Update the header comment
to mention the new 'ellipsis' binding type.
(macros-only-env): Preserve ellipsis bindings.
(ellipsis?): Add 'r' and 'mod' as arguments. Search the lexical
environment for an ellipsis binding, and use it.
(gen-syntax): Adapt to the additional arguments of 'ellipsis?'.
(with-ellipsis): New core syntax.
(convert-pattern): Add unary 'ellipsis?' procedure as an argument.
(gen-clause): Adapt to the additional arguments of 'ellipsis?'.
Pass unary 'ellipsis?' procedure to 'convert-pattern'.
(syntax-case): Adapt to the additional arguments of 'ellipsis?'.
(syntax-local-binding): Support new 'ellipsis' binding type.
(syntax-rules): Add support for a custom ellipsis identifier as
the first operand, as per R7RS. Collect common code within new
local procedure 'expand-syntax-rules'.
* module/ice-9/psyntax-pp.scm: Regenerate.
* module/ice-9/local-eval.scm (analyze-identifiers): Add support for
'ellipsis' binding type.
* doc/ref/api-macros.texi (Syntax Rules): Add docs for R7RS custom
ellipsis syntax. Use @dots{}.
(Syntax Case): Add docs for 'with-ellipsis'. Use @dots{}.
(Syntax Transformer Helpers): Update to include new 'ellipsis'
binding type.
* test-suite/tests/syntax.test: Add tests.
Mark H Weaver [Tue, 24 Dec 2013 11:42:51 +0000 (06:42 -0500)]
psyntax: toplevel variable definitions discard previous syntactic binding.
* module/ice-9/psyntax.scm (expand-top-sequence): When defining a
toplevel variable, use the value of the same-named imported
_variable_, if any. Do _not_ use an existing syntactic binding.
* module/ice-9/psyntax-pp.scm: Regenerate.
Ian Price [Thu, 24 Oct 2013 04:51:47 +0000 (05:51 +0100)]
Fix trap handlers to handle applicable structs.
Reported by Jordy Dickinson <jordy.dickinson@gmail.com>.
Fixes <http://bugs.gnu.org/15691>.
* module/system/vm/traps.scm (frame-matcher): Extract procedure when
proc is an applicable struct.
Mark H Weaver [Wed, 25 Dec 2013 10:10:19 +0000 (05:10 -0500)]
Fix 'string-copy!' to work properly with overlapping src/dest.
* libguile/srfi-13.c (scm_string_copy_x): Fix to work properly with
overlapping src/dest.
* test-suite/tests/srfi-13.test ("string-copy!"): Add tests.
Mark H Weaver [Fri, 20 Dec 2013 23:12:37 +0000 (18:12 -0500)]
Implement 'exact-integer?' and 'scm_is_exact_integer'.
* libguile/numbers.c (scm_exact_integer_p, scm_is_exact_integer):
New procedures.
(scm_integer_p): Improve docstring.
* libguile/numbers.h (scm_exact_integer_p, scm_is_exact_integer):
New prototypes.
* doc/ref/api-data.texi (Integers): Add docs.
* test-suite/tests/numbers.test ("exact-integer?"): Add tests.
Mark H Weaver [Thu, 9 Jan 2014 02:39:55 +0000 (21:39 -0500)]
Fix doc that incorrectly claimed (integer? +inf.0) => #t.
Fixes <http://bugs.gnu.org/16356>.
Reported by Zefram <zefram@fysh.org>.
* doc/ref/api-data.texi (Integers): Add docs. Fix outdated example
that incorrectly showed (integer? +inf.0) => #t.