1
Fork 0
mirror of https://git.savannah.gnu.org/git/guile.git synced 2025-05-02 04:40:29 +02:00
Commit graph

19988 commits

Author SHA1 Message Date
Mark H Weaver
bbe6daa769 SRFI-19: Add a few more tests.
This is a followup to commit a58c7abd72.

* test-suite/tests/srfi-19.test: Add tests for large positive years.
2018-10-20 23:30:54 -04:00
Mark H Weaver
a58c7abd72 SRFI-19: Fix handling of negative years and negative julian days.
Fixes <https://bugs.gnu.org/21906>.
Mitigates <https://bugs.gnu.org/21903> and <https://bugs.gnu.org/21904>.
Reported by: Zefram <zefram@fysh.org>.

* module/srfi/srfi-19.scm (encode-julian-day-number)
(decode-julian-day-number, date-week-number): Use 'floor-quotient'
instead of 'quotient', and 'floor' instead of 'truncate', where
appropriate.
(time-utc->date): Ensure that the 'nanoseconds' field of the returned
date is non-negative.
(leap-year): Handle negative years properly, and reformulate the
computation.
(week-day): Handle negative years properly.  Use 'floor-quotient'
instead of 'quotient' where appropriate.
(directives): In the handler for '~Y' format escapes, improve the
handling of years outside of the range 0-9999.
(read-directives): Add a FIXME comment to fix the '~Y' reader to handle
years outside of the range 0-9999.
* test-suite/tests/srfi-19.test: Import (srfi srfi-1).  Use Guile's
modern keyword notation in the 'define-module' form.  Add more tests.
2018-10-20 23:15:51 -04:00
Mark H Weaver
5106377a34 SRFI-19: Fix TAI->UTC conversions, leap second handling, etc.
Fixes <https://bugs.gnu.org/21911>.
Fixes <https://bugs.gnu.org/22034>.
Fixes <https://bugs.gnu.org/21902>.
Partially fixes <https://bugs.gnu.org/21904>.
Reported by Zefram <zefram@fysh.org>.

* doc/ref/srfi-modules.texi (SRFI-19 Introduction): Fix the definitions
of Julian Day and Modified Julian Day.  Give the correct full names of
UTC and TAI.
* module/srfi/srfi-19.scm: Import (srfi srfi-1).  Use modern Guile
keyword syntax in the 'define-module' form.
(leap-second-neg-delta): New procedure, derived from a similar procedure
in the latest upstream SRFI-19 reference implementation.
(priv:time-tai->time-utc!, time-tai->julian-day)
(time-monotonic->julian-day): Use 'leap-second-neg-delta'.
(local-tz-offset): Fix comment.
(leap-second?): Remove.
(tai-before-leap-second?): New procedure, derived from upstream SRFI-19.
(time-utc->date): Use 'define*' to handle the optional argument.  Remove
the leap second handling, following upstream SRFI-19.
(time-tai->date): Rewrite in terms of 'time-utc->date'.  Add special
leap second handling, following upstream SRFI-19.
(time-monotonic->date): Rewrite in terms of 'time-tai->date'.
(date->time-tai, date->time-monotonic): Add special leap second
handling, following upstream SRFI-19.
(directives): In the entry for the "~Y" escape in 'date->string', pad
the year field to 4 characters, following upstream SRFI-19.
* test-suite/tests/srfi-19.test: Add tests.
2018-10-20 17:23:39 -04:00
Mark H Weaver
fbdcf63585 scm_seed_to_random_state: Support wide string arguments.
Partially fixes <https://bugs.gnu.org/33044>.
Reported by Tom de Vries <tdevries@suse.de>.

