summaryrefslogtreecommitdiff
Commit message (Collapse)AuthorAgeFilesLines
* Update tailification pass to handle return-types optimizationwip-tailifyAndy Wingo2023-05-151-95/+149
| | | | | | | | | | | | | | | | | | | The return-types optimization can produce $callk that continues to $kargs, not $kreceive, indicating that the number of returned values is known. Therefore knowing that a cont is $kargs isn't enough to know what kind it is: it could be a join or it could be a return continuation. Therefore update to determine continuation type based on predecessors. Once we have the tails (and know which ones are joins), extend tailify-tails for known-arity returns. * module/language/cps/tailify.scm (tailify-tail): Update to detect tail end via predecessor, and to transform appropriately. (tailify-tails): Remove the variables bound by the head (if any: can only apply to join conts and known-arity returns) from the saved set. Handle $kargs differently depending on whether it is a join cont or a return cont. (compute-tails): Identify which heads are joins. (tailify-function): Pass join-cont set through to tailify-tails.
* Fix bug verifying $calli instructionsAndy Wingo2023-05-151-2/+4
| | | | | * module/language/cps/verify.scm (check-valid-var-uses): Return the first-order set.
* Tailify issues `restore` instead of `restore1`Andy Wingo2023-05-152-3/+3
| | | | Unify handling of stack-allocated continuations
* Consider $code to make 'ptr representationAndy Wingo2023-05-121-1/+1
| | | | | | * module/language/cps/utils.scm (compute-var-representations): For the wasm target, these values are (ref $kvarargs), not i64. Will need to distinguish from bytevector pointers at some point, though.
* Fix bug in compilation of rsh/lshAndy Wingo2023-05-121-2/+2
| | | | | | * module/language/cps/compile-bytecode.scm (compile-function): The rsh/lsh patterns would never match. I think these would end up dispatching through emit-text though.
* Remove pk verbosity in tailify.scmAndy Wingo2023-04-061-32/+29
|
* Fix arg representations for 'restore and 'restore1 primcallsAndy Wingo2023-03-291-1/+7
|
* Use tree-il-srcv instead of tree-il-srcAndy Wingo2023-03-288-29/+32
| | | | This prevents eager conversion to alists.
* Excise use of `record-case`Andy Wingo2023-03-283-119/+108
| | | | | This macro expands to field accessors, which in the case of tree-il-src will force an eager conversion of the source info to alists.
* Add tailify passAndy Wingo2023-02-102-1/+674
| | | | | * am/bootstrap.am (SOURCES): Add tailify.scm * module/language/cps/tailify.scm: New file.
* Add new $calli expression type.Andy Wingo2023-02-1021-19/+103
| | | | | * module/language/cps.scm ($calli): New expression type, calls a label as a value. Adapt all callers.
* Add indirect-tail-call VM instructionAndy Wingo2023-02-104-4/+51
| | | | | | | | | * libguile/vm-engine.c (indirect_tail_call): New instruction. * libguile/jit.c (compile_indirect_tail_call): (compile_indirect_tail_call_slow): Add JIT support. * module/system/vm/assembler.scm (system): * module/system/vm/disassembler.scm (instruction-has-fallthrough?): (stack-effect-parsers): Add assembler support.
* Fix peval bug when expand-primitives introduces lexicalsAndy Wingo2022-12-012-3/+47
| | | | | | | | * 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.
* Fix order-of-side-effects bug in (eq? x y z) expansionAndy Wingo2022-12-012-12/+45
| | | | | | | | | * 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.
* Avoid 'frame-local-ref' errors when printing backtrace.Andrew Whatson2022-11-291-2/+10
| | | | | | | 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'.
* Add tests for warning locations.Andrew Whatson2022-11-291-1/+47
| | | | | | | | 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.
* Fix possible deadlock in 'lock-mutex'.Olivier Dion2022-11-201-9/+10
| | | | | | | | | | | | | | | 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>
* Work around unwanted stack retention when using prompts.Ludovic Courtès2022-11-201-5/+12
| | | | | | | | | | 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.
* doc: Fix typo in VM instruction name.Ludovic Courtès2022-11-011-2/+2
| | | | | * doc/ref/vm.texi (Intrinsic Call Instructions): Fix name of 'call-scm<-thread'.
* disassembler: Show intrinsic name for 'call-' instructions.Ludovic Courtès2022-11-012-1/+51
| | | | | | | * module/system/vm/disassembler.scm (code-annotation)[intrinsic-name]: New procedure. Add clauses for intrinsics. * NEWS: Update.
* Update NEWS.Maxime Devos2022-10-211-0/+12
| | | | Signed-off-by: Ludovic Courtès <ludo@gnu.org>
* Define Scheme bindings to ‘openat’ when available.Maxime Devos2022-10-216-22/+168
| | | | | | | | | | | | | | | | * configure.ac: Detect if ‘openat’ is defined. * libguile/filesys.c (flags_to_mode): Extract from ... (scm_mode): ... here. (scm_open_fdes_at, scm_openat): Define the Scheme bindings. * libguile/filesys.h (scm_open_fdes_at, scm_openat): Make them part of the API. * doc/ref/posix.texi (File System): Document them. * test-suite/tests/filesys.test ("openat"): Test ‘openat’. * libguile/syscalls.h (openat_or_openat64): Decide between ‘openat’ and ‘openat64’. Signed-off-by: Ludovic Courtès <ludo@gnu.org>
* Define a Scheme binding to ‘fstatat’ when available.Maxime Devos2022-10-216-2/+131
| | | | | | | | | | | * configure.ac: Detect if ‘fstatat’ is defined. * libguile/filesys.c (scm_statat): Define a Scheme binding to ‘fstatat’. * libguile/filesys.h (scm_statat): Make it part of the C API. * doc/ref/posix.texi (File System): Document it. * libguile/syscalls.h (fstatat_or_fstatat64): Choose between ‘fstatat’ and ‘fstatat64’. Signed-off-by: Ludovic Courtès <ludo@gnu.org>
* Define a Scheme binding to ‘fchownat’ when it exists.Maxime Devos2022-10-214-2/+49
| | | | | | | | | | * configure.ac: Detect whether ‘fchownat’ is available. * libguile/filesys.c (scm_chownat): Define a Scheme binding to ‘fchownat’ when available. * libguile/filesys.h (scm_chownat): Make it part of the API. * doc/ref/posix.texi (File System): Document it. Signed-off-by: Ludovic Courtès <ludo@gnu.org>
* Define a Scheme binding to ‘unlinkat’ when it exists.Maxime Devos2022-10-215-2/+107
| | | | | | | | | | | | | | | | ‘unlinkat’ is used for both unlinking regular files and removing empty directories. * configure.ac: Detect if ‘unlinkat’ exists. * doc/ref/posix.texi (File System): Document why there is no ‘rmdirat’ procedure, and document the ‘delete-file-at’ procedure. * libguile/filesys.c (scm_rmdir): Adjust the docstring here as well. (scm_delete_file_at): Define a Scheme binding to ‘unlinkat’. * libguile/filesys.h (scm_delete_file_at): Make ‘scm_delete_file_at’ part of the C API. Signed-off-by: Ludovic Courtès <ludo@gnu.org>
* Define a Scheme binding to ‘fchmodat’ when it exists.Maxime Devos2022-10-214-2/+92
| | | | | | | | | * configure.ac: Detect existence of fchmodat. * libguile/filesys.c (scm_chmodat): New procedure. * libguile/filesys.h (scm_chmodat): Make it part of the API. * test-suite/tests/filesys.test ("chmodat"): Test it. Signed-off-by: Ludovic Courtès <ludo@gnu.org>
* Define a Scheme binding to ‘renameat’ when it exists.Maxime Devos2022-10-215-1/+149
| | | | | | | | | | | * configure.ac: Detect if ‘renameat’ is defined. * libguile/filesys.c (scm_renameat): Define a Scheme binding to the ‘renameat’ system call. * doc/ref/posix.texi (File System): Document it. * libguile/filesys.h (scm_renameat): Make it part of the C API. * test-suite/tests/filesys.test ("rename-file-at"): New tests. Signed-off-by: Ludovic Courtès <ludo@gnu.org>
* Define AT_REMOVEDIR and others when available.Maxime Devos2022-10-211-0/+6
| | | | | | | * libguile/posix.c (scm_init_posix): Define (in Scheme) AT_REMOVEDIR and AT_EACCESS when defined (in C). Signed-off-by: Ludovic Courtès <ludo@gnu.org>
* Correct documentation of ‘mkdir’ w.r.t. the umask.Maxime Devos2022-10-211-1/+2
| | | | | | | * doc/ref/posix.texi (mkdir): Note that the umask is applied even if the mode argument is set. Signed-off-by: Ludovic Courtès <ludo@gnu.org>
* Define bindings to ‘mkdirat’ when the C function exists.Maxime Devos2022-10-215-1/+71
| | | | | | | | * configure.ac: Detect if ‘mkdirat’ exists. * libguile/filesys.c (scm_mkdirat): Define the Scheme binding. * doc/ref/posix.texi (File System): Document it. Signed-off-by: Ludovic Courtès <ludo@gnu.org>
* Define ‘symlinkat’ wrapper when supported.Maxime Devos2022-10-215-1/+58
| | | | | | | | | | | * configure.ac: Detect whether ‘symlinkat’ exists. * libguile/filesys.c (scm_symlinkat): Define a Scheme binding when it exists. * libguile/filesys.h: Make the binding part of the public C API. * doc/ref/posix.texi (File System): Document the binding. * test-suite/tests/filesys.test ("symlinkat"): Test it. Signed-off-by: Ludovic Courtès <ludo@gnu.org>
* Allow file ports in ‘utime’.Maxime Devos2022-10-215-14/+106
| | | | | | | | | | | | Ports representing symbolic links are currently unsupported. * configure.ac: Detect 'futimens'. * doc/ref/posix.texi (utime): Update documentation. * libguile/posix.c (scm_utime): Support ports. * libguile/posix.h (scm_utime): Rename argument. * test-suite/tests/posix.test ("utime"): Add more tests. Signed-off-by: Ludovic Courtès <ludo@gnu.org>
* Allow file ports in ‘readlink’.Maxime Devos2022-10-214-12/+112
| | | | | | | | | | | * configure.ac: Detect whether ‘readlinkat’ is defined. * libguile/filesys.c (scm_readlink): Support file ports when ‘readlinkat’ exists. (scm_init_filesys): Provide ‘chdir-ports’ when it exists. * doc/ref/posix.texi (File System): Document it. * test-suite/tests/filesys.test ("readlink"): Test it. Signed-off-by: Ludovic Courtès <ludo@gnu.org>
* Allow file ports in ‘chdir’ when supported.Maxime Devos2022-10-215-4/+71
| | | | | | | | | | | | | * configure.ac: Check for ‘fchdir’. * libguile/filesys.c (scm_chdir): Support file ports. (scm_init_filesys): Report support of file ports. * doc/ref/posix.texi (Processes): Update accordingly. * doc/ref/guile.texi: Add copyright line for new documentation in this patch and later patches. * test-suite/tests/filesys.test ("chdir"): Test it. Signed-off-by: Ludovic Courtès <ludo@gnu.org>
* Fixes arg type for scm_integer_from_mpzMichael Gran2022-10-151-1/+1
| | | | | | | | The definition and the declaration for scm_integer_from_mpz do not match * libguile/integers.c (scm_integer_from_mpz): takes const mpz_t arg No callers need to be changed.
* autoupdate acinclude.m4Michael Gran2022-10-141-22/+18
| | | | | | | | Autoconf's autoupdates replaces AC_TRY_CPP, AC_TRY_LINK, AC_LANG_C * acinclude (GUILE_READLINE, GUILE_STRUCT_UTIMBUF, UTIMBUF_NEEDS_POSIX): updated using autoupdate
* Presumes signal handler return voidMichael Gran2022-10-142-18/+7
| | | | | | | | | | Since Guile requires a C99 compiler, we can rely on signal handlers returning void, not int. * configure.ac: remove AC_TYPE_SIGNAL * libguile/scmsigs.c (SIGRETTYPE): remove SIGRETTYPE (take_signal): returns void (scm_sigaction_for_thread): presumes handlers return void
* Modernizes labels-as-values.m4Michael Gran2022-10-141-7/+6
| | | | | | | labels-as-values.m4 uses deprecated AC_TRY_COMPILE and has a K&R-type C function declaration * m4/labels-as-values.m4: updated
* Remove special logic for the obscure CMU C library's libc.hMike Gran2022-10-144-56/+1
| | | | | | | * acinclude.m4 (GUILE_HEADER_LIBC_WITH_UNISTD): removed * configure.ac: remove GUILE_HEADER_LIBC_WITH_UNISTD, don't check for libc.h * libguile/filesys.c [LIBC_H_WITH_UNISTD_H]: remove libc.h inclusion * libguile/posix.c [LIBC_H_WITH_UNISTD_H]: remove libc.h inclusion
* Presume time.h and sys/time.h don't conflict when includedMike Gran2022-10-143-25/+5
| | | | | | | | | | | | Systems on which time.h and sys/time.h conflicted are obsolescent. * configure.ac: remove AC_HEADER_TIME. remove conditional in tm.tm_gmtoff test. * libguile/filesys.c [TIME_WITH_SYS_TIME]: remove conditional * libguile/posix.c [TIME_WITH_SYS_TIME]: remove conditional # Conflicts: # libguile/filesys.c
* Presume ISO C90 functions are always availableMike Gran2022-10-144-21/+5
| | | | | | | | | | * configure.ac: don't check for rename, setlocale, system, memcpy, and strcoll * libguile/i18n.c [HAVE_SETLOCALE] (setlocale): remove static setlocale Don't use HAVE_SETLOCALE * libguile/posix.c: include <locale.h>, remove HAVE_SETLOCALE (scm_setlocale): always include. remove HAVE_SETLOCALE * libguile/simpos.c (scm_system): always include. remove HAVE_SYSTEM
* Presume ISO C90 headers are always availableMike Gran2022-10-1412-70/+21
| | | | | | | | | | | | | | | | | | | | | | | | This includes <assert.h>, <ctype.h>, <errno.h>, <float.h>, <iso646.h>, <limits.h>, <locale.h>, <math.h>, <setjmp.h>, <signal.h>, <stdarg.h>, <stddef.h>, <stdio.h>, <stdlib.h>, <string.h>, <time.h>, <wchar.h>, and <wctype.h>. * configure.ac: don't check for <limits.h>, <string.h>, <time.h>, <assert.h>. Remove AC_INCLUDES_DEFAULT macro * libguile/bytevectors.c: include <limits.h>, remove HAVE_LIMITS_H * libguile/filesys.c: include <string.h>, remove HAVE_STRING_H * libguile/fports.c: include <string.h>, remove HAVE_STRING_H * libguile/gen-scmconfig.c: remove HAVE_LIMITS_H, HAVE_TIME_H, STDC_HEADERS Remove SCM_HAVE_STDC_HEADERS * libguile/hash.c: include <wchar.h>, remove HAVE_WCHAR_H * libguile/net_db.c: include <string.h>, remove HAVE_STRING_H * libguile/numbers.h: remove SCM_HAVE_STDC_HEADERS * libguile/regex-posix.c: include <wchar.h>, remove HAVE_WCHAR_H (fixup_multibyte_match): always defined (scm_regexp_exec): use fixup_multibyte_match * libguile/scmsigs.c: remove STDC_HEADERS * libguile/socket.c: include <string.h>, remove HAVE_STRING_H * test-suite/standalone/test-unwind.c: include <string.h>, remove HAVE_STRING_H
* Remove AC_HEADER_STDC from configure.acMike Gran2022-10-141-1/+0
| | | | | | Requiring C99 implies standard headers are available * configure.ac: remove AC_HEADER_STDC
* Remove obsolete macro AM_PROG_CC_C_O in configure scriptMike Gran2022-10-141-3/+0
| | | | | | It has been replaced by new functionality in AC_PROG_CC * configure.ac: remove AM_PROG_CC_C_O
* Use autoconf's ability to choose the latest version of CMike Gran2022-10-141-12/+4
| | | | | | Modern AC_PROG_CC will add flags to enable C11 when necessary. * configure.ac: remove AC_PROG_CC_C99, rely on updated AC_PROG_CC
* Presume const is always availableMike Gran2022-10-141-2/+0
| | | | * configure.ac (AC_C_CONST): removed
* Update libtool initialization in configure scriptMike Gran2022-10-141-4/+1
| | | | | | * configure.ac (AC_LIBTOOL_WIN32_DLL, AC_LIBTOOL_DLOPEN): removed (AC_PROG_LIBTOOL): removed (LT_INIT): added
* doc: Document how (ice-9 format) replaces 'format'.Jean Abou Samra2022-10-122-1/+18
| | | | | | | * doc/ref/misc-modules.texi (Formatted Output): Add paragraph. * module/ice-9/format.scm: Add comment. Co-authored-by: Ludovic Courtès <ludo@gnu.org>
* Define SO_RCVTIMEO and SO_SNDTIMEO.Christopher Baines2022-10-122-0/+46
| | | | | | | | | | | | | These are important for reliable networking, since they prevent network operations from hanging indefinitely. * libguile/socket.c (scm_init_socket): Define SO_RCVTIMEO and SO_SNDTIMEO. (scm_getsockopt, scm_setsockopt): Include SO_RCVTIMEO and SO_SNDTIMEO in docstring and handle them. * doc/ref/posix.texi (Network Sockets and Communication): Document them. Signed-off-by: Ludovic Courtès <ludo@gnu.org>
* Update reference to the GNU Coding Standards.Daniel Llorens2022-10-121-3/+2
|