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

20881 commits

Author SHA1 Message Date
Ludovic Courtès
80bf3f48b4 Remove 'extern' from 'scm_i_current_thread' definition, except on macOS.
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.
2023-01-20 10:04:48 +01:00
Ludovic Courtès
f57f931e6a build: Use '--enable-mini-gmp' for "make distcheck".
* Makefile.am (DISTCHECK_CONFIGURE_FLAGS): Add '--enable-mini-gmp'.
2023-01-20 09:46:07 +01:00
Ludovic Courtès
479b7388e9 GNU Guile 3.0.9.
* 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.
2023-01-19 22:16:15 +01:00
Ludovic Courtès
2ace7a5312 doc: Mention URL of Guile-GnuTLS.
* doc/ref/web.texi (Web Client): Mention new URL of Guile-GnuTLS.
2023-01-19 15:48:47 +01:00
Ludovic Courtès
616c217409 Add Gnulib 'sys_select' module, needed for MinGW.
This is again from Gnulib v0.1-5703-g356a414e8c.

* m4/gnulib-cache.m4: Add 'sys_select'.
* libguile/threads.c: Include <sys/select.h>.
2023-01-19 15:48:41 +01:00
Ludovic Courtès
a43a8fd8ba Add Gnulib 'gethostname' module, needed for MinGW.
This is again from Gnulib v0.1-5703-g356a414e8c.

* m4/gnulib-cache.m4: Add 'gethostname'.
2023-01-19 09:58:01 +01:00
Ludovic Courtès
3bb08542d2 Add Gnulib modules for 'posix_spawn' file operations.
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'.
2023-01-19 00:32:12 +01:00
Ludovic Courtès
d98888290b Remove more Gnulib generated files. 2023-01-18 22:50:23 +01:00
Ludovic Courtès
aeb22f4861 Update Gnulib to v0.1-5703-g356a414e8c and add 'posix_spawn' module.
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'.
2023-01-18 22:50:18 +01:00
Ludovic Courtès
4404b553a5 Adjust 'W_EXITCODE' for Windows.
* libguile/posix.c (W_EXITCODE) [_WIN32]: New specialized definition.
2023-01-18 18:24:11 +01:00
Ludovic Courtès
cd7475541a Fix argument number in 'spawn' type check.
* libguile/posix.c (scm_spawn_process): Fix argument number in
'SCM_VALIDATE_NONEMPTYLIST'.
2023-01-18 12:13:55 +01:00
Ludovic Courtès
9a004606e0 Update NEWS.
* NEWS: Update.
2023-01-17 17:49:05 +01:00
Ludovic Courtès
3cd64feb2e linker: Do not store entire ELF in memory when writing to a file.
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.
2023-01-17 17:49:05 +01:00
Ludovic Courtès
4ab71e1f0d linker: Linker object writer takes a single argument.
* module/system/vm/linker.scm (write-linker-object): Pass the
'linker-object-writer' a single argument.
(string-table-writer, add-elf-objects): Adjust writers accordingly.
(string-table-writer):
(add-elf-objects):
* module/system/vm/assembler.scm (link-data, link-text-object)
(link-frame-maps, link-dynamic-section)
(link-symtab, link-arities, link-docstrs)
(link-procprops, link-debug): Likewise.
* test-suite/tests/linker.test (link-elf-with-one-main-section):
Likewise.
2023-01-17 17:49:05 +01:00
Ludovic Courtès
041f11b353 linker, assembler: Avoid intermediate bytevectors.
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.
2023-01-17 17:49:05 +01:00
Ludovic Courtès
d0d9743607 linker: Separate effectful part of 'add-elf-objects'.
* module/system/vm/linker.scm (add-elf-objects)[write-and-reloc]: Split
into...
[compute-reloc, write-object-elf-header!]: ... this.
Adjust accordingly.
2023-01-17 17:49:05 +01:00
Ludovic Courtès
d439a3f671 assembler: Separate effectful part of 'link-docstrs'.
* module/system/vm/assembler.scm (link-docstrs): Define
'write-docstrings!' and use it.
2023-01-17 17:49:05 +01:00
Ludovic Courtès
13e2d5b66b assembler: Separate effectful part of 'link-frame-maps'.
* module/system/vm/assembler.scm (link-frame-maps)[make-frame-maps]:
Define 'write!' and use it.
2023-01-17 17:49:05 +01:00
Ludovic Courtès
dc0c4ccb1f assembler: Separate effectful part of 'link-procprops'.
* module/system/vm/assembler.scm (link-procprops): Define
'write-procprops!' and use it.
2023-01-17 17:49:05 +01:00
Ludovic Courtès
c7f1522c6d assembler: Separate effectful part of 'link-dynamic-section'.
* module/system/vm/assembler.scm (link-dynamic-section): Define 'relocs'
once for all.  Define 'write!' and use it.
2023-01-17 17:49:05 +01:00
Ludovic Courtès
fc5eae5d01 assembler: Separate effectful part of 'link-symtab'.
* module/system/vm/assembler.scm (link-symtab): Define 'names' and
'write-symbols!'.  Use it.
2023-01-17 17:49:05 +01:00
Ludovic Courtès
15c4c4ceb3 assembler: Separate 'process-relocs' from 'patch-relocs!'.
* 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.
2023-01-17 17:49:05 +01:00
Ludovic Courtès
cd9fc16ba0 Add test for 'string-ref' with a negative index at -O2.
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.
2023-01-17 17:49:05 +01:00
Daniel Llorens
e903b76795 Document R7RS functions related to bytevectors
* doc/ref/api-data.texi (Bytevectors): Fix typo in (r6:bytevector-copy),
  index need not be positive.
  Fix typos in bytevector-length, bytevector=, bytevector-fill!.
  New node 'Bytevector Procedures in R7RS'.
  (Bytevector Procedures in R7RS): Document R7RS bytevector,
  bytevector-copy, bytevector-copy!, bytevector-append.