* libguile/random.c (scm_seed_to_random_state): Use 'scm_to_utf8_string'
(or 'scm_to_latin1_string' for a narrow string, for compatibility) to
convert the string into raw bytes for use by 'scm_c_make_rstate'.  Make
sure the length in bytes fits within an 'int'.
2018-10-19 22:18:20 -04:00
Mark H Weaver
1d3cfc3548 Fix typo in strings.h.
* libguile/strings.h: In a comment, add the missing "i_" in
"scm_i_is_narrow_string".
2018-10-19 21:52:39 -04:00
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
Andy Wingo
0e2f462647 GNU Guile 2.9.1
* GUILE-VERSION (GUILE_MICRO_VERSION): Bump to 2.9.1.
2018-10-10 10:49:07 +02:00
Andy Wingo
154fe1df1c Fix GUILE_ENABLE_JIT after latest change
* acinclude.m4: Fix syntax.
2018-10-10 10:18:44 +02:00
Andy Wingo
2b4999b8bb Bump prerelease version numbering to 2.9.x
* GUILE-VERSION (GUILE_MINOR_VERSION): Bump to 9.
* NEWS: Update expected version numbers.
* configure.ac: Update pattern.
2018-10-10 10:11:26 +02:00
Andy Wingo
4aa4a6d590 Only enable JIT by default on x86-64
* acinclude.m4: Disable JIT by default on not-x86-64.  Although I got
  JIT mostly working on 32-bit x86, I got nondeterministic segfaults
  deep in lightning, on that platform; perhaps indicating a bug in the
  optimizer.  After a day of poking and not solving the problem, I think
  that I don't want the complexity of Lightning's node representation,
  especially on platforms that get less testing.  In the future we'll
  use the lightning backends without the node layer.
* NEWS: Update.
2018-10-10 10:02:55 +02:00
Andy Wingo
e08d10af67 Fix JIT of 64-bit comparisons on 32-bit architectures
* libguile/jit.c (compile_u64_imm_less): Compare high word using
  not-equal, to avoid a signedness compare.
(compile_s64_imm_less, compile_imm_s64_less): Fix the not-less cases.
2018-10-09 12:32:38 +02:00
Andy Wingo
d41f2e9978 Better ursh/ulsh/srsh JIT on 32-bit platforms
* libguile/jit.c (compile_ursh_immediate, compile_ulsh_immediate)
(compile_srsh_immediate): Special-case shifts by 32 bits on 32-bit
platforms.  Avoids shifting by 0.
2018-10-09 12:32:33 +02:00
Andy Wingo
afced398d4 Fix JIT register state tracking for use of SP or FP as temp
* libguile/jit.c (record_gpr_clobber): If we clobber SP or FP, clear the
  appropriate register state bits.  Only exercised for 32-bit targets in
  practice!
  (emit_alloc_frame, emit_push_frame): Fix a couple places where we were
  failing to track the register state correctly.
  (compile_umul): Remove a needless register state flush, nowthat
  qmulr_u has a wrapper that tracks this for us.
2018-10-09 08:55:34 +02:00
Andy Wingo
9feb3a633f Fix JIT compilation on 32-bit targets
* libguile/jit.c: Fix compilation on 32-bit targets.  Still not working
  however.
2018-10-08 15:24:03 +02:00
Andy Wingo
c9e052be49 Fix linker bug that could fail to find the shstrtab
* module/system/vm/linker.scm (<linker-object>): Add name field.  This
  allows the linker to find sections by name, notably before having
  found the .shstrtab section.  As there can be multiple sections with
  type SHT_STRTAB, this fixes a bug whereby we could use a section
  name (a strtab index) into an unrelated strtab.  In the past this
  worked because with ASCII identifiers there won't be an exception,
  although it is possible to accidentally mistake a shared string tail;
  but with UTF-8 identifiers, it's possible for a string table index to
  point in the middle of a codepoint, which is likely not valid UTF-8
  and would raise a bug.  Keeping an additional section name field fixes
  this bug.  Adapt all callers to pass a name argument to
  make-linker-object.
  (find-shstrndx): Update to look at the name field.
* module/system/vm/assembler.scm (make-object): Pass name to
  make-linker-object.

