* throw.c (scm_internal_lazy_catch): New function.
authorJim Blandy <jimb@red-bean.com>
Fri, 7 Feb 1997 22:38:27 +0000 (22:38 +0000)
committerJim Blandy <jimb@red-bean.com>
Fri, 7 Feb 1997 22:38:27 +0000 (22:38 +0000)
(scm_lazy_catch): Rewritten to use it.
(scm_ithrow): Handle the new lazy catch representation.
Use SCM_LAZY_CATCH_P, instead of assuming that any wind list entry
that doesn't have a jmpbuf is a lazy catch clause.
(tc16_lazy_catch, struct lazy_catch, mark_lazy_catch,
free_lazy_catch, print_lazy_catch, lazy_catch_funs,
make_lazy_catch, SCM_LAZY_CATCH_P): Support funs, including a new
smob.
(scm_init_throw): Register the new lazy-catch smob type.
* throw.h (scm_internal_lazy_catch): decl for new function.

libguile/throw.h

index 26c0d9a..be971a5 100644 (file)
@@ -58,6 +58,12 @@ extern SCM scm_internal_catch SCM_P ((SCM tag,
                                      scm_catch_handler_t handler,
                                      void *handler_data));
 
+extern SCM scm_internal_lazy_catch SCM_P ((SCM tag,
+                                          scm_catch_body_t body,
+                                          void *body_data,
+                                          scm_catch_handler_t handler,
+                                          void *handler_data));
+
 /* The first argument to scm_body_thunk should be a pointer to one of
    these.  See the implementation of catch in throw.c.  */
 struct scm_body_thunk_data