1
Fork 0
mirror of https://git.savannah.gnu.org/git/guile.git synced 2025-06-06 12:10:28 +02:00
Commit graph

18437 commits

Author SHA1 Message Date
Mark H Weaver
c3e14b74e8 Fix type inferencing for 'nil?' and 'null?' predicates.
Fixes <https://bugs.gnu.org/33036>.
Reported by <calcium@disroot.org>.

* module/language/cps/types.scm (define-simple-type-inferrer):
Apply (logand (&type val) <>) uniformly.  Previously, this was done only
in the false branch.  Rename local variable to 'type*', to allow the
macro operand 'type' to be an arbitrary expression.
(*type-inferrers*)<null?>: Add &nil to the set of possible types.
(*type-inferrers*)<nil?>: Add &false and &null to the set the possible
types.
* module/language/cps/type-fold.scm (*branch-folders*)<null?>: Add &nil
to the set of possible types.
(*branch-folders*)<nil?>: Add &false and &null to the set the possible
types.
* test-suite/tests/compiler.test: Add tests.
2018-10-19 21:09:43 -04:00
Mark H Weaver
c2a654b7d2 Use 'scm_from_utf8_{string,symbol,keyword}' for C string literals.
Partial fix for <https://bugs.gnu.org/33044>.
Reported by Tom de Vries <tdevries@suse.de>.

Fix several instances of the mistake of using 'scm_from_locale_*' for C
strings that originally came from a C string literal.  Change several
uses of 'scm_from_latin1_*' as well, to promote the practice of writing
code that works for arbitrary C string literals.

Also add missing years to the copyright notices of changed files, based
on the git history.

* libguile/debug-malloc.c, libguile/deprecation.c, libguile/error.c,
libguile/eval.c, libguile/expand.c, libguile/extensions.c,
libguile/filesys.c, libguile/init.c, libguile/load.c,
libguile/modules.c, libguile/pairs.c, libguile/posix.c,
libguile/print.c, libguile/random.c, libguile/read.c,
libguile/regex-posix.c, libguile/snarf.h, libguile/srfi-13.c,
libguile/stacks.c, libguile/stime.c, libguile/strports.c,
libguile/values.c: Use 'scm_from_utf8_*' where appropriate.
2018-10-17 21:38:43 -04:00
Mark H Weaver
3845343cf3 Fix typos, indentation and error reporting in SRFI-19.
* module/srfi/srfi-19.scm: Fix typos in comments, indentation, and pass
the correct 'caller' name to 'time-error' in several places.
2018-10-16 04:20:47 -04:00
Mark H Weaver
49c090d850 Update SRFI-19 leap second table.
* module/srfi/srfi-19.scm (leap-second-table): Update to include the
leap second on 1 January 2017.
2018-10-16 02:50:30 -04:00
Chris Marusich
8cdd3a0773 Clarify the manual's "Processes" section.
* doc/ref/posix.texi (Processes): Use the phrase "integer status value"
consistently, and add a cross-reference to the section of the glibc
manual that explains what it is.
2018-10-14 17:57:50 -04:00
Mark H Weaver
1990aa9163 In 'ash' and 'round-ash', handle right shift count of LONG_MIN.
Fixes <https://bugs.gnu.org/21901>.
Reported by Zefram <zefram@fysh.org>.

* libguile/numbers.c: Add another top-level 'verify' to ensure that
LONG_MIN is not a fixnum.
(scm_ash, scm_round_ash): Ensure that when the shift count is LONG_MIN,
it is not handled via the normal code path, to avoid signed overflow
when the shift count is negated.
* test-suite/tests/numbers.test: Add tests.
2018-10-14 05:37:18 -04:00
Mark H Weaver
9448a078b5 Fix 'round-ash' of negative integers by huge right shift counts.
This is a followup to commit 011aec7e24.

When rounding, right shifting a negative integer by a huge shift count
results in 0, not -1.