Thanks to Daniel Llorens for the test case.
2018-10-08 10:08:33 +02:00
Andy Wingo
3e22eef52c Fix guile-config for Guile 3.0
* meta/guile-config.in (guile-module): Use pkg-config for effective
  version.
2018-10-07 16:59:34 +02:00
Andy Wingo
5787f4e516 Fix -Wunused-function error for x86 not on sun
* libguile/lightning/lib/jit_x86-x87.c (_fstcwm): Surround definition
  with ifdef(sun).
2018-10-07 16:44:13 +02:00
Andy Wingo
8bcba78eda Fix unused local warning in vm-engine.c
* libguile/vm-engine.c (return-values): Remove needless frame_size=3
  local var.
2018-10-07 16:33:04 +02:00
Andy Wingo
2388193bbf Fix lightning build with jit_names.c
* libguile/lightning/lightning.am (lightning_extra_files): Move
  jit_names.c here.
2018-10-07 16:30:17 +02:00
Andy Wingo
ae188ac6b7 Revert "Remove jit_names.c."
This reverts commit b74e1f0de3.
2018-10-07 16:29:18 +02:00
Andy Wingo
b74e1f0de3 Remove jit_names.c.
* libguile/lightning/lib/jit_names.c: Remove unused file.
* libguile/lightning/lightning.am (lightning_c_files): Remove
  jit_names.c.
* libguile/lightning/lib/jit_print.c: Remove jit_names.c inclusion.
2018-10-07 16:28:36 +02:00
Andy Wingo
173b44a224 Fix GCC warning with %char-set-dump.
* libguile/srfi-14.c (scm_sys_char_set_dump): Silence an erroneous
  -Wformat-overflow warning based on an incorrect range inference by
  increasing output buffer size.
2018-10-07 16:14:06 +02:00
Andy Wingo
f34d50ad6b Deprecate scm_find_executable
* libguile/deprecated.h:
* libguile/deprecated.c (scm_find_executable): Deprecate.  Use strdup
  instead of weird scm_cat_path function.
* libguile/script.h:
* libguile/script.c: Remove old decls.
2018-10-07 16:04:59 +02:00
Andy Wingo
edba440885 Remove unimplemented decl in script.h
* libguile/script.h (scm_find_impl_file): Remove unimplemented decl.
2018-10-07 15:57:50 +02:00
Andy Wingo
03581c04d7 Comment out some unused definitions
* libguile/jit.c: Comment out unused var decls.
2018-10-07 15:57:27 +02:00
Andy Wingo
6cd9b3114f Fix use of uninstalled header by installed headers
* libguile/Makefile.am (libpath.h): Remove definition of
  SCM_EFFECTIVE_VERSION, which is defined in version.h.
* libguile/extensions.h: Remove libpath.h inclusion, as it's not
  installed.
* libguile/atomic.c:
* libguile/bytevectors.c:
* libguile/control.c:
* libguile/fdes-finalizers.c:
* libguile/foreign-object.c:
* libguile/foreign.c:
* libguile/fports.c:
* libguile/frames.c:
* libguile/goops.c:
* libguile/i18n.c:
* libguile/instructions.c:
* libguile/intrinsics.c:
* libguile/ioext.c:
* libguile/load.c:
* libguile/loader.c:
* libguile/poll.c:
* libguile/ports.c:
* libguile/posix.c:
* libguile/programs.c:
* libguile/r6rs-ports.c:
* libguile/srfi-1.c:
* libguile/srfi-60.c:
* libguile/threads.c:
* libguile/unicode.c:
* libguile/vm.c:
* libguile/weak-vector.c: Include version.h for the
  SCM_EFFECTIVE_VERSION definition.
