* module/ice-9/vlist.scm: Use define-inlinable instead of define-inline,
to ensure strict argument evaluation. There is a slight performance
penalty, but I hope subsequent hacks make it up.
* module/language/tree-il/cse.scm: New pass, some simple common
subexpression elimination with effects analysis.
* test-suite/tests/cse.test: New test.
* test-suite/Makefile.am:
* module/Makefile.am: Adapt.
* module/language/tree-il/peval.scm: Use effects analysis from (language
tree-il effects) instead of our own constant-expression?. Eagerly
mark assigned lexicals as non-copyable.
* module/language/tree-il/primitives.scm
(*interesting-primitive-names*): Add number? and char?. Add more
numeric predicates. Add character comparators. Add throw, error, and
scm-error.
(*primitive-accessors*): Remove struct-vtable. Though the vtable's
contents may change (through redefinition), its identity does not
change.
(*effect-free-primitives*): Put struct-vtable, number?, and char?
here.
(*multiply-valued-primitives*): Instead of listing singly-valued
primitives, list multiply-valued primitives.
(*bailout-primitives*): New list.
(*negatable-primitives*): New alist.
(*bailout-primitive-table*, *multiply-valued-primitive-table*)
(*negatable-primitive-table*): New tables.
(singly-valued-primitive?): Adapt to
use *multiply-valued-primitive-table*.
(bailout-primitive?, negate-primitive): New exported procedures.
* check-guile.in:
* test-suite/Makefile.am:
* test-suite/test-suite/lib.scm:
* benchmark-guile.in:
* benchmark-suite/Makefile.am:
* benchmark-suite/benchmark-suite/lib.scm: Lower the lib modules in the
source tree. This lets us remove top_srcdir and top_builddir from the
uninstalled paths.
* test-suite/tests/asm-to-bytecode.test:
* test-suite/tests/brainfuck.test:
* test-suite/tests/compiler.test:
* test-suite/tests/ftw.test:
* test-suite/tests/gc.test:
* test-suite/tests/match.test:
* test-suite/tests/rnrs-libraries.test:
* test-suite/tests/rnrs-test-a.scm:
* test-suite/tests/sxml.match.test: Adapt to not expect that module
names be prefixed with "test-suite".
* benchmark-suite/benchmark-suite/lib.scm: Rewrite to be more modern,
using parameters, records, and higher precision timers. Since this
file was never installed, this is an acceptable interface change.
(run-benchmark): Run the thunk once before going into the benchmark.
Adapt to new `report' interface.
(report): Change to expect only one argument, a <benchmark-result>
object.
(print-result): Adapt. The result is in the same format as before.
(print-user-result): Adapt. The result is different from before, but
as this is just printed on stdout and not logged, there should be no
problem.
(calibrate-benchmark-framework): Pull initialization into a function.
* benchmark-suite/benchmarks/arithmetic.bm:
* benchmark-suite/benchmarks/r6rs-arithmetic.bm: Use #e1e7 for the
iteration count, instead of the flonum 1e7.
Fixes <http://bugs.gnu.org/11310>.
Reported by Klaus Stehle <klaus.stehle@uni-tuebingen.de>.
* libguile/ieee-754.h: Remove.
* libguile/Makefile.am (noinst_HEADERS): Remove `ieee-754.h'.
* libguile/bytevectors.c (scm_ieee754_float, scm_ieee754_double): New
unions.
(float_to_foreign_endianness, float_from_foreign_endianness,
double_to_foreign_endianness, double_from_foreign_endianness): Rewrite
in terms of the new unions.
* test-suite/tests/bytevectors.test ("2.8 Operations on IEEE-754
Representations")["single, little endian", "single, big endian",
"double, little endian", "double, big endian"]: New tests.
Commit c46fee438c removed the "bdw-gc.h"
include from "smob.h", so better avoid `GC_PTR'.
* libguile/smob.c (scm_i_finalize_smob): Use `void *' instead of `GC_PTR'.
* libguile/smob.h (scm_i_finalize_smob): Update declaration accordingly.
Fixed <http://bugs.gnu.org/11196>.
Reported by Klaus Stehle <klaus.stehle@uni-tuebingen.de>.
* module/srfi/srfi-9.scm (define-record-type): Define the contructor
before TYPE-NAME. Set RTD's constructor field.
* test-suite/tests/srfi-9.test ("record compatibility"): New test
prefix.
* libguile/strings.c (scm_to_utf8_stringn): Fix another new bug in this
recent comedy of errors: pass the size of the preallocated buffer to
u32_to_u8. Arrange to call 'scm_i_string_wide_chars' and
'scm_i_string_length' only once each. Rename local variables for
improved code clarity.
* test-suite/standalone/test-conversion.c (test_to_utf8_stringn): New
function to test scm_to_utf8_stringn.
* libguile/strings.c (u32_u8_length_in_bytes): Internal static function
renamed from u32_u8_strlen, whose name was potentially confusing. For
added safety, handle everything that can be encoded in the more
general UTF-8 encoding: up to six bytes for each code point, with code
points up to 2^31-1.
(scm_to_utf8_stringn): NUL-terminate only if (lenp == NULL).
If (lenp != NULL) return the length in bytes in *lenp.
* module/language/tree-il/primitives.scm (resolve-primitives!): Resolve
public module-refs to primitives.
* test-suite/tests/tree-il.test: New tests for primitive resolution.
* libguile/srfi-13.c (scm_string_trim, scm_string_trim_right)
(scm_string_trim_both): Take the whitespace fast-path if the char_pred
is scm_char_set_whitespace.
* module/web/http.scm (read-header, split-and-trim, parse-quality-list):
(parse-param-component, parse-credentials, "Content-Type"):
(read-request-line, read-response-line): Use char-set:whitespace
instead of char-whitespace?. It avoids recursing into the VM.
* libguile/vm.c (prepare_smob_call): New helper. Now, instead of making
a per-smob trampoline, we will shuffle the smob into the args and use
a gsubr. This prevents a memory leak in which the trampolines, which
were values in a weak-key table, were preventing the smobs from being
collected.
* libguile/vm-i-system.c (call, tail-call, mv-call): Adapt to new smob
application mechanism.
(smob-call): Remove this instruction.
* libguile/smob.h (scm_smob_descriptor): Rename apply_trampoline_objcode
to apply_trampoline.
* libguile/smob.c: Remove our own objcode trampolines in favor of using
scm_c_make_gsubr.
(scm_smob_prehistory): No more trampoline weak map.
* libguile/procprop.c (scm_i_procedure_arity): Adapt to applicable smob
representation change.
* libguile/vm.c (prepare_smob_call): New helper. Now, instead of making
a per-smob trampoline, we will shuffle the smob into the args and use
a gsubr. This prevents a memory leak in which the trampolines, which
were values in a weak-key table, were preventing the smobs from being
collected.
* libguile/vm-i-system.c (call, tail-call, mv-call): Adapt to new smob
application mechanism.
(smob-call): Remove this instruction.
* libguile/smob.h (scm_smob_descriptor): Rename apply_trampoline_objcode
to apply_trampoline.
* libguile/smob.c: Remove our own objcode trampolines in favor of using
scm_c_make_gsubr.
(scm_smob_prehistory): No more trampoline weak map.
* libguile/procprop.c (scm_i_procedure_arity): Adapt to applicable smob
representation change.
* module/web/server/http.scm (bad-request, http-read): If an exception
is raised while reading a response, write out a 400 Bad Request
response before closing the port.
* module/language/elisp/boot.el (integerp, wholenump): Call `integer?'
before `exact?' so that these predicates return nil for non-numbers
instead of signalling an error.