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

21803 commits

Author SHA1 Message Date
Andy Wingo
5bdc663af9 Rewrite soft ports in Scheme
This also makes soft ports suspendable.

* am/bootstrap.am (SOURCES): Add (ice-9 soft-ports).
* libguile/init.c (scm_i_init_guile): No need to init vports.
* libguile/vports.c: Call out to (ice-9 soft-ports).
* libguile/vports.h: Remove internal scm_init_vports.
* module/ice-9/boot-9.scm (the-scm-module): Import (ice-9 soft-ports).
Really this enlarges the boot closure a bit, so we should probably
refactor.
* module/ice-9/soft-ports.scm: New file.
2023-06-08 09:03:10 +02:00
Andy Wingo
bf4e8f911e Use custom binary output ports for make-chunked-output-port
* module/web/http.scm (make-chunked-output-port): Use custom binary
output ports.
2023-06-08 09:03:10 +02:00
Andy Wingo
0e305e6bfd Rewrite custom binary ports in Scheme, in terms of custom ports
* libguile/r6rs-ports.c: Call out to Scheme instead of defining here.
* libguile/r6rs-ports.h: Put custom binary port decls together, to
deprecate later.
* module/ice-9/binary-ports.scm: Re-implement custom binary ports in
terms of custom ports.
2023-06-08 09:03:10 +02:00
Andy Wingo
1852fbfef9 Add "custom ports"
Custom ports are a kind of port that exposes the C port type interface
directly to Scheme.  In this way the full capability of C is available
to Scheme, and also the read and write functions can be tail-called from
Scheme (via port-read / port-write).

* libguile/custom-ports.c:
* libguile/custom-ports.h:
* module/ice-9/custom-ports.scm: New files.
* libguile/init.c:
* libguile/Makefile.am:
* am/bootstrap.am: Add to the build.
* doc/ref/api-io.texi: Update the manual.
2023-06-08 09:03:10 +02:00
Andy Wingo
67dbc60e8f bytevector-slice: optimize trivial case
* libguile/bytevectors.c (scm_bytevector_slice): Return the bytevector
directly if start==0 and count==len.
2023-06-08 09:01:59 +02:00
Andy Wingo
03344ce431 pretty-print: inline some handling of read macros
* module/ice-9/pretty-print.scm (generic-write): Not really sure why
read macros are duplicated, but this is a refactor to use more match and
less cadr.
2023-06-08 08:32:25 +02:00
Andy Wingo
ec3bf4e2ba pretty-print: inline genwrite:newline-str
* module/ice-9/pretty-print.scm (genwrite:newline-str): Remove.
(generic-write): Just use "\n".
2023-06-08 08:32:25 +02:00
Andy Wingo
f74565defd pretty-print: Use string-concatenate-reverse
* module/ice-9/pretty-print.scm (generic-write): Use
string-concatenate-reverse instead of locally-defined
reverse-string-append.
(reverse-string-append): Remove.
2023-06-08 08:32:25 +02:00
Ludovic Courtès
cd57379b3d
guix: Add missing module import.
* .guix/modules/guile-package.scm: Add missing module import.
2023-06-05 11:19:43 +02:00
Ludovic Courtès
fc8c63acae
Remove recursive Makefile for 'am'.
* Makefile.am (SUBDIRS): Remove 'am'.
(EXTRA_DIST): Add files from am/.
* am/Makefile.am: Remove.
* configure.ac: Don't emit 'am/Makefile'.
2023-06-05 10:33:26 +02:00
Ludovic Courtès
b14ce93fa9
Remove recursive Makefile for 'gc-benchmarks'.
* gc-benchmarks/Makefile.am: Rename to...
* gc-benchmarks/local.mk: ... this.  Prefix file names with %D%.
(benchmarks): Rename to...
(gc_benchmarks): ... this.
* Makefile.am: Include it.
* configure.ac: Don't output 'gc-benchmarks/Makefile'.
2023-06-05 10:26:07 +02:00
Ludovic Courtès
a6ec043f7a
Remove 'emacs/Makefile.am'.
This is a followup to 178e9d237b.