* libguile/numbers.c: Add top-level 'verify' to ensure that the
assumptions in 'scm_ash' and 'scm_round_ash' are valid.
(scm_round_ash): In the case that handles huge right shifts, require
that the shift count _exceeds_ the integer length, and return 0 instead
of -1.
* test-suite/tests/numbers.test: Adjust tests accordingly.
2018-10-14 05:35:50 -04:00
Mark H Weaver
011aec7e24 Gracefully handle huge shift counts in 'ash' and 'round-ash'.
Fixes <https://bugs.gnu.org/32644>.
Reported by Stefan Israelsson Tampe <stefan.itampe@gmail.com>.

The need for this arose because the type inferrer for 'ursh' sometimes
passes (- 1 (expt 2 64)) as the second argument to 'ash'.

* libguile/numbers.c (scm_ash, scm_round_ash): Gracefully handle several
cases where the shift count does not fit in a C 'long'.
* test-suite/tests/numbers.test: Add tests.
2018-10-14 03:27:52 -04:00
Mark H Weaver
fe73fedab4 Fix list validation of *list->bytevector procedures.
Fixes <https://bugs.gnu.org/32938>.
Reported by Josh Datko <jbd@cryptotronix.com>.

* libguile/validate.h (SCM_VALIDATE_LIST_COPYLEN)
(SCM_VALIDATE_NONEMPTYLIST_COPYLEN): Use '!=' instead of '>=' to
validate the result of 'scm_ilength' after it has been stored in
the user variable 'cvar'.
* test-suite/tests/bytevectors.test: Add tests.  Use '#:use-module'
instead of ':use-module' in 'define-module' form.
2018-10-14 02:27:23 -04:00
Mark H Weaver
b44f505f15 Improve the documentation for 'nil?'.
* libguile/boolean.c (scm_nil_p): Improve docstring.
* doc/ref/api-languages.texi (Nil): Add documentation for 'nil?', along
with a description of how Elisp interprets Scheme booleans and
end-of-list.
2018-10-14 01:37:37 -04:00
Daniel Llorens
b9cf3517ef Fix 32/64 bit bug in INTEGER_ACCESSOR_PROLOGUE 2018-10-10 19:51:58 +02:00
Mark H Weaver
2d09e0513f Fix 'atomic-box-compare-and-swap!'.
Fixes <https://bugs.gnu.org/32786>.

'scm_atomic_compare_and_swap_scm' is a thin wrapper around
'atomic_compare_exchange_weak' (where available), and therefore it may
spuriously fail on some platforms, leaving the atomic object unchanged
even when the observed value is equal to the expected value.  Since
'scm_atomic_compare_and_swap_scm' returns both a boolean result and the
observed value, the caller is able to detect spurious failures when
using that API.

'atomic-box-compare-and-swap!' presents a simpler API, returning only
the observed value.  The documentation advises callers to assume that
the exchange succeeded if the observed value is 'eq?' to the expected
value.  It's therefore not possible to report spurious failures with
this API.

'atomic-box-compare-and-swap!' uses 'scm_atomic_compare_and_swap_scm',
and prior to this commit would simply ignore the boolean result and
return the observed value.  In case of spurious failures, the caller
would legitimately conclude that the exchange had succeeded.

With this commit, 'atomic-box-compare-and-swap!' now retries in case of
spurious failures.

* libguile/atomic.c (scm_atomic_box_compare_and_swap_x): If
'scm_atomic_compare_and_swap_scm' returns false and the observed value
is equal to 'expected', then try again.
* libguile/vm-engine.c (atomic-box-compare-and-swap!): Ditto.
2018-10-05 18:19:34 -04:00
Ludovic Courtès
3ee7673cc9 Define AT_SYMLINK_NOFOLLOW et al.
* libguile/posix.c (scm_init_posix): Define AT_SYMLINK_NOFOLLOW,
AT_SYMLINK_FOLLOW, AT_NO_AUTOMOUNT, and AT_EMPTY_PATH when available.
(scm_utime): Mention AT_SYMLINK_NOFOLLOW.
* doc/ref/posix.texi (File System): Update accordingly.
* test-suite/tests/posix.test ("utime")["AT_SYMLINK_NOFOLLOW"]: New test.
2018-09-23 16:41:13 +02:00
Ludovic Courtès
663b8826d7 time: Use #: for 'define-module' clauses.
* module/ice-9/time.scm: Use #: instead of : in 'define-module' form.
2018-09-23 16:41:13 +02:00
Ludovic Courtès
c3b14ff149 time: Support expressions that return any number of values.
* module/ice-9/time.scm (time-proc): Call PROC with 'call-with-values';
return all its values.
2018-09-23 16:41:13 +02:00
Ludovic Courtès
8885eb58cd time: Use 'syntax-rules' instead of 'define-macro'.
* module/ice-9/time.scm (time): Rewrite using 'define-syntax-rule'.
2018-09-23 16:41:13 +02:00
Mark H Weaver
4c91de3e45 Fix R6RS call-with-{input,output}-file to open textual ports.
Fixes <https://bugs.gnu.org/32329>.
Reported and diagnosed by Göran Weinholt <goran@weinholt.se>.