2018-10-07 15:15:02 +02:00
Andy Wingo
d08f2c1166 Update NEWS
* NEWS: Update.
2018-10-07 15:02:08 +02:00
Andy Wingo
94e66d2384 Minor additional manual updates
* doc/ref/api-debug.texi (VM Hooks): Update for changes in VM hook API.
* doc/ref/guile.texi: Update copyright years.
* doc/ref/preface.texi (Contributors): Update.
2018-10-07 12:28:51 +02:00
Andy Wingo
a3b32f839b Add manual section on JIT compiler
* doc/ref/vm.texi (Just-In-Time Native Code): New section.
* doc/ref/compiler.texi (Extending the Compiler): Update.
2018-10-07 11:36:45 +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
Andy Wingo
6f3357b0df Fix f32-set! JIT compilation
* libguile/jit.c (compile_f32_set): Fix to write an f32, not a f64.
2018-10-04 16:50:10 +02:00
Andy Wingo
6a243e1ba0 Update compiler.texi
* doc/ref/compiler.texi: Update for compiler changes in Guile 3.
2018-10-03 23:24:22 +02:00
Andy Wingo
39729e8448 Rename $closure to $const-fun
* module/language/cps.scm ($const-fun): Rename from $closure, as we
  always use this now with nfree == 0.
* module/language/cps/closure-conversion.scm:
* module/language/cps/compile-bytecode.scm:
* module/language/cps/contification.scm:
* module/language/cps/cse.scm:
* module/language/cps/dce.scm:
* module/language/cps/devirtualize-integers.scm:
* module/language/cps/effects-analysis.scm:
* module/language/cps/licm.scm:
* module/language/cps/peel-loops.scm:
* module/language/cps/renumber.scm:
* module/language/cps/rotate-loops.scm:
* module/language/cps/simplify.scm:
* module/language/cps/slot-allocation.scm:
* module/language/cps/specialize-numbers.scm:
* module/language/cps/types.scm:
* module/language/cps/utils.scm:
* module/language/cps/verify.scm: Adapt users.
2018-10-03 22:58:45 +02:00
Andy Wingo
4e8d27f0d1 Finish updating vm.texi
* doc/ref/compiler.texi (Bytecode): Update macro-assembler instructions,
  and move most of them to the instruction set reference.
* doc/ref/vm.texi (A Virtual Machine for Guile, VM Programs): Minor
  fixes.
(Instruction Set): Update for Guile 3 instruction set.
* libguile/vm-engine.c (vm_engine): Update a few instruction
  docstrings.
2018-09-30 16:08:40 +02:00
Andy Wingo
4c53593bbe Update "Variables and the VM"
* doc/ref/vm.texi (Variables and the VM): Update.
2018-09-28 12:24:06 +02:00
Andy Wingo
5e671cea02 Update "Stack Layout"
* doc/ref/vm.texi (Stack Layout): Update.
2018-09-28 12:15:58 +02:00
Andy Wingo
7e623d1014 Update "VM Concepts"
* doc/ref/vm.texi (VM Concepts): Update.
2018-09-28 12:15:30 +02:00
Andy Wingo
2018609a69 Update "Why a VM?"
* doc/ref/vm.texi (Why a VM?): Update.
2018-09-28 12:14:55 +02:00
Andy Wingo
f1b745eec5 Update "A Virtual Machine for Guile"
* doc/ref/vm.texi (A Virtual Machine for Guile): Update.
2018-09-28 12:14:09 +02:00
Andy Wingo
6be54f4526 Update data representation chapter in the manual
* doc/ref/data-rep.texi (The SCM Type in Guile): Refer to scm.h.
(Relationship Between SCM and scm_t_bits): Better title-case.
(Immediate Objects): Better title-case.  Prefer "heap object" over
"cell".
(Non-Immediate Objects): Better title-case.  Deprecate the concept of
cells.
(Allocating Heap Objects): Rename from Allocating Cells.
(Heap Object Type Information): Rename from Heap Cell Type Information.
(Accessing Heap Object Fields): Rename from Accessing Cell Entries.
* doc/ref/vm.texi: Update references.
2018-09-27 13:48:09 +02:00