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

21772 commits

Author SHA1 Message Date
Andy Wingo
0922cbebb9 Include nfree in closure-ref, closure-set primcall params
* module/language/cps/closure-conversion.scm (convert-one): Add nfree to
the param.  This will help the wasm target.
* module/language/cps/effects-analysis.scm (closure-ref, closure-set!):
* module/language/cps/lower-primcalls.scm (closure-ref,closure-set!):
Adapt.
2023-08-17 14:16:12 +02:00
Andy Wingo
78948ae594 Add wasm32 and wasm64 CPU types
* module/system/base/target.scm (cpu-endianness): wasm targets are
little-endian.
2023-08-17 14:16:12 +02:00
Andy Wingo
941c757ab7 Introduce target-runtime parameter for backend-specific CPS lowering
* module/system/base/target.scm (target-runtime): New export.
* module/language/cps/optimize.scm (make-cps-lowerer): Load a
backend-specific lowering module dynamically.

* module/language/cps/guile-vm.scm: New module for lowering to Guile's
VM.
* module/language/cps/guile-vm/loop-instrumentation.scm:
* module/language/cps/guile-vm/lower-primcalls.scm:
* module/language/cps/guile-vm/reify-primitives.scm: Move here, from
parent dir.

* am/bootstrap.am: Update for new file list.
2023-08-17 14:16:12 +02:00
Andy Wingo
db36c48efd Update extern space API to allow for evacuation 2023-08-16 11:08:12 +02:00
Andy Wingo
fbe49598f5 Add "extern space"
This is mostly for static data.
2023-08-15 11:38:11 +02:00
Andy Wingo
da5a4633df embed.mk: silent by default, bis 2023-08-12 10:26:12 +02:00
Andy Wingo
3f92f36947 embed.mk: silent by default 2023-08-12 10:23:29 +02:00
Andy Wingo
a3019c961a embed.mk fix 2023-08-11 23:17:59 +02:00
Andy Wingo
9c1a7649b4 Update embed.mk 2023-08-10 21:49:55 +02:00
Andy Wingo
e4191f44c6 First stab at an embedder's makefile snippet 2023-08-09 22:16:03 +02:00
Andy Wingo
19f66fab08 Bin in bin, obj in obj; prettify makefile 2023-08-09 21:42:57 +02:00
Andy Wingo
8f93e23a5f DRY for whippet variant cflags 2023-08-09 21:24:41 +02:00
Andy Wingo
f9330f789c Attempt to do more DRY with whippet variants 2023-08-08 14:56:30 +02:00
Andy Wingo
5fdfd1175e Use foreach and eval to generate benchmark x collector rules 2023-08-08 14:39:31 +02:00
Andy Wingo
498d0537f3 Simplify makefile 2023-08-07 11:02:57 +02:00
Andy Wingo
1c76cdcf07 Put deps in subdir 2023-08-07 10:55:30 +02:00
Andy Wingo
07d7df1952 Update benchmark target names 2023-08-07 09:28:45 +02:00
Andy Wingo
2e8a0b3874 Add automatic dependency tracking 2023-08-06 22:20:53 +02:00
Andy Wingo
e6de2fd633 Reorganize source tree and document 2023-08-06 12:04:33 +02:00
Andy Wingo
5fbd21a7c3 Add USER-GUIDE.md 2023-08-06 10:43:42 +02:00
Michael Gran
0e9ccaf47c In test-extensions test, must export library fuctions when built as DLL
The test-extensions standalone test creates a library to be loaded with
load-extension.  When such libraries are DLLs, the public functions
must be marked with the dllexport function attribute.

* test-suite/standalone/test-extensions-lib.c (API): new define
  Mark public functions with define.
2023-07-17 21:05:07 -07:00
Michael Gran
dc3a3a84f9 Modify SCM_API for DLLs
In https://gcc.gnu.org/wiki/Visibility, they recommend _WIN32 and
__CYGWIN__ as the test defines for dllexport.

Also, logic is incorrect since HAVE_VISIBILITY can be defined but zero.

* libguile/scm.h (SCM_API): modify #ifdef logic
2023-07-17 18:30:26 -07:00
Michael Gran
df225a87b9 Test for clearenv function
clearenv() may not be provided by non-glibc systems.  As a fallback,
just set environ to NULL.

* libguile/posix.c (scm_environ)[!HAVE_CLEARENV]: add fallback logic
    for clearenv()
2023-07-17 18:30:18 -07:00
Michael Gran
b9a40cdc18 Avoid inline assembly in VM when using Clang
Clang uses a different format for inline assembly.  Also, as noted
in the comment, this register usage is likely moot.

* libguile/vm-engine.c (JT_REG)[__GNUC__ && !__clang __]: define to empty
2023-07-17 18:30:12 -07:00
Michael Gran
58723e026a Check return value of nice
'nice' is marked as 'warn_unused_result' on some versions
of Ubuntu which causes make distcheck to fail.
This implements the error checking logic exactly as POSIX suggests
to silence the warning.