* module/rnrs/io/simple.scm (call-with-input-file)
(call-with-output-file): Use 'open-{input,output}-file' to open the port
in textual mode.  Previously 'open-file-{input,output}-port' was used,
which opened the port in binary mode.
2018-08-02 10:14:03 -04:00
Ludovic Courtès
71f536c3d8 srfi-19: Remove unused procedure.
* module/srfi/srfi-19.scm (date->broken-down-time): Remove.
2018-07-24 12:07:03 +02:00
Ludovic Courtès
bdcd0ba8a7 Add -Wshadowed-toplevel.
* module/language/tree-il/analyze.scm (shadowed-toplevel-analysis): New
variable.
* module/language/tree-il/compile-cps.scm (%warning-passes): Add it.
* module/system/base/message.scm (%warning-types): Add it.
* test-suite/tests/tree-il.test ("warnings")["shadowed-toplevel"]: New
test prefix.
* module/ice-9/boot-9.scm (%auto-compilation-options): Add it.
* doc/ref/api-evaluation.texi (Compilation): Add 'shadowed-toplevel' and
'macro-use-before-definition'.
2018-07-24 11:53:02 +02:00
Ludovic Courtès
741c45458d r6rs-ports: 'put-bytevector' accepts 64-bit integers.
* libguile/r6rs-ports.c (scm_put_bytevector): Use 'size_t' for c_start,
c_count, and c_len.
2018-07-20 11:43:27 +02:00
Ludovic Courtès
e45a33ce58 compile: Update copyright year.
* module/scripts/compile.scm (show-version): Update copyright year.
2018-07-19 18:00:19 +02:00
Ludovic Courtès
85c5bae4fd compile: Improve error message.
* module/scripts/compile.scm (parse-args): Add missing newline in
"unrecognized option" message.
2018-07-19 18:00:19 +02:00
Ludovic Courtès
887e495c6b compile: Add '-x' flag.
* module/scripts/compile.scm (%options, compile): Add '-x'.
* doc/ref/api-evaluation.texi (Compilation): Document it.
2018-07-19 18:00:19 +02:00
Ludovic Courtès
d677aca5c5 r6rs-ports: Accept 'port-position' values greater than 2^32.
Reported by Ricardo Wurmus <rekado@elephly.net>.
Fixes <https://bugs.gnu.org/32161>.

