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.
* 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.
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'.
* libguile/lightning/configure.ac: Start trimming down for inclusion in
configure.ac. Remove check for getopt things; we don't include bits
of lightning that use getopt. Remove check for stdint, as we will have
it.
* libguile/lightning/include/lightning.h: Unconditionally include
stdint.h.
* libguile/lightning/Makefile.am:
* libguile/lightning/lib/Makefile.am: Remove.
* libguile/lightning/lightning.am: Add all the C and H files here.
* libguile/lightning/configure.ac: Remove AC_OUTPUT clause.
* libguile/lightning/lightning.am: New file. libguile will include
this. Contents initially from include/Makefile.am and
include/lightning/Makefile.am.
* libguile/lightning/include/Makefile.am:
* libguile/lightning/include/lightning/Makefile.am: Remove.
* libguile/lightning/configure.ac: Remove output of include Makefiles.
* libguile/lightning/configure.ac:
* libguile/lightning/Makefile.am:
* libguile/lightning/check: Remove unit tests. If there is a problem
with lightning on this target, users should check if the upstream tests
pass. Otherwise we will find errors via the Guile test suite.
* libguile/lightning/: New directory, made by the following commands:
git remote add lightning https://git.savannah.gnu.org/git/lightning.git
git merge -s ours --no-commit --allow-unrelated-histories lightning/master
git read-tree --prefix=libguile/lightning/ -u lightning/master
In theory we will be able to update via:
git merge -s subtree lightning/master
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.
* 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.
This reverts commit 593e2db1dd. The goto
strategy works for hooks that run just before a "next"; it doesn't work
for ones that run at the beginning of opcodes.
* libguile/vm-engine.c (GOTO_HOOK, HOOK_HANDLER): Split hooks that don't
take args into a "goto" side and a "target" side. The idea is to just
reify the hook call at one place in the binary, since the VM
continuation is fully in the registers.
(APPLY_HOOK, PUSH_CONTINUATION_HOOK, NEXT_HOOK)
(ABORT_CONTINUATION_HOOK): Reimplement in terms of goto hooks.
(POP_CONTINUATION_HOOK): This one is still old-style.
(CONTINUE): New helper definition.
(call, call-label): Move the push-continuation hooks up a bit, so it's
clear they don't depend on intermediate opcode state.
(vm_engine): Reify hook handlers for apply, etc.
* libguile/vm.c (vm_dispatch_hook): Add a check that we're in the debug
engine and the trace level is positive. Allows us to do cheaper
checks for when to dispatch hooks.
(scm_call_n): Just check if trace level is nonzero.
* libguile/vm-engine.c (RUN_HOOK): Likewise just check if trace level is
nonzero.
* libguile/vm.c (scm_call_n): Only call hooks if the engine supports
it.
(vm_dispatch_abort_hook, vm_dispatch_next_hook)
(vm_dispatch_pop_continuation_hook, vm_dispatch_push_continuation_hook)
(vm_dispatch_apply_hook, vm_dispatch_hook): Take a thread as arg
instead of VM, because that will probably already be in a register in
the VM. Given that all values are taken relative to the SP, no
need to pass that either.
* libguile/vm-engine.c (RUN_HOOK0, RUN_HOOK1): Update appropriately.
* libguile/vm-engine.c (vm_engine): Remove "resume" argument; scm_call_n
will handle the differences.
* libguile/vm.c (scm_call_n): Inline handling of what to do in normal
and resume cases. Remove resume argument to vm_engine.
* libguile/continuations.c (scm_i_make_continuation): Remove registers
argument; instead get from thread.
* libguile/vm-engine.c (vm_engine): Adapt VM engine to not receive a
registers argument, and thus to not pass it to intrinsics either.
* libguile/intrinsics.h:
* libguile/intrinsics.c (push_prompt):
* libguile/vm.c (capture_continuation, compose_continuation)
(abort_to_prompt): Refactor these intrinsics to not take a registers
argument; it's not necessary.
(scm_call_n): Don't pass registers argument.
* libguile/vm-engine.c (CALL_INTRINSIC): New helper macro.
(ALLOC_FRAME, vm_engine): Use CALL_INTRINSIC when we need to call
intrinsics. GCC still doesn't allocate intrinsics to a register
though!
* libguile/fluids.c (scm_i_fluid_ref): New internal function.
(scm_fluid_ref): Use scm_i_fluid_ref.
* libguile/intrinsics.h:
* libguile/intrinsics.c (current_module): New intrinsic.
* libguile/modules.c (scm_i_current_module): New internal function.
(scm_current_module): Use new internal function.
* module/language/cps/reify-primitives.scm (compute-known-primitives):
Add current-module as an intrinsic primitive.
* module/system/vm/assembler.scm (define-scm<-thread-intrinsic):
(current-module): Arrange to compile to intrinsic call.
* libguile/vm.c (vm_apply_non_program_code): Remove, now unneeded.
* libguile/vm-engine.c (vm_engine, call, tail-call, tail-call/shuffle)
(tail-apply, call/cc): Inline handling of non-programs, as will be the
case with JIT code.
* test-suite/test-suite/lib.scm (exception:vm-error): Remove.
* test-suite/tests/strings.test: Remove override of
exception:wrong-type-arg; not needed since a while ago.
* libguile/intrinsics.c (error_wrong_num_args, error_no_values)
(error_not_enough_values, error_wrong_number_of_values): New
intrinsics.
* libguile/intrinsics.h: Add new intrinsics.
* libguile/vm-engine.c: Signal errors using the new intrinsics.
* libguile/vm.c (vm_error): Remove, now that it's unused.
(vm_error_bad_instruction): Abort instead of throwing an exception.
If we get a bad instruction, nothing good will ever happen!
(compose_continuation): Use wrong-type-arg for unrewindable
continuations.
(scm_bootstrap_vm): No need to make "vm-run" or "vm-error" symbols.
* libguile/intrinsics.h (SCM_FOR_ALL_VM_INTRINSICS): Add intrinsics for
throw, throw/value, and throw/value+data.
* libguile/intrinsics.c (throw_, throw_with_value):
(throw_with_value_and_data): And here they are.
* libguile/vm-engine.c (throw, throw/value, throw/value+data): Use
intrinsics.
* libguile/vm.c: Remove vm_throw et al.
* libguile/vm.c (capture_delimited_continuation): Adapt to caller not
truncating vp->sp to vp->fp before calling.
(abort_to_prompt): Inline vm_abort and avoid the alloca.
* libguile/control.c (scm_abort_to_prompt_star)
* libguile/throw.c (abort_to_prompt): Pass prompt tag and argv in one
array.
* libguile/vm.c (scm_i_vm_abort): Reimplement as a call into the VM's
abort_to_prompt builtin.
(vm_abort): New helper, a copy of scm_i_vm_abort. Will allow us to
avoid some arg shuffling when aborting from the VM.
* libguile/vm.h: Remove setjmp include and simplify scm_i_vm_abort
decl.
* libguile/control.h:
* libguile/control.c (scm_i_make_composable_continuation): Rename from
make_partial_continuation and expose internally.
(scm_abort_to_prompt_star): Adapt to scm_i_vm_abort name change.
* libguile/intrinsics.h (SCM_FOR_ALL_VM_INTRINSICS): Define
abort_to_prompt intrinsic.
* libguile/throw.c (abort_to_prompt): Adapt to scm_i_vm_abort name
change.
* libguile/vm-engine.c (abort): Use abort_to_prompt intrinsic.
* libguile/vm.c (capture_delimited_continuation): Move here from
control.c where it was named reify_partial_continuation.
(scm_i_vm_abort): Move from control.c where it was named
scm_c_abort (and only exposed internally).
(abort_to_prompt): New intrinsic, replacing vm_abort.
* libguile/vm.h: Add setjmp include and scm_i_vm_abort decl.