* libguile/posix.c (scm_nice): new error checking logic.
2023-07-17 10:53:28 -07:00
Bruno Victal
a0805cc274
Revert "Mention package GNU Autopoint in README."
GNU Autopoint is a part of GNU gettext.

This reverts commit 3badbb71c6.

Signed-off-by: Ludovic Courtès <ludo@gnu.org>
2023-07-16 22:34:58 +02:00
Bruno Victal
99e644dbc7
doc: Use archived URL from Internet Archive for syntax-rules primer.
* doc/ref/api-macros.texi (Syntax Rules): Use archived URL from
Internet Archive for syntax-rules primer.

Signed-off-by: Ludovic Courtès <ludo@gnu.org>
2023-07-16 22:34:01 +02:00
Ludovic Courtès
d5659b7869
r7rs: 'read-u8' now defaults to 'current-input-port'.
Fixes <https://bugs.gnu.org/62690>.
Reported by Rui Zhang <zrui16@hotmail.com>.

* module/scheme/base.scm (read-u8): Change default value of 'port'.
2023-07-16 22:31:19 +02:00
Timothy Sample
dcccaddf7b
Avoid module resolution in 'call-with-new-thread'.
Fixes <https://bugs.gnu.org/62691>.
Reported by Михаил Бахтерев <mike.bakhterev@gmail.com>.

* module/ice-9/threads.scm (call-with-new-thread): Do not use 'set!'
to set object properties while the calling thread is waiting on the
new thread to initialize.

Signed-off-by: Ludovic Courtès <ludo@gnu.org>
2023-07-16 22:26:51 +02:00
Olivier Dion
84bf840322
Fix dangling pointers in `environ'.
When calling `environ', Guile set the global variable `environ' to a
list allocated with the GC.  Strings in it are also allocated with the
GC.

However, if an user call the Scheme setenv() procedure, the resulting
call to putenv() in libc might reallocate `environ' to a new pointer
while copying sub-pointers owned by Guile in it.

This results in the GC marking these strings for reclamation when they
are actually still present in `environ'.  Thus, the values in the
environment are now undefined.

To fix this, Guile should only manipulate the `environ' using the
standard libc functions.  This ensures that concurrent modification of
it is safe in multi-threaded program.  Therefore, the procedure
`environ' now call the libc clearenv() procedure to purge the
environment.  Then, the desired values are put in `environ' using
scm_putenv().  At the end, no GC allocated memory is put in `environ'.

Also, since `environ' can be changed at anytime in a multi-thread
program, emit a warning stipulating that the result is undefined
behavior if multiple threads are created in the program.  Consider for
example a thread iterating over `environ' while another one do a call to
putenv().  The latter would do a realloc() on `environ' and thus the old
array read by the former now contains garbage.

On system where clearenv() is not present, an atomic store of NULL with
sequential consistency to `environ' should be sufficient but see the
NOTES of clearenv(3).

* libguile/posix.c (scm_environ): Do not store GC allocated memory in
environ.

Signed-off-by: Ludovic Courtès <ludo@gnu.org>
2023-07-16 22:16:30 +02:00
Morgan Smith
c7d170c5d1
Fix typos throughout codebase.
* NEWS:
* README:
* doc/r5rs/r5rs.texi:
* doc/ref/api-data.texi:
* doc/ref/api-debug.texi:
* doc/ref/api-evaluation.texi:
* doc/ref/api-io.texi:
* doc/ref/api-macros.texi:
* doc/ref/api-procedures.texi:
* doc/ref/api-scheduling.texi:
* doc/ref/api-undocumented.texi:
* doc/ref/libguile-concepts.texi:
* doc/ref/posix.texi:
* doc/ref/srfi-modules.texi:
* doc/ref/vm.texi:
* doc/ref/web.texi:
* examples/box-dynamic-module/box.c:
* examples/box-dynamic/box.c:
* examples/box-module/box.c:
* examples/box/box.c:
* examples/safe/safe:
* examples/scripts/README:
* examples/scripts/hello:
* gc-benchmarks/larceny/twobit-input-long.sch:
* gc-benchmarks/larceny/twobit-smaller.sch:
* gc-benchmarks/larceny/twobit.sch:
* libguile/expand.c:
* libguile/load.c:
* libguile/net_db.c:
* libguile/scmsigs.c:
* libguile/srfi-14.c:
* libguile/threads.c:
* meta/guile.m4:
* module/ice-9/match.upstream.scm:
* module/ice-9/ports.scm:
* module/language/cps/graphs.scm:
* module/scripts/doc-snarf.scm:
* module/srfi/srfi-19.scm:
* module/system/repl/command.scm:
* test-suite/tests/srfi-18.test:
Fix typos.

