export `make-promise' to scheme
authorAndy Wingo <wingo@pobox.com>
Thu, 25 Sep 2008 14:16:35 +0000 (16:16 +0200)
committerAndy Wingo <wingo@pobox.com>
Thu, 25 Sep 2008 14:16:35 +0000 (16:16 +0200)
* libguile/eval.h:
* libguile/eval.c (scm_make_promise): Rename from `scm_makprom', and
  export as the scheme procedure, `make-promise'.

* libguile/eval.i.c (CEVAL): s/makprom/make_promise/.

libguile/eval.c
libguile/eval.h
libguile/eval.i.c

index 4defade..d4b6aec 100644 (file)
@@ -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)
index bf6279b..3332652 100644 (file)
@@ -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);
index 83878ff..3d68670 100644 (file)
@@ -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.