bpt/guile.git
10 years agoAvoid lossy conversion from inum to double in numerical comparisons.
Mark H Weaver [Tue, 16 Jul 2013 04:26:11 +0000 (00:26 -0400)]
Avoid lossy conversion from inum to double in numerical comparisons.

* libguile/numbers.c (scm_less_p): Avoid converting inums to doubles.

* test-suite/tests/numbers.test (<): Add tests.

10 years agonumbers.test: Avoid inexact arithmetic in computation of fixnum-bit.
Mark H Weaver [Tue, 16 Jul 2013 04:22:10 +0000 (00:22 -0400)]
numbers.test: Avoid inexact arithmetic in computation of fixnum-bit.

* test-suite/tests/numbers.test (fixnum-bit): Rewrite to avoid
  inexact arithmetic.

10 years agoFix bugs in numerical equality predicate.
Mark H Weaver [Tue, 16 Jul 2013 04:18:40 +0000 (00:18 -0400)]
Fix bugs in numerical equality predicate.

* libguile/numbers.c (scm_num_eq_p): Fix bug comparing fractions to
  infinities (reported by Göran Weinholt <goran@weinholt.se>).  Fix
  erroneous comment describing the logic behind inum/flonum comparison.
  Use similar logic for inum/complex comparison to avoid rounding
  errors.  Make minor indentation fixes and simplifications.

* test-suite/tests/numbers.test (=): Add tests.

10 years agoFix rounding in scm_i_divide2double for negative arguments.
Mark H Weaver [Tue, 16 Jul 2013 04:00:23 +0000 (00:00 -0400)]
Fix rounding in scm_i_divide2double for negative arguments.

* libguile/numbers.c (INUM_LOSSLESSLY_CONVERTIBLE_TO_DOUBLE):
  New macro.
  (scm_i_divide2double): Use INUM_LOSSLESSLY_CONVERTIBLE_TO_DOUBLE to
  determine if our fast path is safe.  Previously, negative arguments
  were not checked properly.

* test-suite/tests/numbers.test (exact->inexact): Add tests.

10 years agoFix VM 'ash' for right shifts by large amounts.
Mark H Weaver [Sun, 14 Jul 2013 18:47:10 +0000 (14:47 -0400)]
Fix VM 'ash' for right shifts by large amounts.

Fixes <http://bugs.gnu.org/14864>.
Reported by Göran Weinholt <goran@weinholt.se>.

* libguile/vm-i-scheme.c (ash): Fallback to 'scm_ash' for right shifts
  with counts >= SCM_I_FIXNUM_BIT, since '>>' is not guaranteed to work
  correctly for large counts.

10 years agoFix 'bitwise-bit-count' for negative arguments.
Mark H Weaver [Sun, 14 Jul 2013 18:08:33 +0000 (14:08 -0400)]
Fix 'bitwise-bit-count' for negative arguments.

Fixes <http://bugs.gnu.org/14864>.
Reported by Göran Weinholt <goran@weinholt.se>.

* module/rnrs/arithmetic/bitwise.scm (bitwise-bit-count): If the
  argument is negative, return the 'bitwise-not' of the result of
  'logcount', as per R6RS.  Previously, 'bitwise-bit-count' was
  identical to 'logcount'.

10 years agoFix bug in remqueue in threads.c when removing last element.
Mark H Weaver [Mon, 17 Jun 2013 18:43:58 +0000 (14:43 -0400)]
Fix bug in remqueue in threads.c when removing last element.

Reported and debugged by Andrew Gaylard <ag@computer.org>.

* libguile/threads.c (remqueue): When removing the last element from a
  queue with more than one element, set (car q) to the previous element.

* THANKS: Thank Andrew Gaylard.

10 years agoFix #ifdefery for `setegid'.
Ludovic Courtès [Sun, 16 Jun 2013 19:47:39 +0000 (21:47 +0200)]
Fix #ifdefery for `setegid'.

* libguile/posix.c (scm_setegid): Change to #ifdef HAVE_SETEGID.

10 years agotests: Don't rely on `scm_call_2' being visible.
Ludovic Courtès [Sun, 16 Jun 2013 18:58:10 +0000 (20:58 +0200)]
tests: Don't rely on `scm_call_2' being visible.

