summaryrefslogtreecommitdiff
path: root/module/srfi
AgeCommit message (Collapse)AuthorFilesLines
2017-04-19Fixed bug: ~N mishandles small nanoseconds valueAndrew Moss1-1/+1
Fixes <http://bugs.gnu.org/26261>. Reported by Zefram <zefram@fysh.org>. * module/srfi/srfi-19.scm ("define directives"): N padding increased from 7 to 9 * test-suite/tests/srfi-19.test ("date->string"): New test.
2017-04-19SRFI-19 current-time-monotonic returns time of right typeAndy Wingo1-3/+6
* module/srfi/srfi-19.scm (current-time-monotonic): Actually return a time with the correct type. Fixes #26329.
2016-11-05SRFI-18 mutexes are not recursiveAndy Wingo1-8/+1
* module/srfi/srfi-18.scm (make-mutex): Not recursive.
2016-11-05Move more functionality to SRFI-18 mutex-unlock!Andy Wingo1-15/+17
* module/srfi/srfi-18.scm (mutex-unlock!): Implement the ignore-unlock-errors and wait-condition-variable behavior of mutex-unlock! directly, without relying on Guile.
2016-11-05SRFI-18 manages own mutex "abandoned" stateAndy Wingo1-21/+20
* module/srfi/srfi-18.scm (<mutex>, with-thread-mutex-cleanup) (make-mutex, mutex-state, abandon-mutex!, mutex-lock!): Manage "abandoned" bit on Scheme side with no need for thread cleanup handler.
2016-11-04SRFI-18 threads disjoint from guile threadsAndy Wingo1-67/+75
* doc/ref/srfi-modules.texi (SRFI-18 Threads): Update. * module/srfi/srfi-18.scm (<mutex>): Add owner field. (<thread>): New data type. (make-thread): Adapt for boxed threads. (thread-start!, thread-terminate!): Likewise. (mutex-state): Adapt for boxed threads. (mutex-lock!, mutex-unlock!): Update owner field.
2016-11-04srfi-18 condition variables disjointAndy Wingo1-32/+27
* module/srfi/srfi-18.scm (<condition-variable>): New data type. (make-thread): Use srfi-18 interfaces. (mutex-unlock!): Adapt to optional cond argument being disjoint from Guile condition variables. (make-condition-variable, condition-variable-signal!) (condition-variable-broadcast!): Adapt.
2016-11-04Remove export srfi-18 never hadAndy Wingo1-1/+0
* module/srfi/srfi-18.scm (condition-variable-wait!): Remove undefined export.
2016-11-04SRFI-18 mutexes disjoint from Guile mutexesAndy Wingo1-41/+62
* module/srfi/srfi-18.scm (<mutex>): Define as a wrapper type around Guile mutexes. (thread-mutexes): New variable. (with-thread-mutex-cleanup): New facility to abandon mutexes on SRFI-18 thread exit. Not yet used. (make-thread): Use SRFI-18 interfaces. (make-mutex): Reimplement for our boxed mutexes. (mutex-state): Adapt. (mutex-lock!): Adapt. (mutex-unlock!): Adapt. * test-suite/tests/srfi-18.test: Don't assume that SRFI-18 mutexes are the same as Guile mutexes.
2016-10-31srfi-18: thread-terminate! without cleanup handlersAndy Wingo1-23/+13
* module/srfi/srfi-18.scm (%cancel-sentinel, thread-terminate!): Just use cancel-thread to cause the thread to return a sentinel value. (%timeout-sentinel): Rename from %sentinel. (thread-join!): Adapt and transform %cancel-sentinel to a &terminated-thread-exception.
2016-10-31Trim srfi-18 thread startup machineryAndy Wingo1-10/+6
* module/srfi/srfi-18.scm (make-thread): Use just one cond/mutex pair for signalling in both directions: waiting for launch and waiting for start.
2016-10-31Refactor thread-join! to use optional args.Andy Wingo1-7/+14
* module/srfi/srfi-18.scm (thread-join!): Use optional args. Also don't treat false return values from threads as meaning anything.
2016-10-31Rationalize exception handling in srfi-18Andy Wingo1-44/+38
* module/srfi/srfi-18.scm (make-thread): Inline some helpers, and use just one catch block. (thread->exception): Move up definition. (exception-handler-for-foreign-threads): Use this as the default handler, not the one that squirrels away exceptions in thread->exception. (thread-terminate!): Don't instate an exception handler for the thread cleanup proc.
2016-10-31srfi-18: Avoid call/cc.Andy Wingo1-29/+35
* module/srfi/srfi-18.scm (with-exception-handlers-here): New function. (wrap): Remove. (thread-join!, mutex-lock!): Use with-exception-handlers-here instead of the call/cc+wrap mess.
2016-10-30srfi-18: Inline uses of srfi-18-exception-preserver.Andy Wingo1-16/+13
* module/srfi/srfi-18.scm (srfi-18-exception-preserver): Inline into call sites.
2016-10-30srfi-18: Use srfi-35 conditions.Andy Wingo1-26/+25
* module/srfi/srfi-18.scm: Use srfi-35 conditions instead of our home-grown equivalent system. (thread-exception-handlers): Remove unused table. (srfi-18-exception-handler): Always capture key consed to args; no special case for bare key. * test-suite/tests/srfi-18.test (provided?): Adapt to reason always being key+args.
2016-10-30srfi-18: Use parameters.Andy Wingo1-25/+15
* module/srfi/srfi-18.scm: Use srfi-34 internally with srfi-34: prefix. (current-exception-handler): Be a parameter. (with-exception-handler): Adapt to current-exception-handler change. (thread-join!, mutex-lock!): Adapt to use srfi-34: prefix.
2016-10-30srfi-18: Use lambda* optional arguments.Andy Wingo1-12/+10
* module/srfi/srfi-18.scm (make-mutex, make-condition-variable): Use optional arguments.
2016-10-30srfi-18: Simplify thread-sleep!, thread-terminate!.Andy Wingo1-19/+15
* module/srfi/srfi-18.scm (thread-sleep!): Use `when'. (thread-terminate!): Simplify.
2016-10-30srfi-18: Use `match' in thread-start!.Andy Wingo1-9/+10
* module/srfi/srfi-18.scm (thread-start!): Use `match'.
2016-10-30srfi-18: Improve style.Andy Wingo1-11/+7
* module/srfi/srfi-18.scm (raise): Rely on SRFI-34 to #:replace raise. (make-thread): Use lambda* and when.
2016-10-30Fix srfi-34 indentationAndy Wingo1-3/+3
* module/srfi/srfi-34.scm (with-exception-handler): Fix indentation.
2016-10-23Move thread bindings to (ice-9 threads)Andy Wingo1-111/+111
* libguile/init.c (scm_i_init_guile): Don't call scm_init_thread_procs. * libguile/threads.c (scm_init_ice_9_threads): Rename from scm_init_thread_procs, make static. (scm_init_threads): Register scm_init_thread_procs extension. * libguile/threads.h (scm_init_thread_procs): Remove decl. * module/ice-9/boot-9.scm: Load (ice-9 threads), so that related side effects occur early. * module/ice-9/deprecated.scm (define-deprecated): Fix to allow deprecated bindings to appear in operator position. Export deprecated bindings. (define-deprecated/threads, define-deprecated/threads*): Trampoline thread bindings to (ice-9 threads). * module/ice-9/futures.scm: Use ice-9 threads. * module/ice-9/threads.scm: Load scm_init_ice_9_threads extension. Reorder definitions and imports so that the module circularity with (ice-9 futures) continues to work. * module/language/cps/intmap.scm: * module/language/cps/intset.scm: * module/language/tree-il/primitives.scm: Use (ice-9 threads). * module/language/cps/reify-primitives.scm: Reify current-thread in (ice-9 threads) module. * module/srfi/srfi-18.scm: Use ice-9 threads with a module prefix, and adapt all users. Use proper keywords in module definition form. * test-suite/tests/filesys.test (test-suite): * test-suite/tests/fluids.test (test-suite): * test-suite/tests/srfi-18.test: Use ice-9 threads. * NEWS: Add entry. * doc/ref/api-scheduling.texi (Threads): Update. * doc/ref/posix.texi (Processes): Move current-processor-count and total-processor-count docs to Threads.
2016-05-22SRFI-19: Update the table of leap seconds.Mark H Weaver1-3/+4
* module/srfi/srfi-19.scm (leap-second-table): Update to include the most recent leap second.
2015-01-22Merge commit '8cf2a7ba7432d68b9a055d29f18117be70375af9'Andy Wingo1-0/+34
2014-12-02Implement SRFI 28: Basic Format Strings.Chris Jester-Young1-0/+34
* module/srfi/srfi-28.scm: New module. * module/Makefile.am (SRFI_SOURCES): Add srfi/srfi-28.scm. * doc/ref/srfi-modules.texi (SRFI-28): New node.
2014-09-30Merge branch 'stable-2.0'Mark H Weaver1-9/+9
Conflicts: benchmark-suite/benchmarks/ports.bm libguile/async.h libguile/bytevectors.c libguile/foreign.c libguile/gsubr.c libguile/srfi-1.c libguile/vm-engine.h libguile/vm-i-scheme.c module/Makefile.am module/language/tree-il/analyze.scm module/language/tree-il/peval.scm module/scripts/compile.scm module/scripts/disassemble.scm test-suite/tests/asm-to-bytecode.test test-suite/tests/peval.test test-suite/tests/rdelim.test
2014-09-24doc: Improve description of vector-unfold and vector-unfold-right.Mark H Weaver1-8/+8
* doc/ref/srfi-modules.texi (SRFI-43 Constructors)[vector-unfold]: Improve description. * module/srfi/srfi-43.scm (vector-unfold, vector-unfold-right): Improve docstrings.
2014-09-20SRFI-43: vector-concatenate: Fix error message.Mark H Weaver1-1/+1
* module/srfi/srfi-43.scm (vector-concatenate): Fix the 'who' of an error message.
2014-05-01Rewrite boot-9 map to be recursive and pureAndy Wingo1-26/+46
* module/ice-9/boot-9.scm (map): Rewrite to be recursive and pure instead of iterative and effectful. At best this is faster; at worst it is slower. In any case it resolves continuation-related issues. * module/srfi/srfi-1.scm (fold): Specialize the two-arg case. (map): Rewrite to be recursive. * test-suite/tests/r5rs_pitfall.test (8.3): Update for new expected map behavior.
2014-04-25Merge branch 'stable-2.0'v2.1.0Mark H Weaver2-7/+10
Conflicts: GUILE-VERSION NEWS guile-readline/ice-9/readline.scm libguile/async.c libguile/backtrace.c libguile/deprecated.h libguile/gc-malloc.c libguile/gdbint.c libguile/init.c libguile/ioext.c libguile/mallocs.c libguile/print.c libguile/rw.c libguile/scmsigs.c libguile/script.c libguile/simpos.c libguile/snarf.h libguile/strports.c libguile/threads.c libguile/vm-i-scheme.c libguile/vm-i-system.c module/srfi/srfi-18.scm test-suite/Makefile.am test-suite/standalone/test-num2integral.c
2014-04-05Match and srfi-9 expose their bailouts to the CSE passAndy Wingo1-6/+6
* module/ice-9/match.upstream.scm (match-next): Inline a call to "error", so the new CSE pass will see this case as a bailout. * module/srfi/srfi-9.scm (throw-bad-struct): Reimplement as a syntax rule, so that the CSE pass sees the "throw" call.
2014-04-01Optimize two-list srfi-1 mapAndy Wingo1-0/+17
* module/srfi/srfi-1.scm (map): Optimize the two-list variant.
2014-03-31Simplify boot-9 and srfi-1 mapAndy Wingo1-14/+5
* module/ice-9/boot-9.scm (map): * module/srfi/srfi-1.scm (map): Simplify the implementations to check for list? beforehand. It's faster, and it will be needed if we decide to go recursive.
2014-03-23Calculate usecs correctly in thread-sleep!Nathaniel Alderson1-1/+1
* module/srfi/srfi-18.scm (thread-sleep!): Correctly compute microseconds. * test-suite/tests/srfi-18.test: Add test.
2014-03-16Optimize srfi-1 for-each with two lists.Andy Wingo1-0/+16
* module/srfi/srfi-1.scm (for-each): Optimize for the two-list case.
2014-03-16More for-each micro-optimizationsAndy Wingo1-17/+5
* module/ice-9/boot-9.scm (for-each): * module/srfi/srfi-1.scm (for-each): Re-implement one-list case using an explicit check for list? instead of the tortoise-hare thing. Seems to be faster!
2014-03-03SRFI-19: Update the table of leap seconds.Mark H Weaver1-3/+6
* module/srfi/srfi-19.scm (leap-second-table): Update to include the two most recent leap seconds.
2014-03-02Port unrolled one-argument for-each from boot-9 to srfi-1Andy Wingo1-11/+12
* module/srfi/srfi-1.scm (for-each): Port unrolled one-argument implementation here from the boot-9 version.
2014-02-27SRFI-18: Export 'current-thread'.Mark H Weaver1-3/+3
Fixes <http://debbugs.gnu.org/16890>. Reported by Xin Wang <dram.wang@gmail.com>. * module/srfi/srfi-18.scm: Reexport 'current-thread'. * THANKS: Add "Xin Wang" to fixes section.
2014-02-08Merge commit '2f3b7e9a41677bfe802e8a1ee851827297384c58'Andy Wingo2-59/+4
Conflicts: module/ice-9/pretty-print.scm
2014-02-08Merge commit 'a675a2e81b792b9f860bec57c38a1948631c7a41'Andy Wingo1-6/+3
2014-02-07(srfi srfi-4 gnu) uses private define-bytevector-type from (srfi srfi-4)Andy Wingo1-41/+4
* module/srfi/srfi-4/gnu.scm: Re-use implementation of define-bytevector-type from srfi-4.
2014-02-07Remove private unused duplicate c32/c64vector definitionsAndy Wingo1-18/+0
* module/srfi/srfi-4.scm: Remove vestigial definitions for c32vectors and c64vectors. Those are defined in (srfi srfi-4 gnu).
2014-02-07SRFI-4 predicates, length accessors only accept bytevectors (not arrays)Andy Wingo1-6/+3
* module/srfi/srfi-4.scm (define-bytevector-type): For the predicates and length accessors, only accept bytevectors. Since arrays don't work for u32vector-ref et al, they shouldn't pass u32vector?.
2014-02-07Merge commit '34e89877342f20fdb8a531ad78dab34cfd2b0843'Andy Wingo3-0/+2172
Conflicts: module/Makefile.am
2014-02-07Merge commit 'ca5e0414e96886177d883a249edd957d2331db65'Andy Wingo1-0/+37
Conflicts: module/language/tree-il/primitives.scm
2014-02-07Merge commit 'f6ddf827f8f192af7a8cd255bd8374a0d38bbb74'Andy Wingo1-1/+1
Conflicts: module/ice-9/boot-9.scm module/oop/goops.scm
2014-02-01Implement SRFI-64 - A Scheme API for test suites.Mark H Weaver2-0/+1095
* module/srfi/srfi-64.scm: New file. * module/srfi/srfi-64/testing.scm: New file. * module/Makefile.am: Add rule for srfi-64.go dependency on srfi-64/testing.scm. (SRFI_SOURCES): Add srfi/srfi-64.scm. (NOCOMP_SOURCES): Add srfi/srfi-64/testing.scm. * doc/ref/srfi-modules.texi (SRFI-64): New node. * test-suite/tests/srfi-64.test: New file. * test-suite/tests/srfi-64-test.scm: New file. * test-suite/Makefile.am (SCM_TESTS): Add test-suite/tests/srfi-64.test. (EXTRA_DIST): Add tests/srfi-64-test.scm.
2014-02-01Implement SRFI-43 Vector Library.Mark H Weaver1-0/+1077
* module/srfi/srfi-43.scm: New file. * module/Makefile.am (SRFI_SOURCES): Add module/srfi/srfi-43.scm. * test-suite/tests/srfi-43.test: New file. * test-suite/Makefile.am (SCM_TESTS): Add test-suite/tests/srfi-43.test. * doc/ref/srfi-modules.texi (SRFI-43, SRFI-43 Constructors) (SRFI-43 Predicates, SRFI-43 Selectors, SRFI-43 Iteration) (SRFI-43 Searching, SRFI-43 Mutators, SRFI-43 Conversion): New nodes.