* module/system/vm/trap-state.scm: New file, tracks a VM-specific set of
traps.
* module/Makefile.am: Add trap-state.scm.
* module/system/repl/error-handling.scm: While in a with-error-handling
block, bind a default trap handler that invokes a recursive prompt.
* module/system/repl/command.scm: Add a `break' repl meta-command.
* module/system/vm/traps.scm: New module, implements higher-level traps
based on the VM hooks. Inspired by (ice-9 debugging traps). Instead of
the ice-9's variety, these traps have a procedural interface instead
of a GOOPS interface.
* module/Makefile.am: Add the new module.
* libguile/vm-i-system.c (call_cc, tail_call_cc): Call the new
RESTORE_CONTINUATION_HOOK when a continuation is restored.
(prompt): Call the new ABORT_CONTINUATION_HOOK when entering the abort
handler's continuation.
* libguile/vm-engine.h (ABORT_CONTINUATION_HOOK)
(RESTORE_CONTINUATION_HOOK):
* libguile/vm.h (SCM_VM_ABORT_CONTINUATION_HOOK)
(SCM_VM_RESTORE_CONTINUATION_HOOK):
* libguile/vm.c: (scm_vm_abort_continuation_hook): New hook, called when
entering an abort handler.
(scm_vm_restore_continuation_hook): New hook, called after returning
to a continuation.
* module/system/vm/vm.scm: Add hooks to export list.
* libguile/vm.h (SCM_VM_PUSH_CONTINUATION_HOOK)
(SCM_VM_POP_CONTINUATION_HOOK): New hooks, to replace
enter/exit/return.
(SCM_VM_BOOT_HOOK, SCM_VM_HALT_HOOK, SCM_VM_BREAK_HOOK): Remove these
useless hooks.
* libguile/vm.c (scm_vm_push_continuation_hook)
(scm_vm_pop_continuation_hook): New accessors.
* libguile/vm-i-system.c: Remove boot, halt, break, enter, exit, and
return hooks. Also remove the break instruction. Instead now when we
push a new continuation onto the stack we call PUSH_CONTINUATION_HOOK,
and when we pop via a return we call POP_CONTINUATION_HOOK. APPLY_HOOK
is now decoupled from continuation pushes and pops.
* libguile/vm-engine.h:
* libguile/vm-engine.c: Adapt for hooks.
* module/system/vm/trace.scm (vm-trace): Adapt for hooks. Also revive
the #:instructions? #t mode.
* module/system/vm/vm.scm: Adapt exports for new set of hooks.
Reported by Mike Gran <spk121@yahoo.com>.
* libguile/strings.c (scm_i_unistring_escapes_to_guile_escapes,
scm_i_unistring_escapes_to_r6rs_escapes): Augment comments.
(scm_to_stringn): When `handler ==
SCM_FAILED_CONVERSION_ESCAPE_SEQUENCE && SCM_R6RS_ESCAPES_P', realloc
BUF so that it's large enough for the worst case.
* libguile/print.c (display_character): When `result != NULL && strategy
== SCM_FAILED_CONVERSION_ESCAPE_SEQUENCE && SCM_R6RS_ESCAPES_P', make
LOCALE_ENCODED large enough to hold an R6RS escape.
This makes `peek-char' 40x faster on a port whose encoding is
faster on a UTF-8 port containing multi-byte codepoints.
The `xml->sxml' procedure is 4x faster on a 2.7 MiB XML file.
* libguile/ports.c (get_codepoint): New procedure, moved here from
`scm_getc', with the additional BUF and LEN parameters.
(scm_getc): Use it.
(scm_peek_char): Use it instead of the `scm_getc'/`scm_ungetc'
sequence.
* test-suite/tests/ports.test ("string ports")["peek-char [latin-1]",
"peek-char [utf-8]"]: New tests.
* benchmark-suite/Makefile.am (SCM_BENCHMARKS): Add
`benchmarks/ports.bm'.
* benchmark-suite/benchmarks/ports.bm: New file.
This had been removed by commit 07f49ac786
("Factorize and optimize `write' for strings and characters.").
Thanks Mike!
* libguile/print.c (write_combining_character): New procedure.
(write_character): Use it.
* test-suite/tests/chars.test ("basic char handling")["combining accent
is pretty-printed", "combining X is pretty-printed"]: New tests.
* test-suite/tests/encoding-iso88591.test ("characters")["write A
followed by combining accent"]: New test.
* test-suite/tests/encoding-utf8.test ("characters")["write A followed
by combining accent"]: New test.
According to `write.bm', this makes `write' 2.6 times faster for strings.
* libguile/print.c (iprin1): Use `write_character' when
`SCM_WRITINGP (pstate)' and `SCM_CHARP (exp)' or `scm_is_string (exp)'.
(scm_i_charprint): Remove.
(display_character, write_character): New functions.
(scm_write_char): Use `display_character' instead of
`scm_i_charprint'.
* libguile/print.h (scm_i_charprint): Remove declaration.
* benchmark-suite/benchmarks/write.bm: New file.
* benchmark-suite/Makefile.am (SCM_BENCHMARKS): Add
`benchmarks/write.bm'.
* libguile/srfi-1.c:
* libguile/srfi-1.h:
* libguile/srfi-60.c:
* libguile/srfi-60.h:
* libguile/ChangeLog-srfi: Move here, from the srfi/ dir. The C API is
internal. Add API to register the extensions, called by init.c.
* libguile/init.c: Verily, register srfi extensions.
* libguile/Makefile.am: Add srfi files.
* module/srfi/srfi-1.scm:
* module/srfi/srfi-60.scm: Update load-extension invocation.
* Makefile.am:
* configure.ac: Remove srfi/ dir.
* test-suite/standalone/Makefile.am:
* test-suite/standalone/test-srfi-1.c: Remove srfi-1 C test, we don't
support this API any more.
* srfi/srfi-13.c:
* srfi/srfi-13.h:
* srfi/srfi-14.c:
* srfi/srfi-14.h:
* srfi/srfi-4.c:
* srfi/srfi-4.h:
* srfi/Makefile.am:
* configure.ac: Remove empty shlibs and headers for srfis 4, 13, and
14. The "version" was never programmatically exported, so there's no
possible way people could have used these.
* doc/ref/api-data.texi: document scm_to_stringn, scm_from_stringn,
scm_to_latin1_stringn, and scm_from_latin1_stringn
* libguile/strings.h (scm_to_stringn): make public
(scm_to_latin1_stringn): new declaration
(scm_from_latin1_stringn): new declaration
* libguile/strings.c (scm_to_latin1_stringn): new function
(scm_from_latin1_stringn): new function
* module/Makefile.am (ice-9/psyntax-pp.go, ice-9/psyntax-pp.scm.gen)
(ice-9/eval.go): Simplify rules to not require `touch', now that .go
files are checked for freshness, not for synchronicity.
* libguile/numbers.c (scm_log10): Check whether `HAVE_COMPLEX_DOUBLE'
and `HAVE_CLOG10' are defined instead of checking whether they are
non-zero.
(scm_sqrt): Likewise for `HAVE_COMPLEX_DOUBLE' and
`HAVE_USABLE_CSQRT'.
This updates Gnulib to v0.0-4219-g84cdd8b.
* m4/gnulib-cache.m4: Add `isinf' and `isnan'.
* configure.ac: Remove checks for `floatingpoint.h', `ieeefp.h', and
`nan.h'.
* libguile/gen-scmconfig.c (main): Remove definitions of
`SCM_HAVE_FLOATINGPOINT_H', `SCM_HAVE_IEEEFP_H', and
`SCM_HAVE_NAN_H'.
* libguile/numbers.c (isnan)[SCO && !HAVE_ISNAN]: Remove.
(isinf)[SCO && !HAVE_ISINF]: Remove.
(xisinf, xisnan): Remove. Change callers to use `isinf' and `isnan'.
(guile_ieee_init): Remove the `defined HAVE_ISINF' and `define
HAVE_ISNAN' conditions.
* libguile/numbers.h: Remove code conditional on
`SCM_HAVE_FLOATINGPOINT_H', `SCM_HAVE_IEEEFP_H', or `SCM_HAVE_NAN_H'.
Suggested by primus <rprimus@gmail.com>.
* configure.ac: Use `AC_LIB_HAVE_LINKFLAGS' when checking for libltdl.
* libguile/Makefile.am (libguile_@GUILE_EFFECTIVE_VERSION@_la_LIBADD):
Add $(LTLIBLTDL).
* README: Update to make it clear that libgc and libffi don't have a
`--with-XXX-prefix' option.
* libguile/programs.c (scm_program_module): Fix an edge case in which
this function returned non-modules. Thanks to José Antonio Ortega
Ruiz, Caballero del Cálculo Lambda for the report.
* module/ice-9/boot-9.scm (make-root-module, make-scm-module): Remove
these functions; they are only called once, so we inline them at their
call sites.
(the-root-module, the-scm-module): The aforementioned call sites.
* libguile/load.c (compiled_is_fresh): Don't emit "source file is newer"
warning when either FULL_FILENAME or COMPILED_FILENAME could not be
stat'd. This is consistent with what load/compiled-file-name do.
* libguile/load.c (compiled_is_fresh): Rename `res' to
`compiled_is_newer'. Use `get_stat_mtime' to compare with nano-second
resolution when available.
* module/ice-9/boot-9.scm (load)[fresh-compiled-file-name]: Likewise,
using `stat:mtimensec'.
* libguile/foreign.c (make_cif): New procedure, with code formerly in
`scm_make_foreign_function'.
(scm_make_foreign_function): Use it.
(invoke_closure, scm_procedure_to_pointer)[FFI_CLOSURES]: New
functions.
* libguile/foreign.h (scm_procedure_to_pointer): New declaration.
* module/system/foreign.scm: Export `procedure->pointer' when available.
* test-suite/standalone/test-ffi (f-callback-1, f-callback-2): New
procedures and related tests.
* test-suite/standalone/test-ffi-lib.c (test_ffi_callback_1,
test_ffi_callback_2): New functions.
* test-suite/tests/foreign.test ("procedure->pointer"): New test prefix.
* doc/ref/api-foreign.texi (Dynamic FFI): Document `procedure->pointer'.
* module/ice-9/session.scm (submodules): replace implementation to
use `module-submodules' instead of `module-obarray' (the latter
doesn't include submodules anymore).
* test-suite/tests/session.test: new test suite for session, checking
the exported procedures that use `submodules'.
Signed-off-by: Jose A. Ortega Ruiz <jao@gnu.org>