summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--libguile/eval.c18
-rw-r--r--libguile/eval.h2
-rw-r--r--libguile/eval.i.c2
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.