* emacs/Makefile.am: Delete.
* configure.ac: Don't output 'emacs/Makefile'.
* Makefile.am (SUBDIRS): Remove 'emacs'.
2023-06-05 10:18:13 +02:00
Ludovic Courtès
2b73fe8169
maint: Move Guix files to '.guix'.
* build-aux/guix: Rename to...
* .guix/modules: ... this.
* .guix-channel: Adjust accordingly.
* guix.scm: Likewise.
* build-aux/manifest.scm: Rename to...
* .guix/manifest.scm: ... this.
* Makefile.am (EXTRA_DIST): Adjust accordingly.
2023-06-05 09:19:59 +02:00
Ludovic Courtès
7847683d05
maint: Avoid 'specification->package' when referring to packages.
This avoids ambiguity when using channels in addition to 'guix'.

* build-aux/guix/guile-package.scm (guile): Refer to packages by their
bindings rather than using 'specification->package'.
2023-06-05 09:10:05 +02:00
Josselin Poiret
36fd2b4920
Use /dev/null in 'piped-process' if port is not backed by a fdes.
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>
2023-05-08 16:06:28 +02:00
Josselin Poiret
ccd7400fdb
Add error handling for spawn's posix_spawn_file_actions_adddup2.
* libguile/posix.c (do_spawn): Add error handling if
posix_spawn_file_actions_adddup2 fails.

Signed-off-by: Ludovic Courtès <ludo@gnu.org>
2023-05-08 15:58:57 +02:00
Andy Wingo
6efc0b8159 call-with-values builtin doesn't leave garbage on the stack
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.
2023-05-07 09:50:14 +02:00
Daniel Llorens
fe6cc6d04a Use SCM_GSUBR_MAX in place of the hardcoded number
* libguile/gsubr.c (scm_apply_subr): Reference the limit.
  (get_subr_stub_code): As stated.
* libguile/jit.c (compile_subr_call): As stated.
2023-04-27 14:07:01 +02:00
Jorge Gomez
1ae50a7f80 Fix typo in append procedure documentation
Fixes <https://bugs.gnu.org/62456>.

Signed-off-by: Mikael Djurfeldt <mikael@djurfeldt.com>
2023-04-05 20:30:11 +02:00
Mikael Djurfeldt
e9c8ca341b Add missing backslash. 2023-04-04 13:33:57 +02:00
Ludovic Courtès
e93525e549
Adjust 'spawn' tests to accept 'LD_ORIGIN_PATH' on GNU/Hurd.
Fixes <https://bugs.gnu.org/62501>.

