Age | Commit message (Collapse) | Author | Files | Lines |
|
* module/ice-9/pretty-print.scm (pretty-print): We were defaulting to
the current output port.
|
|
* module/language/cps/utils.scm (primcall-raw-representations): Add
sadd, ssub, etc; these are lowered to uadd, usub, etc later for the
guile-vm target, but it is still useful to record their reprs for
pre-lowering analysis.
|
|
* module/language/tree-il/primitives.scm (*interesting-primitive-names*):
(*primitive-constructors*):
(*effect+exception-free-primitives*): Add make-variable.
* module/language/tree-il/cps-primitives.scm (make-variable): Lower as
`box' primitive.
|
|
Recognize `raise-exception` in the same way we recognize `throw`, though
it is a bit less optimized and the boot story is not as complicated.
* doc/ref/vm.texi (Non-Local Control Flow Instructions):
* libguile/jit.c (compile_unreachable):
(compile_unreachable_slow):
* libguile/vm-engine.c (VM_NAME):
* module/language/cps/compile-bytecode.scm (compile-function):
* module/system/vm/assembler.scm (emit-unreachable): Add new
"unreachable" instruction, inserted after a call to non-continuable
`raise-exception`.
* module/language/tree-il/compile-cps.scm (raise-exception):
* module/language/tree-il/primitives.scm
(*interesting-primitive-names*): Recognize raise-exception, and if it is
called with just one argument, prune that branch of the control-flow
graph.
|
|
H/t cow_2001 on #guile.
* libguile/socket.c: As stated.
|
|
* module/ice-9/pretty-print.scm (pretty-print): We were never indenting
more than 8 spaces. Doh!
* test-suite/tests/print.test (prints?, "pretty-print"): Add test.
|
|
* module/ice-9/boot-9.scm (define-inlinable):
* module/srfi/srfi-9.scm (define-tagged-inlinable): Add maybe-unused
declaration. Also require at least one body expr, otherwise the
metadata declaration could escape as the proc body.
|
|
* module/language/tree-il/analyze.scm (<reference-graph>): Oh my
goodness, constructor args were reversed relative to field order.
Constructor use was consistent but it was terribly confusing; fixed and
updated uses.
(unused-toplevel-analysis): Add ability for functions to mark themselves
as "maybe-unused"; such functions won't cause unused toplevel warnings.
* module/language/tree-il/compile-bytecode.scm (sanitize-meta):
(compile-closure):
* module/language/tree-il/compile-cps.scm (sanitize-meta): Prevent
maybe-unused from being needlessly written out to the binary.
|
|
* module/language/tree-il/compile-cps.scm
(define-custom-primcall-converter): New exported macro, handling
primcalls that need special logic. Fold "throw" and "values" into this
macro. The goal is to allow the Hoot compiler to specially convert an
"inline assembly" primcall.
|
|
* doc/r5rs/r5rs.texi: Revert c7d170c5d1e90de64962d4cf3cb257364f77b08f,
as R5RS is a historical document, and our packaging of it is something
that other people rely on. See also
7fb9c4aff29daab35d0726bac58f8fbd6bd2e26c when I was also bitten by this
error!
|
|
* module/language/cps/utils.scm (primcall-raw-representations): Add
fadd/immediate, fmul/immediate as f64.
|
|
* module/language/cps/utils.scm (primcall-raw-representations): New
function.
(compute-var-representations): Use #:primcall-raw-representations
keyword arg, which defaults to primcall-raw-representations.
|
|
* module/language/cps/utils.scm (compute-var-representations): $code
makes a 'code. bv-contents makes a 'bv-contents.
* module/language/cps/slot-allocation.scm:
* module/language/cps/hoot/tailify.scm:
* module/system/vm/assembler.scm: Adapt.
|
|
* module/language/cps.scm ($calli): New expression type which calls a
function entry as originally captured via $code. Adapt all callers.
|
|
* module/language/cps/utils.scm (compute-defs-and-uses): Add $prim.
Wasn't needed before because this function was only ever called after
reify-primitives.
|
|
* 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.
|
|
* module/system/base/target.scm (cpu-endianness): wasm targets are
little-endian.
|
|
* 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.
|
|
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.
|
|
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
|
|
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()
|
|
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
|
|
'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.
|
|
GNU Autopoint is a part of GNU gettext.
This reverts commit 3badbb71c6d29ea94e500309b8d6b80e61d0c460.
Signed-off-by: Ludovic Courtès <ludo@gnu.org>
|
|
* 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>
|
|
Fixes <https://bugs.gnu.org/62690>.
Reported by Rui Zhang <zrui16@hotmail.com>.
* module/scheme/base.scm (read-u8): Change default value of 'port'.
|
|
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>
|
|
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>
|
|
* 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>
|
|
* 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'.
|
|
* test-suite/tests/web-server.test ("server is listening"): Throw to
'unresolved when not (provided? 'threads).
|
|
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.
|
|
* module/language/cps/utils.scm (compute-var-representations): Add
representations for vector-length and so on.
|
|
* module/language/tree-il/compile-cps.scm: Lower to allocate-vector,
vector-ref/immediate, and so on.
|
|
* module/language/tree-il/compile-cps.scm: Lower to string-length,
string-ref, et al.
|
|
* module/language/tree-il/compile-cps.scm: Lower to bv-length,
bv-contents.
|
|
* module/language/tree-il/compile-cps.scm: Lower to allocate-struct,
struct-ref, and so on.
|
|
* module/language/tree-il/compile-cps.scm: Lower to cons, car, set-car!,
etc.
|
|
* module/language/tree-il/compile-cps.scm: Lower to make-atomic-box,
atomic-box-ref, and so on.
|
|
* module/language/tree-il/compile-cps.scm: Lower to box, box-ref, and
box-set!.
|
|
* 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.
|
|
* module/language/cps/contification.scm (apply-contification): Reify
'cons instead of using the lower-level scm-set! etc.
|
|
* module/language/cps/dce.scm (compute-live-code): Add the new
higher-level object mutators.
|
|
* module/language/cps/cse.scm (eliminate-common-subexpressions-in-fun):
Defs must be a list.
|
|
* module/language/cps/cse.scm (eliminate-common-subexpressions-in-fun):
Add cons, set-car!, etc.
|
|
* 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`.
|
|
* module/language/cps/effects-analysis.scm: Add car, box-ref, etc to
effects analysis.
|
|
* module/language/cps/types.scm: Add inferrers for vector-ref, car,
etc.
|
|
* module/language/cps/lower-primcalls.scm (f64->scm): Move here...
* module/language/cps/reify-primitives.scm (reify-primitives): from
here. Seems a more fitting place.
|
|
* module/language/cps/optimize.scm (lower-cps/generic): Rename from
lower-cps; these are the lowerings that apply to everyone.
(select-opts-for-optimization-level): Factor out of make-cps-lowerer.
(make-backend-cps-lowerer): New procedure. For the Guile VM backend, we
have a few mandatory passes, including the new lower-primitives.
(make-cps-lowerer): Apply backend-specific lowering pass.
|