diff options
-rw-r--r-- | libguile/eval.c | 18 | ||||
-rw-r--r-- | libguile/eval.h | 2 | ||||
-rw-r--r-- | libguile/eval.i.c | 2 |
3 files changed, 16 insertions, 6 deletions
diff --git a/libguile/eval.c b/libguile/eval.c index 4defade1f..d4b6aece2 100644 --- a/libguile/eval.c +++ b/libguile/eval.c @@ -3662,13 +3662,23 @@ scm_closure (SCM code, SCM env) scm_t_bits scm_tc16_promise; -SCM -scm_makprom (SCM code) -{ +SCM_DEFINE (scm_make_promise, "make-promise", 1, 0, 0, + (SCM thunk), + "Create a new promise object.\n\n" + "@code{make-promise} is a procedural form of @code{delay}.\n" + "These two expressions are equivalent:\n" + "@lisp\n" + "(delay @var{exp})\n" + "(make-promise (lambda () @var{exp}))\n" + "@end lisp\n") +#define FUNC_NAME s_scm_make_promise +{ + SCM_VALIDATE_THUNK (1, thunk); SCM_RETURN_NEWSMOB2 (scm_tc16_promise, - SCM_UNPACK (code), + SCM_UNPACK (thunk), scm_make_recursive_mutex ()); } +#undef FUNC_NAME static SCM promise_mark (SCM promise) diff --git a/libguile/eval.h b/libguile/eval.h index bf6279b82..333265263 100644 --- a/libguile/eval.h +++ b/libguile/eval.h @@ -162,7 +162,7 @@ SCM_API SCM scm_dapply (SCM proc, SCM arg1, SCM args); SCM_API SCM scm_map (SCM proc, SCM arg1, SCM args); SCM_API SCM scm_for_each (SCM proc, SCM arg1, SCM args); SCM_API SCM scm_closure (SCM code, SCM env); -SCM_API SCM scm_makprom (SCM code); +SCM_API SCM scm_make_promise (SCM thunk); SCM_API SCM scm_force (SCM x); SCM_API SCM scm_promise_p (SCM x); SCM_API SCM scm_cons_source (SCM xorig, SCM x, SCM y); diff --git a/libguile/eval.i.c b/libguile/eval.i.c index 83878ff41..3d686700b 100644 --- a/libguile/eval.i.c +++ b/libguile/eval.i.c @@ -732,7 +732,7 @@ dispatch: case (ISYMNUM (SCM_IM_DELAY)): - RETURN (scm_makprom (scm_closure (SCM_CDR (x), env))); + RETURN (scm_make_promise (scm_closure (SCM_CDR (x), env))); #if 0 /* See futures.h for a comment why futures are not enabled. |