* module/system/base/types.scm (cell->object): Use 'get-bytevector-n'
instead of 'get-bytevector-all', so that the zero-length case does not
return EOF.
Fixes <http://bugs.gnu.org/19646>.
Reported by John Paul Adrian Glaubitz <glaubitz@physik.fu-berlin.de>.
* test-suite/tests/posix.test ("affinity")["setaffinity"]: Wrap in
'catch' and throw 'unresolved upon ENOSYS.
Before that it would occasionally fail because the "$target" (not the
intermediate temporary file) would be produced.
* test-suite/standalone/test-guild-compile: Call 'pause' before 'sleep'
in test program.
Although popular compilers allow it as long as the expression is of type
void, it violates C99 and some compilers choke on it.
* libguile/numbers.c (scm_euclidean_divide, scm_floor_divide)
(scm_ceiling_divide, scm_truncate_divide, scm_centered_divide)
(scm_round_divide): Don't use the return statement with an expression
from functions with return type void.
The now obsolete RFC2616 section 14.30 required that the Location
header be an absoluteURI, but RFC7231 section 7.1.2 allows it to
contain any URI-reference.
* module/web/http.scm: Use 'declare-relative-uri-header!' to declare
the "Location" header.
* libguile/libguile-2.0-gdb.scm (make-scm-pretty-printer-worker):
(%scm-pretty-printer): Refactor to avoid printing all struct / array
fields by hinting these as arrays. The resulting print is not as
faithful to the original data, but that's probably OK.
* libguile/goops.c (is_accessor_method, scm_compute_applicable_methods):
Fix regression from 51f66c9120 (2009).
Accessor methods are added on each subclass on which the slot is
present; therefore if a subclass doesn't have a method, then the
methods doesn't apply. Truly fixes#17355, unlike
583a23bf10.
* module/oop/goops.scm (compute-cmethod, compute-getter-method)
(compute-setter-method): Revert earlier changes.
* test-suite/tests/goops.test ("accessor slots"): Update for new
expectations, in agreement with Guile 1.8.
* module/oop/goops/compile.scm: Inline into goops.scm, leaving a
compatible interface stub behind.
* module/oop/goops/dispatch.scm: Don't import (oop goops compile), to
break circularities.
* module/oop/goops.scm: Move (oop goops util) include up to the top, and
import (ice-9 match).
(compute-cmethod): Move here from compile.scm. Add a special case for
accessor methods, so as to fix bug #17355.
(compute-getter-method, compute-setter-method): #:procedure slot is
now generic.
* test-suite/tests/goops.test ("accessor slots"): New test.
Allocating an instance of a class with a #:class or #:each-subclass slot
allocation should not re-initialize the class-allocated slot. In Guile
1.8, this worked by effectively doing a slot-bound? within
%initialize-object. In Guile 2.0 we instead initialize the slot when it
is allocated -- in compute-get-n-set.
* module/oop/goops.scm (compute-getters-n-setters): Don't set an
init-thunk for class-allocated slots.
(compute-get-n-set): Initialize class-allocated slots here, if an
init-thunk or init-value are present.
* test-suite/tests/goops.test ("#:each-subclass"): Add test.
Fixes <http://bugs.gnu.org/19621>.
Before that, in 'cbip_fill_input', BUFFERED would be set to 0 when
reading from 'scm_getc' et al, because 'shortbuf' was being used. Thus,
we could eventually execute this line:
/* Copy the data back to the internal buffer. */
memcpy ((char *) c_port->read_pos, SCM_BYTEVECTOR_CONTENTS (bv),
c_octets);
But 'read_pos' would quickly point to the fields beyond 'shortbuf',
thereby leading to a corruption of the 'scm_t_port' itself.
* libguile/r6rs-ports.c (cbip_setvbuf): When READ_SIZE is 0, keep using
BV as the 'read_buf'.
(cbip_fill_input): Adjust assertion to accept 'read_buf_size = 1'.
* test-suite/tests/r6rs-ports.test ("7.2.7 Input Ports")["custom binary
input port unbuffered & 'get-string-all'", "custom binary input port
unbuffered UTF-8 & 'get-string-all'"]: New tests.
* module/ice-9/command-line.scm (shell-usage): Add 'newline' call when
FMT is true.
(compile-shell-switches)[error]: Prepend "error: " and append "~%" to
FMT.
Use a lower-case message.
This yields a 50% improvement on the "narrow string" benchmark of
'hash.bm', 41% on "wide string", and 76% on "long string".
* libguile/hash.c (scm_i_string_hash): Rewrite to avoid
'scm_i_string_ref' calls.
This function has been unused internally for some time and is undocumented.
* libguile/hash.c (scm_string_hash): Wrap if #if SCM_ENABLE_DEPRECATED
== 1.
* libguile/hash.h (scm_string_hash): Likewise, and replace SCM_API with
SCM_DEPRECATED.
This shows a 19% improvement on the "string without escapes"
micro-benchmark of 'write.bm', and 12% on "string with escapes".
* libguile/print.c (iprin1) <scm_tc7_string>: Replace 'scm_i_string_ref'
loop with a call to 'write_string'.
(display_character): Adjust description of return value in comment.
(write_string): New function.
This is a followup to 5fac1a7.
* meta/Makefile.am (substitute): Add GUILE_* and LIBGUILE_* substitutions,
and $(dependency_substitutions).
(dependency_substitutions): New variable.
Reported in <http://bugs.gnu.org/18520>
by David Kastrup <dak@gnu.org>.
* doc/ref/api-io.texi (Random Access): Clarify the unit of the 'offset'
argument to 'seek'.
* configure.ac: Remove meta/guile-2.0.pc and
meta/guile-2.0-uninstalled.pc from 'AC_CONFIG_FILES'.
* meta/Makefile.am (substitute): New variable.
(guile-2.0.pc, guile-2.0-uninstalled.pc): New targets.
(guile-config, guild): Use $(substitute) instead of duplicated sed
script.
(CLEANFILES): Add the .pc files.
* meta/guile-2.0.pc.in (bindir, guild, guile): New variables.
* doc/ref/libguile-parallel.texi (Parallel Installations): Document the
'guild' and 'guile' pkg-config variables.
Fixes <http://bugs.gnu.org/18988>.
Reported by Chris Vine <chris@cvine.freeserve.co.uk>.
* libguile/filesys.c (scm_select): Clarify handling of signal
interruptions.
* doc/ref/posix.texi (Ports and File Descriptors): Adjust accordingly.
Fixes <http://bugs.gnu.org/19027>.
* libguile/bytevectors.c (scm_bytevector_fill_x): Accept fill arguments
between -128 and 255.
* test-suite/tests/bytevectors.test ("2.2 General Operations"): Add
tests.
* libguile/bytevectors.c (ULONG_MAX): Remove (unportable) fallback
definition. It is no longer used.
(scm_make_bytevector): Use 'size_t' instead of 'unsigned' for
indices. Use 'scm_t_uint8' instead of 'signed char' for elements
and c_fill. Previously relied on GNU-C-specific behavior when
casting integers in the range 128-255 to signed char.
(GENERIC_INTEGER_ACCESSOR_PROLOGUE, INTEGER_LIST_TO_BYTEVECTOR)
(scm_bytevector_eq_p, scm_bytevector_copy_x, scm_bytevector_copy)
(scm_bytevector_to_u8_list, scm_u8_list_to_bytevector)
(scm_bytevector_fill_x): Use 'size_t' instead of 'unsigned' for
indices. Use 'scm_t_uint8' for elements.