summaryrefslogtreecommitdiff
Commit message (Collapse)AuthorAgeFilesLines
* Use /dev/null in 'piped-process' if port is not backed by a fdes.HEADmainJosselin Poiret2023-05-083-5/+29
| | | | | | | | | | | | | | | | | In Guile 3.0.9, 'system*' would no longer open /dev/null for file descriptors 0, 1, and 2 when its 'current-input-port', 'current-output-port', or 'current-output-port' is not bound to a file port. This patch reinstates that behavior. Fixes <https://bugs.gnu.org/63024>. * libguile/posix.c (piped_process): Open /dev/null to use as in/out/err if the corresponding port is not backed by a file descriptor. * test-suite/tests/posix.test ("system*")["https://bugs.gnu.org/63024"]: New test. * NEWS: Update. Co-authored-by: Ludovic Courtès <ludo@gnu.org>
* Add error handling for spawn's posix_spawn_file_actions_adddup2.Josselin Poiret2023-05-081-6/+13
| | | | | | | * libguile/posix.c (do_spawn): Add error handling if posix_spawn_file_actions_adddup2 fails. Signed-off-by: Ludovic Courtès <ludo@gnu.org>
* call-with-values builtin doesn't leave garbage on the stackAndy Wingo2023-05-073-11/+50
| | | | | | | | | | | | | | | Fixes https://debbugs.gnu.org/63279. The issue was that if the producer thunk caused a backtrace, pretty-printing the call-with-values frame would segfault because there was an unininitialized slot on the stack. For functions produced by the compiler this wouldn't be a problem because there are stack maps, but primitives require that all slots on a pending stack frame be packed (no uninitialized values) and tagged (all SCM values, no unboxed values). * test-suite/tests/error-handling.test: New test. * test-suite/Makefile.am: Add new file. * libguile/vm.c (define_vm_builtins): Fix call-with-values to have a more compact stack.
* Use SCM_GSUBR_MAX in place of the hardcoded numberDaniel Llorens2023-04-272-4/+4
| | | | | | * libguile/gsubr.c (scm_apply_subr): Reference the limit. (get_subr_stub_code): As stated. * libguile/jit.c (compile_subr_call): As stated.
* Fix typo in append procedure documentationJorge Gomez2023-04-051-1/+1
| | | | | | Fixes <https://bugs.gnu.org/62456>. Signed-off-by: Mikael Djurfeldt <mikael@djurfeldt.com>
* Add missing backslash.Mikael Djurfeldt2023-04-041-1/+1
|
* Adjust 'spawn' tests to accept 'LD_ORIGIN_PATH' on GNU/Hurd.Ludovic Courtès2023-04-022-1/+9
| | | | | | | | Fixes <https://bugs.gnu.org/62501>. * test-suite/tests/posix.test ("spawn")["env with #:environment and #:output"]: Add workaround for GNU/Hurd. * NEWS: Update.
* Use 'posix_spawn_file_actions_addclosefrom_np' where available.Ludovic Courtès2023-04-022-1/+17
| | | | | | | * configure.ac: Check for 'posix_spawn_file_actions_addclosefrom_np'. * libguile/posix.c (HAVE_ADDCLOSEFROM): New macro. (close_inherited_fds): Wrap in #ifdef HAVE_ADDCLOSEFROM. (do_spawn) [HAVE_ADDCLOSEFROM]: Use 'posix_spawn_file_actions_addclosefrom_np'.
* Remove racy optimized file descriptor closing loop in 'spawn'.Ludovic Courtès2023-04-021-29/+1
| | | | | | | | | | | | | This reverts 9332b632407894c2e1951cce1bc678f19e1fa8e4, thereby reinstating the performance issue in <https://bugs.gnu.org/59321>. This optimization was subject to race conditions in multi-threaded code: new file descriptors could pop up at any time and thus leak in the child. * libguile/posix.c (close_inherited_fds): Remove. (close_inherited_fds_slow): Rename to... (close_inherited_fds): ... this.
* 'spawn' closes only open file descriptors on non-GNU/Linux systems.Ludovic Courtès2023-04-022-2/+21
| | | | | | | | | Fixes <https://bugs.gnu.org/61095>. Reported by Omar Polo <op@omarpolo.com>. * libguile/posix.c (close_inherited_fds_slow): On systems other than GNU/Linux, call 'addclose' only when 'fcntl' succeeds on MAX_FD. * NEWS: Update.
* Update NEWS.Ludovic Courtès2023-03-201-3/+3
|
* Fix some invalid unicode handling issues with suspendable ports.Christopher Baines2023-03-203-4/+14
| | | | | | | | | | | | | | | | Fixes <https://bugs.gnu.org/62290>. Based on the implementation in ports.c. I don't understand what this code is really doing, but the suspendable ports implementation differs from the similar C code for a couple of inequalities. * module/ice-9/suspendable-ports.scm (decode-utf8, bad-utf8-len): Flip a couple of inequalities. * test-suite/tests/ports.test ("string ports"): Add additional invalid UTF-8 test case. * NEWS: Update. Signed-off-by: Ludovic Courtès <ludo@gnu.org>
* scm_i_utf8_string_hash: compute u8 chars not bytesRob Browning2023-03-186-3/+86
| | | | | | | | | | | | | | | | | | Noticed while investigating a migration to utf-8 strings. After making changes that routed non-ascii symbol hashing through this function, encoding-iso88597.test began intermittently failing because it would traverse trailing garbage when u8_strnlen reported 8 chars instead of 4. Change the scm_i_str2symbol and scm_i_str2uninterned_symbol internal hash type to unsigned long to explicitly match the scm_i_string_hash result type. * libguile/hash.c (scm_i_utf8_string_hash): Call u8_mbsnlen not u8_strnlen. * libguile/symbols.c (scm_i_str2symbol, scm_i_str2uninterned_symbol): Use unsigned long for scm_i_string_hash result. * test-suite/standalone/.gitignore: Add test-hashing. * test-suite/standalone/Makefile.am: Add test-hashing. * test-suite/standalone/test-hashing.c: Add.
* Fix no-clause case-lambda in pevalDaniel Llorens2023-03-172-1/+2
| | | | | | | | This is checked by optargs.test, which 3b47f87618047ebb8812788c64a44877a4f2e0dd broke. * module/language/tree-il/peval.scm (peval): Account for no clause (= no body) case-lambda.
* peval reduces some inlined case-lambda callsDaniel Llorens2023-02-272-0/+95
| | | | | | | * module/language/tree-il/peval.scm (peval): Reduce multiple case lambda in <call> trees according to the number of arguments. Do not try to reduce case-lambda using keyword arguments. * test-suite/tests/peval.test: Tests.
* Remove unnecessary module imports.Ludovic Courtès2023-02-2437-70/+0
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | These were found with: make GUILE_WARNINGS='-W1 -Wunused-module' * module/ice-9/copy-tree.scm: * module/ice-9/eval-string.scm: * module/ice-9/getopt-long.scm: * module/ice-9/poll.scm: * module/ice-9/popen.scm: * module/ice-9/sandbox.scm: * module/ice-9/threads.scm: * module/sxml/apply-templates.scm: * module/sxml/simple.scm: * module/system/base/types.scm: * module/system/repl/command.scm: * module/system/repl/common.scm: * module/system/repl/coop-server.scm: * module/system/repl/debug.scm: * module/system/repl/error-handling.scm: * module/system/repl/repl.scm: * module/system/repl/server.scm: * module/system/vm/assembler.scm: * module/system/vm/disassembler.scm: * module/system/vm/dwarf.scm: * module/system/vm/elf.scm: * module/system/vm/frame.scm: * module/system/vm/inspect.scm: * module/system/vm/linker.scm: * module/system/vm/program.scm: * module/system/vm/trace.scm: * module/system/vm/trap-state.scm: * module/system/vm/traps.scm: * module/system/xref.scm: * module/texinfo/indexing.scm: * module/texinfo/plain-text.scm: * module/texinfo/reflection.scm: * module/texinfo/string-utils.scm: * module/web/client.scm: * module/web/http.scm: * module/web/request.scm: * module/web/response.scm: Remove imports of unused modules.
* Add -Wunused-module.Ludovic Courtès2023-02-244-3/+336
| | | | | | | | | | | * module/language/tree-il/analyze.scm (<module-info>): New record type. (unused-module-analysis): New variable. (make-unused-module-analysis): New analysis. (make-analyzer): Add it. * module/system/base/message.scm (%warning-types): Add 'unused-module'. * test-suite/tests/tree-il.test (%opts-w-unused-module): New variable. ("warnings")["unused-module"]: New test prefix. * NEWS: Update.
* Add 'record-case' to '.dir-locals.el'.Ludovic Courtès2023-02-242-4/+1
| | | | | | * module/language/tree-il/fix-letrec.scm (fix-letrec): Remove "Local Variables" bit. * .dir-locals.el (scheme-mode): Add 'record-case'.
* Fix typo in raise-exception documentationDaniel Llorens2023-02-241-1/+1
| | | | | * doc/ref/api-control.texi (Raising and Handling Exceptions): Fix typo, h/t gtz on #guile.
* README: Update Git URLs.Ludovic Courtès2023-02-061-4/+4
| | | | * README: Update Git URLs.
* maint: Add variants of the default package for Guix.Ludovic Courtès2023-02-062-12/+56
| | | | | | | | | * build-aux/guix/guile-package.scm (package-with-configure-flags): New procedure. (guile-without-threads, guile-without-networking) (guile-debug, guile-strict-typing): New variables. * build-aux/manifest.scm: Use (guile-package) module instead of 'load'. (native-builds): Add the variants above + "guile-clang".
* maint: Masquerade as a Guix channel.Ludovic Courtès2023-02-065-145/+160
| | | | | | | | | | By pretending to be a Guix channel, this repository can be consumed seamlessly by tools such as Cuirass. * .guix-channel: New file. * guix.scm: Turn into a symlink to... * build-aux/guix/guile-package.scm: ... this. New file. * Makefile.am (EXTRA_DIST): Add them, except '.guix-channel'.
* maint: Add Guix build files.Ludovic Courtès2023-02-064-1/+216
| | | | | | * guix.scm, build-aux/manifest.scm: New files. * Makefile.am (EXTRA_DIST): Add them. * README: Mention it.
* 'spawn' ensures it is passed open file ports.Ludovic Courtès2023-01-262-5/+18
| | | | | | | | | 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.
* Document multiple-value returns in forms taking a let-expression bodyDaniel Llorens2023-01-252-32/+34
| | | | | | | | | | | | | * 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'.
* Add internal definitions to derived formsLinus2023-01-243-21/+22
| | | | | | | | | | | 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.
* Verify 'W_EXITCODE' only when we provide our own definition.v3.0.9Ludovic Courtès2023-01-231-1/+1
| | | | | | | | | | 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.
* maint: Abort 'make dist' when Readline support is missing.Ludovic Courtès2023-01-231-1/+14
| | | | | | | Reported by Greg Troxel <gdt@lexort.com>. * Makefile.am (ensure-guile-readline): New target. (dist-hook): Depend on it.
* Update NEWS.Ludovic Courtès2023-01-231-0/+2
|
* Remove 'extern' from 'scm_i_current_thread' definition, except on macOS.v3.0.9rc1Ludovic Courtès2023-01-201-2/+4
| | | | | | | | | | This is a followup to f859e0f58b211eedcb0dce4f2382cfebf37010d7, 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.
* build: Use '--enable-mini-gmp' for "make distcheck".Ludovic Courtès2023-01-201-2/+2
| | | | * Makefile.am (DISTCHECK_CONFIGURE_FLAGS): Add '--enable-mini-gmp'.
* GNU Guile 3.0.9.Ludovic Courtès2023-01-191-3/+3
| | | | | | | * 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.
* doc: Mention URL of Guile-GnuTLS.Ludovic Courtès2023-01-191-3/+5
| | | | * doc/ref/web.texi (Web Client): Mention new URL of Guile-GnuTLS.
* Add Gnulib 'sys_select' module, needed for MinGW.Ludovic Courtès2023-01-193-1/+5
| | | | | | | This is again from Gnulib v0.1-5703-g356a414e8c. * m4/gnulib-cache.m4: Add 'sys_select'. * libguile/threads.c: Include <sys/select.h>.
* Add Gnulib 'gethostname' module, needed for MinGW.Ludovic Courtès2023-01-195-0/+237
| | | | | | This is again from Gnulib v0.1-5703-g356a414e8c. * m4/gnulib-cache.m4: Add 'gethostname'.
* Add Gnulib modules for 'posix_spawn' file operations.Ludovic Courtès2023-01-197-0/+366
| | | | | | | | | 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'.
* Remove more Gnulib generated files.Ludovic Courtès2023-01-186-4329/+0
|
* Update Gnulib to v0.1-5703-g356a414e8c and add 'posix_spawn' module.Ludovic Courtès2023-01-18509-1732/+2766
| | | | | | | | | This is a followup to edfca3b7e5931b5b5a83112e2a9813b068be99c2, 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'.
* Adjust 'W_EXITCODE' for Windows.Ludovic Courtès2023-01-181-1/+5
| | | | * libguile/posix.c (W_EXITCODE) [_WIN32]: New specialized definition.
* Fix argument number in 'spawn' type check.Ludovic Courtès2023-01-181-1/+1
| | | | | * libguile/posix.c (scm_spawn_process): Fix argument number in 'SCM_VALIDATE_NONEMPTYLIST'.
* Update NEWS.Ludovic Courtès2023-01-171-3/+13
| | | | * NEWS: Update.
* linker: Do not store entire ELF in memory when writing to a file.Ludovic Courtès2023-01-173-14/+74
| | | | | | | | | | | | | | | | | | | | | 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.
* linker: Linker object writer takes a single argument.Ludovic Courtès2023-01-173-46/+35
| | | | | | | | | | | | | | * 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.
* linker, assembler: Avoid intermediate bytevectors.Ludovic Courtès2023-01-173-107/+176
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | 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.
* linker: Separate effectful part of 'add-elf-objects'.Ludovic Courtès2023-01-171-5/+15
| | | | | | | * module/system/vm/linker.scm (add-elf-objects)[write-and-reloc]: Split into... [compute-reloc, write-object-elf-header!]: ... this. Adjust accordingly.
* assembler: Separate effectful part of 'link-docstrs'.Ludovic Courtès2023-01-171-10/+13
| | | | | * module/system/vm/assembler.scm (link-docstrs): Define 'write-docstrings!' and use it.
* assembler: Separate effectful part of 'link-frame-maps'.Ludovic Courtès2023-01-171-19/+24
| | | | | * module/system/vm/assembler.scm (link-frame-maps)[make-frame-maps]: Define 'write!' and use it.
* assembler: Separate effectful part of 'link-procprops'.Ludovic Courtès2023-01-171-14/+26
| | | | | * module/system/vm/assembler.scm (link-procprops): Define 'write-procprops!' and use it.
* assembler: Separate effectful part of 'link-dynamic-section'.Ludovic Courtès2023-01-171-30/+45
| | | | | * module/system/vm/assembler.scm (link-dynamic-section): Define 'relocs' once for all. Define 'write!' and use it.
* assembler: Separate effectful part of 'link-symtab'.Ludovic Courtès2023-01-171-15/+22
| | | | | * module/system/vm/assembler.scm (link-symtab): Define 'names' and 'write-symbols!'. Use it.