* libguile/r6rs-ports.c (custom_binary_port_seek): Use 'scm_to_off_t'
instead of 'scm_to_int'.
* test-suite/tests/r6rs-ports.test ("8.2.7 Input Ports")["custom binary
input port position, long offset"]: New test.
2018-07-19 18:00:19 +02:00
Mark H Weaver
59a06d8392
Make srfi-71 visible through 'cond-expand'.
This is a followup to commit eb90831ce8.

* module/srfi/srfi-71.scm: Add missing 'cond-expand-provide'.
2018-07-04 20:42:07 -04:00
Ludovic Courtès
cdb194c8b4 Update release docs.
* doc/release.org: Update web site instructions.
2018-07-02 10:58:22 +02:00
Ludovic Courtès
791cae940a Bump version for Guile 2.2.4.
* GUILE-VERSION (GUILE_MICRO_VERSION): Increment.
(LIBGUILE_INTERFACE_REVISION): Increment.
2018-07-01 23:33:46 +02:00
Ludovic Courtès
d571009370 build: Really build srfi/srfi-71.scm.
Commit eb90831ce8 added it to the wrong
makefile.

* module/Makefile.am (SOURCES): Add srfi/srfi-71.scm.
* module/srfi/Makefile.am: Remove.  It's a leftover from the 2009 build
system rework in commit 3bb299b3f0.
2018-07-01 23:33:46 +02:00
Ludovic Courtès
fbbab31c8b Update NEWS.
* NEWS: Update.
2018-07-01 23:33:46 +02:00
Ludovic Courtès
be1e6e6ab0 Update copyright years in '--version' and the manual.
* module/ice-9/command-line.scm (version-etc): Change #:copyright-year
to 2018.
* doc/ref/guile.texi: Add 2017 and 2018 to the copyright years.
* configure.ac (GUILE_CONFIGURE_COPYRIGHT): Add 2018.
2018-07-01 23:33:26 +02:00
Ludovic Courtès
533e3ff170 Serialize accesses to submodule hash tables.
Fixes <https://bugs.gnu.org/30602>.

Previously, when compiling files in parallel like Guix does, threads
would be concurrently inserting, rehashing, and reading the submodule
hash table of module ().  Thus, some threads would sometimes see an
inconsistent state, leading to errors such as:

  Module named (system repl debug) does not exist

* module/ice-9/boot-9.scm (call-with-module-autoload-lock): Move higher
in the file.
(module-name): Use it around call to 'nested-define-module!'.
(resolve-module): Wrap the whole thing in 'call-with-module-autoload-lock'.
2018-07-01 18:37:59 +02:00
Ludovic Courtès
23af45e248 vm: Fix stack-marking bug in multi-threaded programs.
Fixes <https://bugs.gnu.org/28211>.

* libguile/vm-engine.c (call, call_label, handle_interrupts): Add
'new_fp' variable; set the dynamic link and return address of the frame
at NEW_FP before setting 'vp->fp'.  This fixes a bug whereby, in a
multi-threaded context, the stack-marking code could run after vp->fp
has been set but before its dynamic link has been set, leading the
stack-walking code in 'scm_i_vm_mark_stack' to exit early on.
2018-06-29 22:28:48 +02:00
Ludovic Courtès
b87068eee7 linker: Don't rely on out-of-range bv-ref exceptions.
* module/system/vm/linker.scm (find-shstrndx): Check whether NAME is
lower than the length of BV; remove 'false-if-exception' around
'string-table-ref' call.
2018-06-28 17:14:08 +02:00
Ludovic Courtès
8209f0f5c0 GDB support: Add 'guile-backtrace' command.
* libguile/libguile-2.2-gdb.scm <top level>: Add 'register-command!' call.
2018-06-24 23:40:08 +02:00
Ludovic Courtès
be08145569 GDB support: Add note about (gdb frame-filters).
* libguile/libguile-2.2-gdb.scm <top level>: Add comment.
2018-06-24 23:34:58 +02:00
Ludovic Courtès
1654c17473 GDB support: Fix 'display-vm-frames'.
Previously 'vm-frame-older' would fail to traverse the chain of frames.

* libguile/libguile-2.2-gdb.scm (uint-type): New variable
(vm-frame): Fix "saved ip" and "saved fp" computation.  The latter had
been broken roughly since commit
72353de77d.
(vm-frame-older): Return #f when IP is zero, not when FP is zero.
(vm-frame-function-name): Wrap 'vm-frame-program-debug-info' in
'false-if-exception'
2018-06-24 23:22:52 +02:00
Ludovic Courtès
c009bfdcc8 types: Recognize 'scm_t_port_type' and decode port type name.
* module/system/base/types.scm (read-c-string, inferior-port-type): New
procedures.
(inferior-port): Use 'inferior-port-type' to determine the port type.
(cell->object): Rename 'flags+type' to 'flags' in the '%tc7-port' case.
* test-suite/tests/types.test ("opaque objects"): Adjust port testse.
(test-inferior-ports): New macro.
("ports"): New test prefix.
2018-06-24 15:31:05 +02:00
Ludovic Courtès
444648441a vm: Fix another typo.
Fix typo introduced in efc33cd149.

* libguile/vm.c (return_unused_stack_to_os): Remove extra 'while'.
2018-06-24 12:32:13 +02:00
Arun Isaac
919979ac39 web: Export http-request.
* module/web/client.scm (request): Rename to http-request, add a
docstring, and export it.
(http-get, http-head, http-post, http-put, http-delete, http-trace,
http-options): Update docstring.
* doc/ref/web.texi (Web Client): Document http-request.

Signed-off-by: Ludovic Courtès <ludo@gnu.org>
2018-06-23 23:32:13 +02:00
Ludovic Courtès
4f64bcd4d1 Add 'scm_to_stringn' shortcut when converting to UTF-8.
* libguile/strings.c (scm_to_stringn): Call 'scm_to_utf8_stringn' when
ENCODING == "UTF-8".
2018-06-19 15:40:11 +02:00
Ludovic Courtès
46bcbfa566 Module import obarrays are accessed in a critical section.
Fixes <https://bugs.gnu.org/31879>.

* libguile/modules.c (import_obarray_mutex): New variable.
(resolve_duplicate_binding, module_imported_variable): Acquire it before
accessing an obarray.
2018-06-18 17:39:35 +02:00
Ludovic Courtès
774b1ef7c2 tests: Adjust i18n.test to 'fr_FR.utf8' locale in glibc 2.27.
* test-suite/tests/i18n.test (french-number-string=?): New procedure.
("number->locale-string")["French"]("integer", "negative integer")
("fraction", "fraction, 1 digit"): Use it.
("format ~h")["French"]("12345.678"): Likewise.
("monetary-amount->locale-string")["French"]("integer", "fraction"):
Check for both SPACE and NO-BREAK SPACE.
2018-06-18 17:27:32 +02:00
Arun Isaac
1c970da59e doc: Document (ice-9 match) macros.
* doc/ref/match.texi: Document match-lambda, match-lambda*, match-let,
  match-let* and match-letrec.

Signed-off-by: Ludovic Courtès <ludo@gnu.org>
2018-06-18 14:14:47 +02:00
Ludovic Courtès
33363f7ec3 doc: Fix typo.
Fixes <https://bugs.gnu.org/30941>.
Reported by Fis Trivial <ybbs.daans@hotmail.com>.

* doc/ref/libguile-foreign-objects.texi (Defining Foreign Object Types):
Remove extraneous 'image_type' in example.
2018-06-18 14:14:47 +02:00
Jan Smydke
26b446d52b get-bytevector-n and get-bytevector-n! can now read more than 4 GB
* libguile/r6rs-ports.c (scm_get_bytevector_n, scm_get_bytevector_n_x):
Turn 'c_count' and related variables into a 'size_t', and use
'scm_to_size_t' instead of 'scm_to_uint'.

Signed-off-by: Ludovic Courtès <ludo@gnu.org>
2018-06-18 14:14:47 +02:00
Ludovic Courtès
efc33cd149 vm: Fix typo when checking for 'madvise' error code.
* libguile/vm.c (return_unused_stack_to_os): Check for EAGAIN, not -EAGAIN.
2018-06-18 14:14:47 +02:00
Ludovic Courtès
761cf0fb8c Make module autoloading thread-safe.
Fixes <https://bugs.gnu.org/31878>.

* module/ice-9/boot-9.scm (call-with-module-autoload-lock): New procedure.
(try-module-autoload): Wrap body in 'call-with-module-autoload-lock'.
* module/ice-9/threads.scm: Set (@ (guile) call-with-module-autoload-lock).
2018-06-18 14:14:47 +02:00
Ludovic Courtès
35f7df9378 tests: Add SRFI-71 test.
* test-suite/tests/srfi-71.test: New file.
* test-suite/Makefile.am (SCM_TESTS): Add it.
2018-06-18 14:14:47 +02:00
Christopher Allan Webber
eb90831ce8 Add SRFI 71: Extended LET-syntax for multiple values.
* module/srfi/srfi-71.scm: New file.
* module/srfi/Makefile.am: Add it.
* doc/ref/srfi-modules.texi: Document it.
* NEWS: Update.

Signed-off-by: Ludovic Courtès <ludo@gnu.org>
2018-06-18 14:14:47 +02:00
Mark H Weaver
ac9f0831c1
Add copyright header for (language elisp falias), and fix typo.
* module/language/elisp/falias.scm: Add copyright header.
* module/language/elisp/spec.scm: Fix typo in header.
2018-06-11 10:14:28 -04:00