* test-suite/tests/posix.test ("spawn")["env with #:environment
and #:output"]: Add workaround for GNU/Hurd.
* NEWS: Update.
2023-04-02 15:39:57 +02:00
Ludovic Courtès
9cc85a4f52
Use 'posix_spawn_file_actions_addclosefrom_np' where available.
* 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'.
2023-04-02 15:36:33 +02:00
Ludovic Courtès
7d7067fe15
Remove racy optimized file descriptor closing loop in 'spawn'.
This reverts 9332b63240, 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.
2023-04-02 15:36:33 +02:00
Ludovic Courtès
21ad54b694
'spawn' closes only open file descriptors on non-GNU/Linux systems.
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.
2023-04-02 15:36:25 +02:00
Ludovic Courtès
e334e59589
Update NEWS. 2023-03-20 23:25:01 +01:00
Christopher Baines
cba2e7e3fe
Fix some invalid unicode handling issues with suspendable ports.
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>
2023-03-20 23:23:29 +01:00
Rob Browning
ffb95239aa scm_i_utf8_string_hash: compute u8 chars not bytes
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.
2023-03-18 13:24:43 -05:00
Daniel Llorens
f0df1ed0fd Fix no-clause case-lambda in peval
This is checked by optargs.test, which 3b47f87618
broke.

* module/language/tree-il/peval.scm (peval): Account for no clause (= no body)
  case-lambda.
2023-03-17 21:17:10 +01:00
Andy Wingo
e270290242 Allow large object space to be part of remembered set 2023-03-15 09:34:12 +01:00
Andy Wingo
d0b8f6838d Rework fast/slow path alloc API
This lets users do gc_allocate_fast() and know that if they got a
non-NULL result, we could allocate without GC, and so no object was
moved.
2023-03-14 14:35:20 +01:00
Andy Wingo
62f4b045f8 BDW supports growable heap 2023-02-28 22:02:49 +01:00
Andy Wingo
51168fd96e ephemerons benchmark takes gc options 2023-02-28 11:30:51 +01:00
Andy Wingo
f657cd3847 quads benchmark takes gc-options param 2023-02-28 11:24:33 +01:00
Andy Wingo
157037dd1f Fix parallelism in quads benchmark 2023-02-28 11:20:50 +01:00
Andy Wingo
9576558a34 Rework mtbench to take GC options string instead of parallelism 2023-02-28 11:19:42 +01:00
Andy Wingo
f15eb3bd10 Add enum heap policy parsing 2023-02-28 11:19:42 +01:00
Andy Wingo
898f7aa935 Implement resizing of semi-space heap
Not yet hooked up to any demo, though.
2023-02-28 11:19:39 +01:00
Andy Wingo
c42c538aaa gc_init takes const gc_options 2023-02-28 09:40:28 +01:00
Andy Wingo
8edfd42ca1 Rework semi-space collector to separate regions
This is a preparation for heap growth and shrinking.
2023-02-28 09:40:28 +01:00
Andy Wingo
f0ad02d6ee Fix parsing options from string, doh 2023-02-28 09:40:28 +01:00
Daniel Llorens
3b47f87618 peval reduces some inlined case-lambda calls
* 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.
2023-02-27 11:53:48 +01:00
Ludovic Courtès
e2ed33ef04
Remove unnecessary module imports.
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.
2023-02-24 16:49:00 +01:00
Ludovic Courtès
89c3bae3cf
Add -Wunused-module.
* 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.
2023-02-24 16:49:00 +01:00
Ludovic Courtès
821e0f9cd5
Add 'record-case' to '.dir-locals.el'.
* module/language/tree-il/fix-letrec.scm (fix-letrec): Remove "Local
Variables" bit.
* .dir-locals.el (scheme-mode): Add 'record-case'.
2023-02-24 16:49:00 +01:00
Daniel Llorens
52465f0ce7 Fix typo in raise-exception documentation
* doc/ref/api-control.texi (Raising and Handling Exceptions): Fix typo,
  h/t gtz on #guile.
2023-02-24 16:05:18 +01:00
Andy Wingo
4cb26e0144 Rework options interface
Users will want to set options from an environment variable or something
like that.  Particular GC implementations will want to expose an
expanded set of options.  For these reasons we make the options
interface a bit more generalized and include parsing.
2023-02-15 20:07:14 +01:00
Ludovic Courtès
9d339ea1a9
README: Update Git URLs.
* README: Update Git URLs.
2023-02-06 16:51:02 +01:00
Ludovic Courtès
32f33756d0
maint: Add variants of the default package for Guix.
* 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".
2023-02-06 16:51:02 +01:00
Ludovic Courtès
a211c8aaff
maint: Masquerade as a Guix channel.
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'.
2023-02-06 16:51:02 +01:00
Ludovic Courtès
c617f4e04f
maint: Add Guix build files.
* guix.scm, build-aux/manifest.scm: New files.
* Makefile.am (EXTRA_DIST): Add them.
* README: Mention it.
2023-02-06 16:51:00 +01:00