Fixes <https://bugs.gnu.org/61073>.
* libguile/posix.c (FDES_FROM_PORT_OR_INTEGER): When OBJ is not an
integer, use 'SCM_VALIDATE_OPFPORT' before using 'SCM_FPORT_FDES'.
* test-suite/tests/posix.test ("spawn")["non-file port argument"]: New
test.
* doc/ref/api-binding.texi (Local Bindings): Document multiple-value
returns for let.
* doc/ref/api-control.texi (begin): Document multiple-value returns for
begin.
(Conditionals): Document multiple-value returns and use 'body' in the
syntax description of when, unless, cond, case.
(Multiple values): Document multiple-value returns and use 'body' in
the syntax description of SRFI-8 receive.
(Fluids and Dynamic States): Use 'body' in the syntax description of
'with-fluids'.
This commit adds internal definitions to the following derived
forms: when, unless, cond, case, with-fluids, and and-let*.
* doc/ref/api-control.texi (Conditionals): Update the syntax and docs
of when, unless, cond, and case.
* module/ice-9/and-let-star.scm (and-let*): Changed begins to let.
* module/ice-9/boot-9.scm (cond, case, when, unless, with-fluids):
Changed begins to let.
Fixes <https://bugs.gnu.org/60971>.
Reported by lloda <lloda@sarc.name> and Greg Troxel <gdt@lexort.com>.
On macOS and NetBSD, 'WEXITSTATUS' expects an lvalue so the expression
passed to 'verify' would be invalid.
* libguile/posix.c: Move 'verify' assertion within #ifdef.
This is a followup to f859e0f58b, which
led to warnings on GNU/Linux:
threads.c:358:43: warning: 'scm_i_current_thread' initialized and declared 'extern'
* libguile/threads.c (scm_i_current_thread): Make 'SCM_INTERNAL'
conditional.
* GUILE-VERSION (GUILE_MICRO_VERSION): Increment.
(LIBGUILE_INTERFACE_CURRENT): Increment, to account for the new
'scm_*at' procedures, 'scm_bytevector_slice', etc.
(LIBGUILE_INTERFACE_AGE): Increment.
This is again from Gnulib v0.1-5703-g356a414e8c.
* m4/gnulib-cache.m4: Add 'posix_spawn_file_actions_addclose',
'posix_spawn_file_actions_adddup2',
'posix_spawn_file_actions_addopen', and
'posix_spawn_file_actions_init'.
This is a followup to edfca3b7e5, which
added the 'posix_spawnp' module but not 'posix_spawn'.
* m4/gnulib-cache.m4: Add 'posix_spawn' module.
* gnulib-local/m4/clock_time.m4.diff: Adjust.
* configure.ac: Move 'gl_EARLY' use right after 'AC_PROG_CC'.
This reduces the amount of memory that needs to be allocated while
writing the ELF file to disk.
Note: We're abusing #:page-aligned? in 'link-elf' to choose whether to
return a bytevector or a procedure.
* module/system/vm/linker.scm (process-reloc): Subtract SECTION-OFFSET
when writing to BV.
(write-linker-object): Pass BV directly to the linker object writer.
(link-elf): When PAGE-ALIGNED? is false, call 'bytevector-slice' from
here. When it is true, return a procedure that takes a port and writes
to it, without having to allocate a bytevector for the whole ELF
container.
* module/language/bytecode/spec.scm (bytecode->value): Handle X being a
procedure instead of a bytevector.
(bytecode) <#:printer>: Likewise.
* test-suite/tests/linker.test (link-elf-with-one-main-section): Pass
#:page-aligned? #f.
This reduces the amount of memory used during linking and reduces the
number of copies to be done between bytevectors.
* module/system/vm/linker.scm (<linker-object>): Remove 'bv' field and
add 'size' and 'writer'.
(make-linker-object): Adjust accordingly.
(string-table-size): New procedure.
(link-string-table!): Remove.
(string-table-writer): New procedure.
(allocate-segment): Adjust 'make-linker-object' call.
(find-shstrndx): Call the 'linker-object-writer' of O.
(add-elf-objects): Adjust 'make-linker-object' call. Remove
'make-bytevector' allocations and move serialization to lazy 'writer'
procedures. Define 'segments' and 'add-header-segment!'. Return the
latter as the first value.
* module/system/vm/assembler.scm (make-object): Remove 'bv' parameter
and add 'size' and 'writer'.
(link-data): Remove 'make-bytevector' call and move serialization to
a lazy 'writer' procedure.
(link-text-object): Likewise.
(link-frame-maps): Likewise.
(link-dynamic-section): Likewise.
(link-shstrtab): Likewise.
(link-symtab): Likewise.
(link-arities): Likewise, and remove 'bytevector-append'.
(link-docstrs): Likewise.
(link-procprops): Likewise.
(link-debug): Likewise, and define 'copy-writer'.
* test-suite/tests/linker.test (link-elf-with-one-main-section): Adjust
accordingly.
* module/system/vm/assembler.scm (process-relocs): Remove 'buf'
parameter and turn into a pure function.
(patch-relocs!): New procedure. Perform the side effects previously
done in 'process-relocs'.
(link-text-object): Adjust accordingly.
This test would segfault prior to
c0004442b7.
See <https://bugs.gnu.org/60488>.
* test-suite/tests/strings.test ("string-ref"): Use 'with-test-prefix/c&e'.
["negative index"]: Check the reported bounds.
* doc/ref/api-macros.texi: make the macro expand to the literal
date, not to a call to the date function. The example previously
did not actually need eval-when and did not show the intended
effect.
Fixes <https://bugs.gnu.org/60522>.
Reported by Sascha Ziemann <ceving@gmail.com>.
* module/language/tree-il/primitives.scm (make-vector): Return #f when
passed an incorrect number of arguments.
* test-suite/tests/peval.test ("partial evaluation"): Add tests.
* module/rnrs/bytevectors/gnu.scm: New file.
* am/bootstrap.am (SOURCES): Add it.
* libguile/bytevectors.c (scm_bytevector_slice): New function.
* libguile/bytevectors.h (scm_bytevector_slice): New declaration.
* test-suite/tests/bytevectors.test ("bytevector-slice"): New tests.
* doc/ref/api-data.texi (Bytevector Slices): New node.
Fixes <https://bugs.gnu.org/59321>.
Reported by <hylophile@posteo.de>.
Some systems provide "/proc/self/fd" which is a directory containing an
entry for each open file descriptor in the current process. We use this
to limit the number of close() calls needed to ensure file descriptors
aren't leaked to the child process when forking.
* libguile/posix.c (close_inherited_fds_slow):
(close_inherited_fds): New static helper functions.
(scm_spawn_process): Attempt to close inherited file descriptors
efficiently using 'close_inherited_fds', falling back to the brute-force
approach in 'close_inherited_fds_slow'.
* NEWS: Update.
This test reproduces the error from <https://bugs.gnu.org/56493>, and
passes with the workaround which was merged in commit
c7fa78fc75.
* test-suite/tests/eval.test ("avoid frame-local-ref out of range"): New
test.
Signed-off-by: Ludovic Courtès <ludo@gnu.org>
See (1994-11-04) https://groups.google.com/g/gnu.misc.discuss/c/0VtEf1fgEJk/m/IMBs2o-ftrgJ
> If GEL and GUL and GLUE don't work for the name of the scripting
> language, how about:
>
> GUILE - GNU's Universal Interpreted Language Extension
>
> (This also implies Scheme-ing, and means that the GNU's Universal
> Interpreted Language Developers would be part of a ...)
> --
> Lee Thomas
and (1994-11-22) https://groups.google.com/g/gnu.misc.discuss/c/9pD9yVoRYFw/m/0z7SLYbx8loJ
> Why "GUILE"? (GNU's Universal Interpreted Language Extension)
> Two additional reasons:
>
> 1. It does not give deliberate offense to Dr. Ousterhout or his
> supporters, thereby allowing the warring factions to eventually
> make peace (along with some others, perhaps - Gloria's 'Usband Is
> Linguistically Educated) and get back to work.
> 2. By pronunciation it offers appreciation to one of the co-inventors
> of Scheme. (Maybe a library package could be named "Scheme User
> Supported System Macros And Native-code"? OK, that's a stretch ...)
> --
> Lee Thomas,
and https://groups.google.com/g/comp.lang.scheme/c/X5GrLVAvGLU/m/Xk11xCrbzCcJ
> A while back, I started calling the language being built by the GNU Project
> GEL. It turns out that GEL is a trademark of Sybase Inc. Therefore,
> we must choose a new name. Please do not refer to the GNU language
> as GEL.
>
> My favorite proposed name, posted recently to comp.lang.scheme, is GUILE.
> I like the name, because i think programmers should be encouraged to use
> GUILE when writing programs. The name may change yet again; but for now,
> please refer to the GNU language as GUILE.
>
> -t