diff options
author | Mikael Djurfeldt <djurfeldt@nada.kth.se> | 2002-12-15 14:24:34 +0000 |
---|---|---|
committer | Mikael Djurfeldt <djurfeldt@nada.kth.se> | 2002-12-15 14:24:34 +0000 |
commit | 28d52ebb1945223db0df88cc33e4a88d860dafbb (patch) | |
tree | 41e93008606708a69c3d3f0a7065abca21a477ad /libguile/eval.h | |
parent | 2ff4f1815955aa0c6b759d3c160658fe576ba5ee (diff) | |
download | guile-28d52ebb1945223db0df88cc33e4a88d860dafbb.tar.gz |
* __scm.h (SCM_DEFER_INTS, SCM_ALLOW_INTS): New definitions.
Simply lock a thread C API recursive mutex.
(SCM_NONREC_CRITICAL_SECTION_START,
SCM_NONREC_CRITICAL_SECTION_END, SCM_REC_CRITICAL_SECTION_START,
SCM_REC_CRITICAL_SECTION_END): Removed.
* eval.c: Replaced SOURCE_SECTION_START / SOURCE_SECTION_END with
direct calls to scm_rec_mutex_lock / unlock around the three calls
to scm_m_expand_body.
* eval.c, eval.h (promise_free): New function.
(scm_force): Rewritten; Now thread-safe; Removed
SCM_DEFER/ALLOW_INTS.
* pthread-threads.h: Added partially implemented plugin interface
for recursive mutexes. These are, for now, only intended to be
used internally within the Guile implementation.
* pthread-threads.c: New file.
* threads.c: Conditionally #include "pthread-threads.c".
* eval.c, eval.h (scm_makprom, scm_force): Rewritten to be
thread-safe;
* snarf.h (SCM_MUTEX, SCM_GLOBAL_MUTEX, SCM_REC_MUTEX,
SCM_GLOBAL_REC_MUTEX): New macros.
* eval.c, threads.c, threads.h, snarf.h: Rewrote critical section
macros---use mutexes instead.
* tags.h (SCM_IM_FUTURE): New tag.
* eval.c (scm_m_future): New primitive macro.
(SCM_CEVAL): Support futures.
(unmemocopy): Support unmemoization of futures.
* print.c (scm_isymnames): Name of future isym.
Diffstat (limited to 'libguile/eval.h')
-rw-r--r-- | libguile/eval.h | 16 |
1 files changed, 16 insertions, 0 deletions
diff --git a/libguile/eval.h b/libguile/eval.h index ec4dc476f..8e2fbee84 100644 --- a/libguile/eval.h +++ b/libguile/eval.h @@ -101,6 +101,21 @@ SCM_API SCM scm_eval_options_interface (SCM setting); +/* {Promises} + */ + +#define SCM_F_PROMISE_COMPUTED (1L << 16) +#define SCM_PROMISE_COMPUTED_P(promise) \ + (SCM_F_PROMISE_COMPUTED & SCM_CELL_WORD_0 (promise)) +#define SCM_SET_PROMISE_COMPUTED(promise) \ + SCM_SET_CELL_WORD_0 (promise, scm_tc16_promise | SCM_F_PROMISE_COMPUTED) +#define SCM_PROMISE_MUTEX(promise) \ + ((scm_t_rec_mutex *) SCM_CELL_WORD_2 (promise)) +#define SCM_PROMISE_DATA SCM_CELL_OBJECT_1 +#define SCM_SET_PROMISE_DATA SCM_SET_CELL_OBJECT_1 +SCM_API scm_t_bits scm_tc16_promise; + + /* {Evaluator} * @@ -204,6 +219,7 @@ SCM_API SCM scm_m_letstar (SCM xorig, SCM env); SCM_API SCM scm_m_do (SCM xorig, SCM env); SCM_API SCM scm_m_quasiquote (SCM xorig, SCM env); SCM_API SCM scm_m_delay (SCM xorig, SCM env); +SCM_API SCM scm_m_future (SCM xorig, SCM env); SCM_API SCM scm_m_define (SCM x, SCM env); SCM_API SCM scm_m_letrec (SCM xorig, SCM env); SCM_API SCM scm_m_let (SCM xorig, SCM env); |