Signed-off-by: Ludovic Courtès <ludo@gnu.org>
2023-07-16 22:09:01 +02:00
Ludovic Courtès
99e727adde
Remove recursive Makefile for 'benchmark-suite'.
* benchmark-suite/Makefile.am: Rename to...
* benchmark-suite/local.mk: ... this.  Prefix file names with %D%.
(EXTRA_DIST): Use '+=' and add 'README'.
* Makefile.am: Include it.
* configure.ac: Don't output 'benchmark-suite/Makefile'.
2023-07-16 22:02:30 +02:00
Ludovic Courtès
aa44ad3fb8
tests: Skip web server tests when thread support is missing.
* test-suite/tests/web-server.test ("server is listening"): Throw to
'unresolved when not (provided? 'threads).
2023-07-16 21:47:44 +02:00
Ludovic Courtès
85520354a8
Fix possible deadlock in 'scm_sigaction_for_thread'.
Fixes <https://bugs.gnu.org/64666>.

* libguile/scmsigs.c (scm_sigaction_for_thread): Swap the
'scm_dynwind_block_asyncs' and 'scm_i_dynwind_pthread_mutex_lock'
calls.
* NEWS: Update.
2023-07-16 21:35:47 +02:00
Andy Wingo
896960dade Add representations for new primcalls
* module/language/cps/utils.scm (compute-var-representations): Add
representations for vector-length and so on.
2023-06-22 16:19:15 +02:00
Andy Wingo
85f85a0fc0 Tree-IL-to-CPS lowers to high-level object reprs: vectors
* module/language/tree-il/compile-cps.scm: Lower to allocate-vector,
vector-ref/immediate, and so on.
2023-06-22 16:01:44 +02:00
Andy Wingo
069ed42f50 Tree-IL-to-CPS lowers to high-level object reprs: strings
* module/language/tree-il/compile-cps.scm: Lower to string-length,
string-ref, et al.
2023-06-22 16:01:44 +02:00
Andy Wingo
d0677a362d Tree-IL-to-CPS lowers to high-level object reprs: bytevectors
* module/language/tree-il/compile-cps.scm: Lower to bv-length,
bv-contents.
2023-06-22 16:01:44 +02:00
Andy Wingo
e6bd13ea1e Tree-IL-to-CPS lowers to high-level object reprs: structs
* module/language/tree-il/compile-cps.scm: Lower to allocate-struct,
struct-ref, and so on.
2023-06-22 16:01:44 +02:00
Andy Wingo
4fb4bebe41 Tree-IL-to-CPS lowers to high-level object reprs: pairs
* module/language/tree-il/compile-cps.scm: Lower to cons, car, set-car!,
etc.
2023-06-22 16:01:44 +02:00
Andy Wingo
5c5af6bc78 Tree-IL-to-CPS lowers to high-level object reprs: atomic boxes
* module/language/tree-il/compile-cps.scm: Lower to make-atomic-box,
atomic-box-ref, and so on.
2023-06-22 16:01:44 +02:00
Andy Wingo
2b88333426 Tree-IL-to-CPS lowers to high-level object representations: boxes
* module/language/tree-il/compile-cps.scm: Lower to box, box-ref, and
box-set!.
2023-06-22 16:01:44 +02:00
Andy Wingo
e4f9b203f7 Closure conversion produces high-level object representations
* module/language/cps/closure-conversion.scm (convert-one): Build
closures with make-closure, cons, and so on; leave lowering to scm-ref
to the backend.
2023-06-22 16:01:44 +02:00
Andy Wingo
a80a5ade78 Contification uses 'cons primcall
* module/language/cps/contification.scm (apply-contification): Reify
'cons instead of using the lower-level scm-set! etc.
2023-06-22 16:01:44 +02:00
Andy Wingo
26b43f35c5 DCE ignores setters to dead objects
* module/language/cps/dce.scm (compute-live-code): Add the new
higher-level object mutators.
2023-06-22 16:01:44 +02:00
Andy Wingo
125cb9fa6d Remove useless code in CSE
* module/language/cps/cse.scm (eliminate-common-subexpressions-in-fun):
Defs must be a list.
2023-06-22 16:01:44 +02:00
Andy Wingo
2534326e5e Add CSE auxiliary definitions for cons, set-car! etc
* module/language/cps/cse.scm (eliminate-common-subexpressions-in-fun):
Add cons, set-car!, etc.
2023-06-22 16:01:44 +02:00
Andy Wingo
e7e625b773 Fix effects analysis bug for synthesized definitions at allocations
* module/language/cps/effects-analysis.scm (compute-known-allocations):
For a primcall that allocates, sometimes we will synthesize auxiliary
definitions as part of CSE, for example to indicate that if (cons x y)
is bound to z, that a later call to (car z) should give x unless there
might be an intervening set-car!.  We had a bug in which aux definitions
attached to allocations were being incorrectly associated with the first
operand.  Probably this is a bug in other contexts but it really starts
to hit with the high-level constructors, e.g. `box`.
2023-06-22 16:01:44 +02:00
Andy Wingo
98178ac308 Add effects analysis for new high-level object accessors
* module/language/cps/effects-analysis.scm: Add car, box-ref, etc to
effects analysis.
2023-06-22 16:01:44 +02:00
Andy Wingo
a35cae5697 Add support for higher-level object representations in type analysis
* module/language/cps/types.scm: Add inferrers for vector-ref, car,
etc.
2023-06-22 16:01:44 +02:00