* test-suite/tests/coverage.test ("procedure-execution-count")["called
  from C"]: Throw 'unresolved when `scm_call_2' cannot be resolved.
  Reported by Eli Zaretskii <eliz@gnu.org>.

10 years agoAugment `.dir-locals.el'.
Ludovic Courtès [Sun, 16 Jun 2013 18:56:31 +0000 (20:56 +0200)]
Augment `.dir-locals.el'.

10 years agotests: Remove symlink only when it exists.
Ludovic Courtès [Sun, 16 Jun 2013 14:54:12 +0000 (16:54 +0200)]
tests: Remove symlink only when it exists.

* test-suite/tests/filesys.test: Delete (test-symlink) only if it
  exists---i.e., not on Windows.
  Reported by Eli Zaretskii <eliz@gnu.org>.

10 years agotests: Skip FFI tests that use `qsort' when it's not accessible.
Ludovic Courtès [Sun, 16 Jun 2013 14:52:38 +0000 (16:52 +0200)]
tests: Skip FFI tests that use `qsort' when it's not accessible.

* test-suite/tests/foreign.test ("procedure->pointer")[qsort]: Wrap in
  `false-if-exception'.
  ["qsort", "qsort, wrong return type", "qsort, wrong arity"]: Throw
  'unresolved when QSORT if #f.
  Reported by Eli Zaretskii <eliz@gnu.org>.

10 years agotests: Don't rely on $TMPDIR and /tmp on Windows.
Ludovic Courtès [Sun, 16 Jun 2013 14:42:01 +0000 (16:42 +0200)]
tests: Don't rely on $TMPDIR and /tmp on Windows.

* test-suite/standalone/test-unwind.c (check_ports)[__MINGW32__]: Use
  $TEMP, $TMP, or / as the value for TMPDIR.
  Patch by Eli Zaretskii <eliz@gnu.org>.

10 years agotests: Use double quotes around shell arguments, for Windows.
Ludovic Courtès [Sun, 16 Jun 2013 14:39:14 +0000 (16:39 +0200)]
tests: Use double quotes around shell arguments, for Windows.

* test-suite/standalone/test-system-cmds (test-system-cmd): Use double
  quotes around shell arguments.
  Reported by Eli Zaretskii <eliz@gnu.org>.

10 years agoDefine `AF_UNIX' only when Unix-domain sockets are supported.
Ludovic Courtès [Sun, 16 Jun 2013 14:19:21 +0000 (16:19 +0200)]
Define `AF_UNIX' only when Unix-domain sockets are supported.

* libguile/socket.c (scm_init_socket): Defined `AF_UNIX' only when
  `HAVE_UNIX_DOMAIN_SOCKETS' is defined.
  Reported by Eli Zaretskii <eliz@gnu.org>.

10 years agoAllow #f as timeout argument to unlock-mutex and SRFI-18 mutex-unlock!
Mark H Weaver [Mon, 10 Jun 2013 06:05:17 +0000 (02:05 -0400)]
Allow #f as timeout argument to unlock-mutex and SRFI-18 mutex-unlock!

Reported by Chaos Eternal <chaoseternal@shlug.org>
Based on a patch by Nala Ginrut <nalaginrut@gmail.com>

* libguile/threads.c (scm_unlock_mutex_timed): If 'timeout' argument
  is false, interpret that as no timeout.

* doc/ref/api-scheduling.texi (Mutexes and Condition Variables):
  Update documentation.

10 years agoFix tests for 'scm_c_bind_keyword_arguments'.
Mark H Weaver [Mon, 10 Jun 2013 06:26:11 +0000 (02:26 -0400)]
Fix tests for 'scm_c_bind_keyword_arguments'.

* test-suite/standalone/test-scm-c-bind-keyword-arguments.c (error_handler):
  Remove function.
  (unrecognized_keyword_error_handler, invalid_keyword_error_handler,
  odd_length_error_handler): New functions.
  (test_scm_c_bind_keyword_arguments): Use new error handler functions.

10 years agoReport the faulty keyword in errors raised by `scm_c_bind_keyword_arguments'.
Ludovic Courtès [Tue, 4 Jun 2013 22:25:39 +0000 (00:25 +0200)]
Report the faulty keyword in errors raised by `scm_c_bind_keyword_arguments'.

Reported by Mark H. Weaver.

* libguile/keywords.c (scm_c_bind_keyword_arguments): Use
  `scm_error_scm' instead of `scm_error'.  Pass the faulty keyword
  enclosed in a list as the last argument.
* test-suite/tests/optargs.test ("scm_c_bind_keyword_arguments"): New
  test prefix.

10 years agoPrint the faulty object upon invalid-keyword errors.
Ludovic Courtès [Mon, 3 Jun 2013 22:29:59 +0000 (00:29 +0200)]
Print the faulty object upon invalid-keyword errors.

* libguile/vm.c (vm_error_kwargs_invalid_keyword,
  vm_error_kwargs_unrecognized_keyword): Add parameter.  Pass it
  enclosed in a list as the last argument to `scm_error_scm'.
* libguile/vm-i-system.c (bind_kwargs): Adjust accordingly.
* libguile/eval.c (error_invalid_keyword, error_unrecognized_keyword):
  Add parameter.
  (prepare_boot_closure_env_for_apply): Adjust accordingly.
* module/ice-9/eval.scm (primitive-eval): Likewise.
* libguile/error.c (scm_error_scm): Mention `keyword-argument-error' in
  docstring.
* module/ice-9/boot-9.scm (keyword-error-printer): New procedure; use it.
* test-suite/tests/optargs.test (c&e, with-test-prefix/c&e): Remove.
  ("define*")["unrecognized keyword"]: Test the value passed along the
  `keyword-argument-error' exception.
  ["invalid keyword"]: New test.
* doc/ref/api-control.texi (Error Reporting): Update `scm-error'
  description.

11 years agoweb: uri-encode hexadecimal percent-encoding is now uppercase
Aleix Conchillo Flaque [Thu, 2 May 2013 19:13:31 +0000 (12:13 -0700)]
web: uri-encode hexadecimal percent-encoding is now uppercase

* module/web/uri.scm (uri-encode): the hexadecimal percent-encoding %HH
  is now uppercased as suggested by RFC3986:

      "For consistency, URI producers and normalizers should use
       uppercase hexadecimal digits for all percent-encodings."

* test-suite/tests/web-uri.test ("encode"): update tests.

11 years agoManual: fix 'my-or' examples to use let-bound variable.
Mark H Weaver [Sun, 14 Apr 2013 17:36:20 +0000 (13:36 -0400)]
Manual: fix 'my-or' examples to use let-bound variable.

Fixes <http://bugs.gnu.org/14203> reported by Nikita Karetnikov.

* doc/ref/api-macros.texi (Defining Macros, Syntax Rules): Fix
  definition of 'my-or' example macro to use the let-bound variable.

11 years agotests: Use shell constructs that /bin/sh on Solaris 10 can understand.
Ludovic Courtès [Sun, 14 Apr 2013 13:46:17 +0000 (15:46 +0200)]
tests: Use shell constructs that /bin/sh on Solaris 10 can understand.

Partly fixes <http://bugs.gnu.org/14042>.
Reported by Marc Girod <marc.girod@gmail.com>

* test-suite/standalone/test-language: Use a shell construct that
  /bin/sh on Solaris 10 can understand.

11 years agoUsing 'pass-if-equal' in coding.test.
Mark H Weaver [Sun, 14 Apr 2013 06:29:25 +0000 (02:29 -0400)]
Using 'pass-if-equal' in coding.test.

* test-suite/tests/coding.test ("block comments", "line comments"):
  Use 'pass-if-equal'.

11 years agoAdjust BOM tests to reflect the fact that big endian is used by default.
Mark H Weaver [Sun, 14 Apr 2013 05:50:47 +0000 (01:50 -0400)]
Adjust BOM tests to reflect the fact that big endian is used by default.

* test-suite/tests/ports.test ("BOM not discarded unless at start of
  UTF-16 stream", "BOM not discarded unless at start of UTF-32 stream"):
  Adjust tests to reflect the fact that, in the absence of a BOM, big
  endian will be used by default for the "UTF-16" and "UTF-32"
  encodings.

11 years agoAdd 2012 and 2013 to copyright notice on numbers.test.
Mark H Weaver [Thu, 11 Apr 2013 00:07:22 +0000 (20:07 -0400)]
Add 2012 and 2013 to copyright notice on numbers.test.

* test-suite/tests/numbers.test: Add 2012 and 2013 to copyright notice.
  It was modified both of those years.

11 years agoDo not add $(EXEEXT) to guild or guile-tools.
Mark H Weaver [Wed, 10 Apr 2013 12:23:16 +0000 (08:23 -0400)]
Do not add $(EXEEXT) to guild or guile-tools.

* meta/Makefile.am (install-exec-hook): Do not add $(EXEEXT) to guild or
  guile-tools.

11 years agoMention `open-file' in NEWS.
Ludovic Courtès [Wed, 10 Apr 2013 05:52:36 +0000 (07:52 +0200)]
Mention `open-file' in NEWS.

11 years agodoc: Require libunistring 0.9.3 in `README'.
Ludovic Courtès [Wed, 10 Apr 2013 05:52:25 +0000 (07:52 +0200)]
doc: Require libunistring 0.9.3 in `README'.

* README: Require libunistring 0.9.3.  The <unitypes.h> header in 0.9.1
  lacks the _UC_ATTRIBUTE_CONST definition, leading to build failures.

11 years agobuild: Tell `gen-scmconfig' whether the system has `struct timespec'.
Ludovic Courtès [Tue, 9 Apr 2013 23:39:02 +0000 (01:39 +0200)]
build: Tell `gen-scmconfig' whether the system has `struct timespec'.

* configure.ac: Reinstate `struct timespec' check removed in commit
  7e7c6f6a937005b08fffd5aeccdf992459b07137, but define
  `HAVE_SYSTEM_STRUCT_TIMESPEC' instead of `HAVE_STRUCT_TIMESPEC'.
* libguile/gen-scmconfig.c (main): Change `HAVE_STRUCT_TIMESPEC' to
  `HAVE_SYSTEM_STRUCT_TIMESPEC'.

11 years agoBump version number for 2.0.9.
Ludovic Courtès [Tue, 9 Apr 2013 23:10:04 +0000 (01:10 +0200)]
Bump version number for 2.0.9.

* GUILE-VERSION (GUILE_MICRO_VERSION): Increment.

11 years agodoc: Update `release.org'.
Ludovic Courtès [Tue, 9 Apr 2013 23:09:28 +0000 (01:09 +0200)]
doc: Update `release.org'.

* doc/release.org: Recommend "distcheck".  Add `makeinfo' to the
  bootstrap tool list.

11 years agostime: Remove #ifdef HAVE_*_H for headers provided by Gnulib.
Ludovic Courtès [Tue, 9 Apr 2013 22:13:54 +0000 (00:13 +0200)]
stime: Remove #ifdef HAVE_*_H for headers provided by Gnulib.

* libguile/stime.c: Remove #ifdef HAVE_SYS_TIMES_H, HAVE_SYS_TYPES_H,
  and HAVE_STRING_H since those headers are always provided by Gnulib
  when the corresponding macro is undefined.  Fixes a regression on
  MinGW introduced by commit 40e2a31.

11 years agoMake `build-aux/gendocs.sh' executable.
Ludovic Courtès [Tue, 9 Apr 2013 22:10:23 +0000 (00:10 +0200)]
Make `build-aux/gendocs.sh' executable.

11 years agoBump version number for 2.0.8.
Ludovic Courtès [Tue, 9 Apr 2013 20:51:48 +0000 (22:51 +0200)]
Bump version number for 2.0.8.

* GUILE-VERSION (GUILE_MICRO_VERSION): Increment.
  (LIBGUILE_INTERFACE_CURRENT): Increment, to account for new C
  functions `scm_c_bind_keyword_arguments' et al.
  (LIBGUILE_INTERFACE_AGE): Increment.

11 years agotests: Skip FFI tests involving `scm_is_pair' when `dynamic-func' fails.
Ludovic Courtès [Tue, 9 Apr 2013 20:37:06 +0000 (22:37 +0200)]
tests: Skip FFI tests involving `scm_is_pair' when `dynamic-func' fails.

* test-suite/tests/foreign.test ("make-pointer")["equal? modulo
  finalizer", "equal? modulo finalizer (set-pointer-finalizer!)"]: Wrap
  `dynamic-func' in `false-if-exception' (static builds on NetBSD 5.1
  raise "Symbol not found" here.)

11 years agodoc: Cosmetic change for `release.org'.
Ludovic Courtès [Tue, 9 Apr 2013 19:48:58 +0000 (21:48 +0200)]
doc: Cosmetic change for `release.org'.

* doc/release.org: Add #+STARTUP.

11 years agoUpdate `THANKS'.
Ludovic Courtès [Tue, 9 Apr 2013 19:48:04 +0000 (21:48 +0200)]
Update `THANKS'.

11 years agoupdate NEWS
Andy Wingo [Tue, 9 Apr 2013 20:45:35 +0000 (22:45 +0200)]
update NEWS

* NEWS: Updates.

11 years agofix stime patch for HAVE_TIMES removal
Andy Wingo [Tue, 9 Apr 2013 20:12:28 +0000 (22:12 +0200)]
fix stime patch for HAVE_TIMES removal

* libguile/stime.c (scm_init_stime): Fix previous patch.  At this point
  in the source, we definitely have a run-time function, but don't
  necessarily have a real-time function.

11 years agosimplify configure checks for functionality provided by gnulib
Andy Wingo [Tue, 9 Apr 2013 19:58:30 +0000 (21:58 +0200)]
simplify configure checks for functionality provided by gnulib

* configure.ac: Remove checks for pipe, stftime, times, and select, as
  our Gnulib modules already ensure they are provided.

* libguile/stime.c: Rely on gnulib providing `times'.

11 years agoMinor 'THANKS' fix.
Mark H Weaver [Tue, 9 Apr 2013 19:24:18 +0000 (15:24 -0400)]
Minor 'THANKS' fix.

11 years agoFix alignment in 'THANKS'.
Mark H Weaver [Tue, 9 Apr 2013 19:23:20 +0000 (15:23 -0400)]
Fix alignment in 'THANKS'.

11 years agoUpdate bug report section of 'THANKS'.
Mark H Weaver [Tue, 9 Apr 2013 19:21:12 +0000 (15:21 -0400)]
Update bug report section of 'THANKS'.

11 years agoUpdate 'THANKS'.
Mark H Weaver [Tue, 9 Apr 2013 18:07:14 +0000 (14:07 -0400)]
Update 'THANKS'.

11 years agoManual: Don't promise to signal an error for an illegal 'letrec'.
Mark H Weaver [Tue, 9 Apr 2013 17:54:39 +0000 (13:54 -0400)]
Manual: Don't promise to signal an error for an illegal 'letrec'.

Reported by Nikita Karetnikov <nikita@karetnikov.org>.

* doc/ref/api-binding.texi (Local Bindings): Remove the incorrect claim
  that improperly accessing a letrec-bound variable during evaluation of
  its initializers will necessarily cause an error to be signalled.

11 years agotests: Skip IPv6 socket tests when OS support is missing.
Ludovic Courtès [Tue, 9 Apr 2013 06:49:06 +0000 (08:49 +0200)]
tests: Skip IPv6 socket tests when OS support is missing.

Reported by Samuel Thibault <samuel.thibault@gnu.org>
and Peter Simons <simons@cryp.to>.

* test-suite/tests/00-socket.test ("AF_INET6/SOCK_STREAM"): Throw
  `unresolved' when `bind' throws EADDRNOTAVAIL.

11 years agoUpdate 'NEWS'.
Mark H Weaver [Mon, 8 Apr 2013 14:15:12 +0000 (10:15 -0400)]
Update 'NEWS'.

11 years agoUpdate 'NEWS'.
Mark H Weaver [Mon, 8 Apr 2013 12:58:00 +0000 (08:58 -0400)]
Update 'NEWS'.

11 years agoConsume a peeked EOF at the REPL.
Mark H Weaver [Mon, 8 Apr 2013 12:44:02 +0000 (08:44 -0400)]
Consume a peeked EOF at the REPL.

* module/system/repl/repl.scm (meta-reader): Consume peeked EOF.

11 years agoMiscellaneous 'sendfile' fixes and improved tests.
Mark H Weaver [Mon, 8 Apr 2013 04:36:00 +0000 (00:36 -0400)]
Miscellaneous 'sendfile' fixes and improved tests.

* libguile/filesys.c (scm_sendfile): In Linux-style sendfile(2) code, if
  EINTR or EAGAIN occurs, set result to 1 (not 0) so that we actually
  keep going.  In non-sendfile(2) code, deal gracefully with short reads
  due to EOF.

* test-suite/tests/filesys.test ("sendfile"): Use 'let*' to guarantee
  the needed order of operations: write (test-file) and then read it.
  Add code to check the written data (not just the returned length) in
  all tests, including the cases that hit EOF prematurely.

11 years agoUpdate 'NEWS'.
Mark H Weaver [Sun, 7 Apr 2013 21:47:44 +0000 (17:47 -0400)]
Update 'NEWS'.

11 years agoChange `sendfile' to loop until everything has been sent.
Ludovic Courtès [Sun, 7 Apr 2013 21:43:21 +0000 (23:43 +0200)]
Change `sendfile' to loop until everything has been sent.

* libguile/filesys.c (scm_sendfile)[HAVE_SYS_SENDFILE_H &&
  HAVE_SENDFILE]: Compare RESULT with C_COUNT.  Loop until C_COUNT bytes
  have been sent.
* doc/ref/posix.texi (File System): Update the description.  Explain the
  new semantics.
* test-suite/tests/filesys.test ("sendfile"): Rewrite using
  `pass-if-equal'.  Check the return value for all the tests.
  ["file with offset past the end", "file with offset near the end"]:
  New tests.

11 years agoRemove outdated and misplaced "Included Guile Modules" node from manual.
Mark H Weaver [Sun, 7 Apr 2013 19:45:38 +0000 (15:45 -0400)]
Remove outdated and misplaced "Included Guile Modules" node from manual.

* doc/ref/api-modules.texi (Included Guile Modules): Remove.
  (Using Guile Modules): Fix cross reference.

11 years agoClarify 'file-encoding' docs: heuristics may be improved later.
Mark H Weaver [Sun, 7 Apr 2013 16:07:33 +0000 (12:07 -0400)]
Clarify 'file-encoding' docs: heuristics may be improved later.

* doc/ref/api-evaluation.texi (Character Encoding of Source Files):
  Mention UTF-8 as another common encoding used for Scheme source files,
  and that it is used by default.  Change the description to leave open
  the possibility of adding additional heuristics in the future.
  Mention that if the coding declaration is in a #!-style block comment,
  it must be the first such comment in the file.  Mention the
  '#:guess-encoding' keyword argument.

11 years agoAdd keyword arguments to file opening procedures.
Mark H Weaver [Sun, 7 Apr 2013 03:19:55 +0000 (23:19 -0400)]
Add keyword arguments to file opening procedures.

* libguile/fports.c (scm_open_file_with_encoding): New API function,
  containing the code previously found in 'scm_open_file', but modified
  to accept the new 'guess_encoding' and 'encoding' arguments.

  (scm_open_file): Now just a simple wrapper that calls
  'scm_open_file_with_encoding'.

  (scm_i_open_file): New implementation of 'open-file' that accepts
  keyword arguments '#:guess-encoding' and '#:encoding', and calls
  'scm_open_file_with_encoding'.

  (scm_init_fports_keywords): New initialization function that gets
  called after keywords are initialized.

* libguile/fports.h (scm_open_file_with_encoding,
  scm_init_fports_keywords): Add prototypes.

* libguile/init.c (scm_i_init_guile): Call 'scm_init_fports_keywords'.

* module/ice-9/boot-9.scm: Add enhanced versions of 'open-input-file',
  'open-output-file', 'call-with-input-file', 'call-with-output-file',
  'with-input-from-file', 'with-output-to-file', and
  'with-error-to-file', that accept keyword arguments '#:binary',
  '#:encoding', and (for input port constructors) '#:guess-encoding'.

* doc/ref/api-io.texi (File Ports): Update documentation.

* test-suite/tests/ports.test ("keyword arguments for file openers"):
  Add tests.

11 years agoAdd record type printer for srfi-41.
Chris K. Jester-Young [Sun, 7 Apr 2013 16:44:18 +0000 (12:44 -0400)]
Add record type printer for srfi-41.

* module/srfi/srfi-41.scm: Add record type printer for streams.
  (stream-promise-visit): New helper for visiting stream promises.

11 years agoAdd record type printer for srfi-45.
Chris K. Jester-Young [Sun, 7 Apr 2013 16:43:17 +0000 (12:43 -0400)]
Add record type printer for srfi-45.

* module/srfi/srfi-45.scm: Add record type printer for promises.
  (promise-visit): New helper for visiting lazy promises.

11 years agoImplement efficient 'scm_unget_bytes' and 'unget-bytevector'.
Mark H Weaver [Sat, 6 Apr 2013 05:42:45 +0000 (01:42 -0400)]
Implement efficient 'scm_unget_bytes' and 'unget-bytevector'.

* libguile/ports.c (scm_i_unget_bytes): New static function.
  (scm_unget_bytes): New API function.
  (scm_unget_byte): Rewrite to simply call 'scm_i_unget_bytes'.
  (scm_ungetc, scm_peek_char, looking_at_bytes): Use 'scm_i_unget_bytes'.

* libguile/ports.h: Add prototype for 'scm_unget_bytes'.

* libguile/fports.c (scm_setvbuf): Use 'scm_unget_bytes'.

* libguile/r6rs-ports.c (scm_unget_bytevector): New procedure.

* module/ice-9/binary-ports.scm (unget-bytevector): New export.

* doc/ref/api-io.texi (R6RS Binary Input): Add documentation.
  (R6RS I/O Ports): Update brief description of (ice-9 binary-ports) to
  reflect the new reality: it is no longer a subset of (rnrs io ports).

* test-suite/tests/ports.test ("unget-bytevector"): Add test.

11 years agoRemove byte-order mark check from 'scm_i_scan_for_encoding'.
Mark H Weaver [Fri, 5 Apr 2013 21:33:03 +0000 (17:33 -0400)]
Remove byte-order mark check from 'scm_i_scan_for_encoding'.

* libguile/read.c (scm_i_scan_for_encoding): Remove byte-order mark
  check.

11 years agoDo not scan for coding declarations in open-file.
Mark H Weaver [Wed, 30 Jan 2013 19:45:28 +0000 (14:45 -0500)]
Do not scan for coding declarations in open-file.

* libguile/fports.c (scm_open_file): Do not scan for coding
  declarations.  Replace 'use_encoding' local variable with
  'binary'.  Update documentation string.

* module/ice-9/psyntax.scm (include): Add the same file-encoding
  logic that's used in compile-file and scm_primitive_load.

* module/ice-9/psyntax-pp.scm: Regenerate.

* doc/ref/api-io.texi (File Ports): Update docs.

* test-suite/tests/ports.test: Change "open-file HONORS file coding
  declarations" test to "open-file IGNORES file coding declaration".

* test-suite/tests/coding.test (scan-coding): Use 'file-encoding' to
  scan for the encoding, since 'open-input-file' no longer does so.

11 years agodoc: Link exceptions and escape continuations.
Ludovic Courtès [Sun, 7 Apr 2013 09:51:26 +0000 (11:51 +0200)]
doc: Link exceptions and escape continuations.

* doc/ref/api-control.texi (Prompt Primitives): Mention exceptions.
  (Exception Terminology): Link to `call/ec'.

11 years agodoc: Warn against misuses of `file-name-separator-string'.
Ludovic Courtès [Sun, 7 Apr 2013 09:49:52 +0000 (11:49 +0200)]
doc: Warn against misuses of `file-name-separator-string'.

* doc/ref/posix.texi (File System): Warn against misuses of
  `file-name-separator-string'.

11 years agoDon't use scm_generalized_vector_get_handle() in array-map.c
Daniel Llorens [Sat, 6 Apr 2013 22:04:35 +0000 (00:04 +0200)]
Don't use scm_generalized_vector_get_handle() in array-map.c

* libguile/array-map.c: (rafill, racp, ramap, rafe): use
  scm_array_get_handle() instead of scm_generalized_get_vector_handle().

Signed-off-by: Ludovic Courtès <ludo@gnu.org>
11 years agoFix the recommendations for conversion of C string constants.
Mark H Weaver [Sat, 6 Apr 2013 22:29:15 +0000 (18:29 -0400)]
Fix the recommendations for conversion of C string constants.

* doc/ref/api-data.texi (Conversion to/from C, Symbol Primitives,
  Keyword Procedures): Fix the recommendations for conversion of C
  string constants.  The encoding of the source code is irrelevant in
  modern compilers.  What is relevant is the execution character set.
  Both GCC and clang use UTF-8 by default, so recommend the
  'scm_from_utf8_*' functions when the argument is a C string constant.

  Also fix the broken texinfo markup for 'scm_from_*_symbol' that
  prevented them from being listed in the index.

11 years agoFix indentation in test-scm-c-bind-keyword-arguments.c.
Mark H Weaver [Sat, 6 Apr 2013 22:13:04 +0000 (18:13 -0400)]
Fix indentation in test-scm-c-bind-keyword-arguments.c.

* test-suite/standalone/test-scm-c-bind-keyword-arguments.c
  (test_invalid_keyword): Fix indentation.

11 years agoImplement 'scm_c_bind_keyword_arguments'.
Mark H Weaver [Sat, 6 Apr 2013 17:36:24 +0000 (13:36 -0400)]
Implement 'scm_c_bind_keyword_arguments'.

* libguile/keywords.c (scm_keyword_argument_error): New variable.
  (scm_c_bind_keyword_arguments): New API function.

* libguile/keywords.h (enum scm_keyword_arguments_flags): New enum.
  (scm_t_keyword_arguments_flags): New typedef.
  (scm_c_bind_keyword_arguments): New prototype.

* doc/ref/api-data.texi (Coding With Keywords, Keyword Procedures): Add
  documentation.

* test-suite/standalone/test-scm-c-bind-keyword-arguments.c: New file.

* test-suite/standalone/Makefile.am: Add
  test-scm-c-bind-keyword-arguments test.

11 years agoNEWS tweaks
Andy Wingo [Sat, 6 Apr 2013 20:51:44 +0000 (22:51 +0200)]
NEWS tweaks

* NEWS: Correct some errors.

11 years agoBump 'copyright-year' to 2013.
Mark H Weaver [Sat, 6 Apr 2013 19:49:25 +0000 (15:49 -0400)]
Bump 'copyright-year' to 2013.

* module/ice-9/command-line.scm (version-etc): Bump 'copyright-year' to
  2013.

11 years agoRemove duplicate definitions of `call/ec' and `let/ec'.
Ian Price [Sat, 6 Apr 2013 02:06:25 +0000 (03:06 +0100)]
Remove duplicate definitions of `call/ec' and `let/ec'.

* module/language/tree-il/peval.scm (let/ec): Remove. Import
  (ice-9 control).
* module/sxml/match.scm (%call/ec-prompt, call/ec, let/ec):
  Remove. Import (ice-9 control).

Signed-off-by: Ludovic Courtès <ludo@gnu.org>
11 years agoUpdate `NEWS'.
Ludovic Courtès [Sat, 6 Apr 2013 11:06:52 +0000 (13:06 +0200)]
Update `NEWS'.

11 years agodoc: Document `--language'.
Ludovic Courtès [Sat, 6 Apr 2013 11:06:36 +0000 (13:06 +0200)]
doc: Document `--language'.

* doc/ref/guile-invoke.texi (Command-line Options): Document `--language'.

11 years agodoc: Document file name separator procedures.
Ludovic Courtès [Sat, 6 Apr 2013 10:41:26 +0000 (12:41 +0200)]
doc: Document file name separator procedures.

* doc/ref/posix.texi (File System): Document
  `system-file-name-convention', `file-name-separator?',
  `absolute-file-name?', and `file-name-separator-string'.

11 years agoUse a fresh cons for %stream-null.
Chris K. Jester-Young [Sat, 6 Apr 2013 07:06:37 +0000 (03:06 -0400)]
Use a fresh cons for %stream-null.

* module/srfi/srfi-41.scm (%stream-null): Use a fresh cons rather than
  a literal cons. You never know what peval constant-folding could do
  with the latter, either now or in the future.

11 years agoUpdate `NEWS'.
Ludovic Courtès [Fri, 5 Apr 2013 20:54:02 +0000 (22:54 +0200)]
Update `NEWS'.

11 years agoDeprecate scm_array_fill_int()
Daniel Llorens [Wed, 3 Apr 2013 20:52:21 +0000 (22:52 +0200)]
Deprecate scm_array_fill_int()

* libguile/array-map.h, libgule/array-map.c: move scm_array_fill_int
  to the deprecated section.

Signed-off-by: Ludovic Courtès <ludo@gnu.org>
11 years agoRemove double indirection in array-fill!
Daniel Llorens [Wed, 3 Apr 2013 20:40:40 +0000 (22:40 +0200)]
Remove double indirection in array-fill!

* libguile/array-map.c: new function rafill, like scm_array_fill_int,
  but factors GVSET out of the loop. Use it in scm_array_fill_x instead of
  scm_array_fill_int.
* test-suite/tests/arrays.test: add test for array-fill! with stride != 1.

Signed-off-by: Ludovic Courtès <ludo@gnu.org>
11 years agoTests for array-copy!
Daniel Llorens [Wed, 3 Apr 2013 20:31:47 +0000 (22:31 +0200)]
Tests for array-copy!

* test-suite/tests/arrays.test: tests for arguments of rank 0, 1 and 2.

Signed-off-by: Ludovic Courtès <ludo@gnu.org>
11 years agoAdd `call/ec' and `let/ec'.
Ludovic Courtès [Thu, 4 Apr 2013 06:14:25 +0000 (14:14 +0800)]
Add `call/ec' and `let/ec'.

Based on a patch by Nala Ginrut <nalaginrut@gmail.com>,
with suggestions from Mark H. Weaver.

* module/ice-9/control.scm (call-with-escape-continuation, call/ec): New
  procedures.
  (let-escape-continuation, let/ec): New macros.
* module/ice-9/futures.scm (let/ec): Remove.
* test-suite/tests/control.test ("escape-only continuations")["call/ec",
  "let/ec"]: New tests.
* doc/ref/api-control.texi (Prompt Primitives): Document `call/ec',
  `let/ec', and their long names.

11 years agotests: Add `pass-if-equal' support in `c&e'.
Ludovic Courtès [Fri, 5 Apr 2013 20:28:25 +0000 (22:28 +0200)]
tests: Add `pass-if-equal' support in `c&e'.

* test-suite/test-suite/lib.scm (c&e): Add case for `pass-if-equal'.

11 years agoUse 'c_strcasecmp' instead of 'strcasecmp'.
Mark H Weaver [Fri, 5 Apr 2013 18:04:53 +0000 (14:04 -0400)]
Use 'c_strcasecmp' instead of 'strcasecmp'.

* libguile/ports.c (scm_new_port_table_entry, get_codepoint,
  scm_i_set_default_port_encoding, scm_i_port_iconv_descriptors,
  scm_i_set_port_encoding_x):
* libguile/print.c (display_string_using_iconv):
* libguile/read.c (scm_i_scan_for_encoding): Use 'c_strcasecmp'.

11 years agoImport 'c-strcase' from Gnulib.
Mark H Weaver [Fri, 5 Apr 2013 17:28:38 +0000 (13:28 -0400)]
Import 'c-strcase' from Gnulib.

* lib/Makefile.am:
* m4/gnulib-cache.m4: Add 'c-strcase' Gnulib module.

11 years agoRevert "Add record type printers for srfi-41 and srfi-45."
Chris K. Jester-Young [Fri, 5 Apr 2013 17:31:12 +0000 (13:31 -0400)]
Revert "Add record type printers for srfi-41 and srfi-45."

This reverts commit 4a1cdc9d5d643d05fa7a18febc7c12070f3ef6d9, which was
prematurely pushed.

11 years agoAdd record type printers for srfi-41 and srfi-45.
Chris K. Jester-Young [Fri, 5 Apr 2013 02:18:40 +0000 (22:18 -0400)]
Add record type printers for srfi-41 and srfi-45.

* module/srfi/srfi-41.scm: Add record type printer for streams.
* module/srfi/srfi-45.scm: Add record type printer for promises.

11 years agoImprove handling of Unicode byte-order marks (BOMs).
Mark H Weaver [Wed, 3 Apr 2013 08:22:04 +0000 (04:22 -0400)]
Improve handling of Unicode byte-order marks (BOMs).

* libguile/ports-internal.h (struct scm_port_internal): Add new members
  'at_stream_start_for_bom_read' and 'at_stream_start_for_bom_write'.
  (SCM_UNICODE_BOM): New macro.
  (scm_i_port_iconv_descriptors): Add 'mode' parameter to prototype.

* libguile/ports.c (scm_new_port_table_entry): Initialize
  'at_stream_start_for_bom_read' and 'at_stream_start_for_bom_write'.
  (get_iconv_codepoint): Pass new 'mode' parameter to
  'scm_i_port_iconv_descriptors'.
  (get_codepoint): After reading a codepoint at stream start, record
  that we're no longer at stream start, and consume a BOM where
  appropriate.
  (scm_seek): Set the stream start flags according to the new position.
  (looking_at_bytes): New static function.
  (scm_utf8_bom, scm_utf16be_bom, scm_utf16le_bom, scm_utf32be_bom,
  scm_utf32le_bom): New static const arrays.
  (decide_utf16_encoding, decide_utf32_encoding): New static functions.
  (scm_i_port_iconv_descriptors): Add new 'mode' parameter.  If the
  specified encoding is UTF-16 or UTF-32, make that precise by deciding
  what byte order to use, and construct iconv descriptors based on the
  precise encoding.
  (scm_i_set_port_encoding_x): Record that we are now at stream start.
  Do not open the new iconv descriptors immediately; let them be
  initialized lazily.

* libguile/print.c (display_string_using_iconv): Record that we're no
  longer at stream start.  Write a BOM if appropriate.

* doc/ref/api-io.texi (BOM Handling): New node.

* test-suite/tests/ports.test ("set-port-encoding!, wrong encoding"):
  Adapt test to cope with the fact that 'set-port-encoding!' does not
  immediately open the iconv descriptors.
  (bv-read-test): New procedure.
  ("unicode byte-order marks (BOMs)"): New test prefix.

11 years agoPeeks do not consume EOFs.
Mark H Weaver [Sun, 31 Mar 2013 23:06:51 +0000 (19:06 -0400)]
Peeks do not consume EOFs.

Fixes <http://bugs.gnu.org/12216>.

* libguile/ports-internal.h (struct scm_port_internal): Add
  'pending_eof' flag.

* libguile/ports.c (scm_i_set_pending_eof, scm_i_clear_pending_eof): New
  static functions.
  (scm_new_port_table_entry): Initialize 'pending_eof'.
  (scm_i_fill_input): Check for 'pending_eof'.
  (scm_i_peek_byte_or_eof): Set 'pending_eof' flag before returning EOF.
  (scm_end_input, scm_unget_byte, scm_seek, scm_truncate): Clear
  'pending_eof'.
  (scm_peek_char): Set 'pending_eof' flag before returning EOF.

* test-suite/tests/ports.test ("pending EOF behavior"): Add tests.

11 years agoNicer docstring syntax for case-lambda.
Mark H Weaver [Thu, 4 Apr 2013 19:22:18 +0000 (15:22 -0400)]
Nicer docstring syntax for case-lambda.

* module/ice-9/psyntax.scm (case-lambda, case-lambda*): Allow a
  docstring to be placed immediately after the 'case-lambda' or
  'case-lambda*'.

* module/ice-9/psyntax-pp.scm: Regenerate.

* doc/ref/api-procedures.texi (Case-lambda): Update docs.

* test-suite/tests/optargs.test ("case-lambda", "case-lambda*"):
  Add tests.

11 years agoCross reference 'SRFI-9 Records' directly instead of 'SRFI-9'.
Mark H Weaver [Thu, 4 Apr 2013 07:16:42 +0000 (03:16 -0400)]
Cross reference 'SRFI-9 Records' directly instead of 'SRFI-9'.

* doc/ref/api-compound.texi (Record Overview, Records):
  doc/ref/api-modules.texi (Included Guile Modules):
  doc/ref/r6rs.texi (R6RS Records): Cross reference 'SRFI-9 Records'
  directly instead of 'SRFI-9'.

11 years agoPreserve the case of the user-specified port encoding string.
Mark H Weaver [Wed, 3 Apr 2013 20:00:12 +0000 (16:00 -0400)]
Preserve the case of the user-specified port encoding string.

* libguile/ports.c (scm_i_set_port_encoding_x): Always copy the
  user-provided port encoding string, so that its case will be preserved
  and returned exactly by subsequent calls to 'port-encoding'.

11 years agoRemove double indirection for 1st arg of array-for-each
Daniel Llorens [Tue, 2 Apr 2013 14:43:37 +0000 (16:43 +0200)]
Remove double indirection for 1st arg of array-for-each

* libguile/array-map.c: (rafe): factor GVREF out of rank-1 loop for ra0.

11 years agotests: Add `array-for-each' tests for one-dimensional traversals.
Ludovic Courtès [Wed, 3 Apr 2013 19:34:31 +0000 (21:34 +0200)]
tests: Add `array-for-each' tests for one-dimensional traversals.

* test-suite/tests/ramap.test ("array-for-each")["1 source"]: New test
  prefix.

11 years agotests: Use `pass-if-equal' in ramap.test.
Ludovic Courtès [Wed, 3 Apr 2013 17:13:23 +0000 (19:13 +0200)]
tests: Use `pass-if-equal' in ramap.test.

* test-suite/tests/ramap.test ("array-for-each"): Use `pass-if-equal'
  instead of `(pass-if ... (equal? ...))'.

11 years agoRemove double indirection in array-map! with <2 args
Daniel Llorens [Tue, 2 Apr 2013 13:53:22 +0000 (15:53 +0200)]
Remove double indirection in array-map! with <2 args

* libguile/array-map.c: (ramap): factor GVSET/GVREF out of rank-1 loop
  for ra0 and the first element of ras.

11 years agoAvoid per-element cons for 1-arg case of array-map!
Daniel Llorens [Tue, 2 Apr 2013 13:23:55 +0000 (15:23 +0200)]
Avoid per-element cons for 1-arg case of array-map!

* libguile/array-map.c: (ramap): special case when ras is a 1-element list.

11 years agoDeprecate dead code in array-map.c
Daniel Llorens [Wed, 3 Apr 2013 13:40:48 +0000 (15:40 +0200)]
Deprecate dead code in array-map.c

* libguile/array-map.c, libguile/array-map.h: deprecate scm_ra_eqp,
  scm_ra_lessp, scm_ra_leqp, scm_ra_grp, scm_ra_greqp, scm_ra_sum,
  scm_ra_product, scm_ra_difference, scm_ra_divide, scm_array_identity.

Signed-off-by: Ludovic Courtès <ludo@gnu.org>
11 years agoUse 'strcasecmp' to compare encoding names.
Mark H Weaver [Wed, 3 Apr 2013 17:26:01 +0000 (13:26 -0400)]
Use 'strcasecmp' to compare encoding names.

Reported by Ludovic Courtès <ludo@gnu.org>.

* libguile/ports.c (scm_new_port_table_entry,
  scm_i_set_default_port_encoding, scm_i_set_port_encoding_x):
  libguile/read.c (scm_i_scan_for_encoding): Use 'strcasecmp' to compare
  encoding names.

11 years agoRemove double indirection in element access in array-copy!
Daniel Llorens [Mon, 1 Apr 2013 16:43:58 +0000 (18:43 +0200)]
Remove double indirection in element access in array-copy!

* libguile/array-map.c: (racp): factor scm_generalized_vector_ref,
  scm_generalized_vector_set_x out of the rank-1 loop.

Signed-off-by: Ludovic Courtès <ludo@gnu.org>
11 years agoRemove BOM tests that depend on GNU iconv behavior.
Mark H Weaver [Wed, 3 Apr 2013 00:47:30 +0000 (20:47 -0400)]
Remove BOM tests that depend on GNU iconv behavior.

* test-suite/tests/ports.test ("unicode byte-order marks (BOMs)"):
  Remove tests that depend on GNU iconv behavior.  We will add them back
  when we have portable BOM support.

11 years agoRename 'scm_i_get_byte_or_eof' et al; mark them as SCM_API.
Mark H Weaver [Tue, 2 Apr 2013 23:35:43 +0000 (19:35 -0400)]
Rename 'scm_i_get_byte_or_eof' et al; mark them as SCM_API.

* libguile/ports.c (scm_i_get_byte_or_eof, scm_i_peek_byte_or_eof):
  Rename to 'scm_slow_get_byte_or_eof' and 'scm_slow_peek_byte_or_eof',
  respectively.

* libguile/ports.h (scm_i_get_byte_or_eof, scm_i_peek_byte_or_eof):
  Rename to 'scm_slow_get_byte_or_eof' and 'scm_slow_peek_byte_or_eof',
  respectively, and mark them as SCM_API.

* libguile/inline.h (scm_get_byte_or_eof, scm_peek_byte_or_eof): Adjust
  to use the new names.

11 years agoRemove uses of GC_PTR in 'finalize_iconv_descriptors'.
Mark H Weaver [Tue, 2 Apr 2013 22:02:56 +0000 (18:02 -0400)]
Remove uses of GC_PTR in 'finalize_iconv_descriptors'.

* libguile/ports.c (finalize_iconv_descriptors): Change GC_PTR to
  (void *) in parameter types.

11 years agoRewrite get_iconv_codepoint to fix a bug involving byte-order marks.
Mark H Weaver [Tue, 2 Apr 2013 21:26:37 +0000 (17:26 -0400)]
Rewrite get_iconv_codepoint to fix a bug involving byte-order marks.

* libguile/ports.c (get_iconv_codepoint): Rewrite to fix a bug and
  improve efficiency and clarity.  Previously, it incorrectly assumed
  that iconv would never consume input without producing output, which
  led to a buffer overrun and subsequent assertion failure.  This
  happens when a byte-order mark is consumed by iconv at the beginning
  of the stream when using the UTF-16 or UTF-32 encodings.

* test-suite/tests/ports.test (unicode byte-order marks (BOMs)):
  Add tests.