* doc/ref/api-io.texi (Binary I/O): Document R7RS
  open-output-bytevector, write-u8, read-u8, peek-u8,
  get-output-bytevector, open-input-bytevector, read-bytevector!,
  read-bytevector, write-bytevector.
* doc/ref/r7rs.texi (R7RS support): Link to R7RS standard.
2023-01-17 16:07:48 +01:00
Jean Abou Samra
ff165ec904 Doc: clarification on regexes and encodings
* doc/ref/api-regex.texi: make it more obviously clear that regexp
  matching supports only characters supported by the locale encoding.
2023-01-17 07:20:10 +01:00
Jean Abou Samra
7d5ab8fa40 doc: Fix eval-when example
* 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.
2023-01-17 07:06:55 +01:00
Ludovic Courtès
f8938f517e build: Avoid implicit 'int' return type in configure tests.
Fixes <https://bugs.gnu.org/60022>.
Reported by Florian Weimer <fweimer@redhat.com>.

* configure.ac: Add missing implicit 'int' return type in tests.
2023-01-16 23:17:41 +01:00
Ludovic Courtès
51152392ef Do not expand 'make-vector' primcall with wrong number of arguments.
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.
2023-01-16 15:33:18 +01:00
Ludovic Courtès
e441c34f16 Add 'bytevector-slice'.
* 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.
2023-01-14 16:14:17 +01:00
Ludovic Courtès
54ee636e57 Remove Gnulib generated file.
This was inadvertently committed in edfca3b7e5.

* lib/stdbool.h: Delete.
2023-01-14 15:44:37 +01:00
Ludovic Courtès
45af53f65f Bump user-visible copyright years to 2023.
* module/ice-9/command-line.scm (version-etc):
* module/scripts/compile.scm (show-version):
* module/system/repl/common.scm (*version*): Bump to 2023.
2023-01-13 16:15:07 +01:00
Andrew Whatson
9332b63240 Reduce redundant 'close' calls when forking on some systems.
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.
2023-01-13 16:07:42 +01:00
Josselin Poiret
527c257d6e Make 'system*' and 'piped-process' internally use 'spawn'.
Fixes <https://bugs.gnu.org/52835>.

* libguile/posix.c (scm_system_star, scm_piped_process): Use do_spawn.
(start_child): Remove function.
* test-suite/tests/posix.test ("system*")["https://bugs.gnu.org/52835"]:
New test.
* NEWS: Update.

Co-authored-by: Ludovic Courtès <ludo@gnu.org>
Signed-off-by: Ludovic Courtès <ludo@gnu.org>
2023-01-13 16:05:56 +01:00
Josselin Poiret
551929e4fb Add 'spawn'.
* libguile/posix.c: Include spawn.h from Gnulib.
(do_spawn, scm_spawn_process): New functions.
(kw_environment, hw_input, kw_output, kw_error, kw_search_path): New
variables.
* doc/ref/posix.texi (Processes): Document it.
* test-suite/tests/posix.test ("spawn"): New test prefix.
* NEWS: Update.

Co-authored-by: Ludovic Courtès <ludo@gnu.org>
Signed-off-by: Ludovic Courtès <ludo@gnu.org>
2023-01-13 16:05:30 +01:00
Josselin Poiret
edfca3b7e5 Update gnulib to 0.1.5414-8204d and add posix_spawn, posix_spawnp.
Signed-off-by: Ludovic Courtès <ludo@gnu.org>
2023-01-12 16:41:29 +01:00
Andrew Whatson
fe2a0c54ac Test for 'frame-local-ref' errors when printing backtrace.
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>
2023-01-11 23:09:07 +01:00
Zhang Ning
f3ea8f7fa1 Recognize LoongArch compilation targets.
* module/system/base/target.scm (cpu-endianness): Add case for "Loongarch" variants

