* ioext.c (scm_setfileno): throw a runtime error if SET_FILE_FD_FIELD
[bpt/guile.git] / libguile / throw.h
index b5b80fe..99d8ff6 100644 (file)
 
 \f
 
-\f
-#ifdef __STDC__
-extern SCM scm_catch (SCM tag, SCM thunk, SCM handler);
-extern SCM scm_ithrow (SCM key, SCM args, int noreturn);
-extern SCM scm_throw (SCM key, SCM args);
-extern void scm_init_throw (void);
+typedef SCM (*scm_catch_body_t) SCM_P ((void *data, SCM jmpbuf));
+typedef SCM (*scm_catch_handler_t) SCM_P ((void *data,
+                                          SCM tag, SCM throw_args));
+
+extern SCM scm_internal_catch SCM_P ((SCM tag,
+                                     scm_catch_body_t body,
+                                     void *body_data,
+                                     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
+{
+  /* The tag being caught.  We only use it to figure out what
+     arguments to pass to the body procedure; see scm_catch_thunk_body for
+     details.  */
+  SCM tag;
+
+  /* The Scheme procedure object constituting the catch body.
+     scm_body_by_proc invokes this.  */
+  SCM body_proc;
+};
+
+extern SCM scm_body_thunk SCM_P ((void *, SCM));
 
-#else /* STDC */
-extern SCM scm_catch ();
-extern SCM scm_ithrow ();
-extern SCM scm_throw ();
-extern void scm_init_throw ();
 
-#endif /* STDC */
+extern SCM scm_handle_by_proc SCM_P ((void *, SCM, SCM));
+extern SCM scm_handle_by_message SCM_P ((void *, SCM, SCM));
+extern int scm_exit_status SCM_P ((SCM args));
 
+extern SCM scm_catch SCM_P ((SCM tag, SCM thunk, SCM handler));
+extern SCM scm_lazy_catch SCM_P ((SCM tag, SCM thunk, SCM handler));
+extern SCM scm_ithrow SCM_P ((SCM key, SCM args, int noreturn));
 
+extern SCM scm_throw SCM_P ((SCM key, SCM args));
+extern void scm_init_throw SCM_P ((void));
 #endif  /* THROWH */