Signed-off-by: Zhang Ning <zhangn1985@outlook.com>
2022-12-21 08:49:08 +01:00
Vijay Marupudi
8cb2d5c953 doc: fix documented keyword argument default to match code default 2022-12-21 08:29:42 +01:00
Daniel Llorens
f859e0f58b Patch for bug #60234
See https://debbugs.gnu.org/60234.

gcc warns about the extra extern, but we get rid of the tls model mismatch
error.
2022-12-21 07:58:37 +01:00
Aleix Conchillo Flaqué
3bdcc3668f fix Apple Silicon JIT compilation
* configure.ac: check for pthread_jit_write_protect_np.

* libguile/jit.c: add support for Apple Silicon JIT compilation.

Fixes https://debbugs.gnu.org/cgi/bugreport.cgi?bug=44505
2022-12-20 20:27:42 +01:00
Jean Abou Samra
b54263dc98 Doc: document that eq?, eqv? and equal? take any number of arguments 2022-12-11 02:19:19 +01:00
Arne Babenhauserheide
beb7a2af79 doc: Lee Thomas suggested the name change.
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
2022-12-10 18:23:52 +01:00
Colin Woodbury
856c3f96fa doc: Fix minor typos
The spelling mistake is a clear fix, but the Arrays fix might not be as
obvious. Previously, with the "arrays" alias, the @ref macro would
render a superfluous period after the word "arrays", rendering (at least
within Emacs) as:

  you may wish to use see arrays. instead.

Signed-off-by: Mikael Djurfeldt <mikael@djurfeldt.com>
2022-12-09 13:15:56 +01:00
Andy Wingo
ff7328df0d Fix peval bug when expand-primitives introduces lexicals
* module/language/tree-il/peval.scm
(augment-var-table-with-externally-introduced-lexicals): New helper.
* module/language/tree-il/peval.scm (peval): Augment store with any
lexicals introduced by expand-primitives.
* test-suite/tests/peval.test ("partial evaluation"): Add tests.
2022-12-01 13:01:49 +01:00
Andy Wingo
d184d09346 Fix order-of-side-effects bug in (eq? x y z) expansion
* module/language/tree-il/primitives.scm (bind-lexicals): New helper.
(expand-eq, expand-chained-comparisons): Ensure all arguments are
eagerly evaluated.  Previously an intermediate #f result would shortcut
the evaluation.
* test-suite/tests/compiler.test ("size effects in multi-arg eq / <"):
Add test.
2022-12-01 12:56:51 +01:00
Andrew Whatson
c7fa78fc75 Avoid 'frame-local-ref' errors when printing backtrace.
Workaround for <https://bugs.gnu.org/57948>.

* module/system/vm/frame.scm (frame-call-representation): Treat a
binding as "unspecified" if its slot exceeds 'frame-num-locals'.
2022-11-29 11:53:54 +01:00
Andrew Whatson
02f69c1d84 Add tests for warning locations.
These would have caught <https://bugs.gnu.org/56493>.

* test-suite/tests/tree-il.test ("warnings")("location")["unused
variable", "unbound variable (spaces)", "unbound variable (tabs)"]: New
tests.
2022-11-29 11:41:05 +01:00
Olivier Dion
a1a85581f1 Fix possible deadlock in 'lock-mutex'.
If we got interrupted while waiting on our condition variable, we unlock
the kernel mutex momentarily while executing asynchronous operations
before putting us back into the waiting queue.

However, we have to retry acquiring the mutex before getting back into
the queue, otherwise it's possible that we wait indefinitely since
nobody could be the owner for a while.

* libguile/threads.c (lock_mutex): Try acquring the mutex after signal
interruption.

Signed-off-by: Ludovic Courtès <ludo@gnu.org>
2022-11-20 18:17:32 +01:00
Ludovic Courtès
e47a153317 Work around unwanted stack retention when using prompts.
Fixes <https://bugs.gnu.org/59021>.

Previously, the stack allocated in 'capture_stack' and stored in
'p->stack_bottom' could be retained, leading to heap growth.

* libguile/vm.c (capture_stack): Make a single 'scm_gc_malloc' call
instead of two.
2022-11-20 18:07:24 +01:00
Ludovic Courtès
f72cd79152 doc: Fix typo in VM instruction name.
* doc/ref/vm.texi (Intrinsic Call Instructions): Fix name of
'call-scm<-thread'.
2022-11-01 22:02:25 +01:00