~peter-pearse/ubuntu/natty/guile-1.8/prop001

« back to all changes in this revision

Viewing changes to libguile/throw.h

  • Committer: Bazaar Package Importer
  • Author(s): Daniel Schepler
  • Date: 2006-11-09 03:11:16 UTC
  • Revision ID: james.westby@ubuntu.com-20061109031116-hu0q1jxqg12y6yeg
Tags: upstream-1.8.1+1
ImportĀ upstreamĀ versionĀ 1.8.1+1

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
/* classes: h_files */
 
2
 
 
3
#ifndef SCM_THROW_H
 
4
#define SCM_THROW_H
 
5
 
 
6
/* Copyright (C) 1995,1996,1998,2000, 2006 Free Software Foundation, Inc.
 
7
 *
 
8
 * This library is free software; you can redistribute it and/or
 
9
 * modify it under the terms of the GNU Lesser General Public
 
10
 * License as published by the Free Software Foundation; either
 
11
 * version 2.1 of the License, or (at your option) any later version.
 
12
 *
 
13
 * This library is distributed in the hope that it will be useful,
 
14
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 
15
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 
16
 * Lesser General Public License for more details.
 
17
 *
 
18
 * You should have received a copy of the GNU Lesser General Public
 
19
 * License along with this library; if not, write to the Free Software
 
20
 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
 
21
 */
 
22
 
 
23
 
 
24
 
 
25
#include "libguile/__scm.h"
 
26
 
 
27
 
 
28
 
 
29
typedef SCM (*scm_t_catch_body) (void *data);
 
30
typedef SCM (*scm_t_catch_handler) (void *data,
 
31
                                    SCM tag, SCM throw_args);
 
32
 
 
33
SCM_API SCM scm_c_catch (SCM tag,
 
34
                         scm_t_catch_body body,
 
35
                         void *body_data,
 
36
                         scm_t_catch_handler handler,
 
37
                         void *handler_data,
 
38
                         scm_t_catch_handler pre_unwind_handler,
 
39
                         void *pre_unwind_handler_data);
 
40
 
 
41
SCM_API SCM scm_c_with_throw_handler (SCM tag,
 
42
                                      scm_t_catch_body body,
 
43
                                      void *body_data,
 
44
                                      scm_t_catch_handler handler,
 
45
                                      void *handler_data,
 
46
                                      int lazy_catch_p);
 
47
 
 
48
SCM_API SCM scm_internal_catch (SCM tag,
 
49
                                scm_t_catch_body body,
 
50
                                void *body_data,
 
51
                                scm_t_catch_handler handler,
 
52
                                void *handler_data);
 
53
 
 
54
SCM_API SCM scm_internal_lazy_catch (SCM tag,
 
55
                                     scm_t_catch_body body,
 
56
                                     void *body_data,
 
57
                                     scm_t_catch_handler handler,
 
58
                                     void *handler_data);
 
59
 
 
60
SCM_API SCM scm_internal_stack_catch (SCM tag,
 
61
                                      scm_t_catch_body body,
 
62
                                      void *body_data,
 
63
                                      scm_t_catch_handler handler,
 
64
                                      void *handler_data);
 
65
 
 
66
/* The first argument to scm_body_thunk should be a pointer to one of
 
67
   these.  See the implementation of catch in throw.c.  */
 
68
struct scm_body_thunk_data
 
69
{
 
70
  /* The tag being caught.  We only use it to figure out what
 
71
     arguments to pass to the body procedure; see scm_catch_thunk_body for
 
72
     details.  */
 
73
  SCM tag;
 
74
 
 
75
  /* The Scheme procedure object constituting the catch body.
 
76
     scm_body_by_proc invokes this.  */
 
77
  SCM body_proc;
 
78
};
 
79
 
 
80
SCM_API SCM scm_body_thunk (void *);
 
81
 
 
82
 
 
83
SCM_API SCM scm_handle_by_proc (void *, SCM, SCM);
 
84
SCM_API SCM scm_handle_by_proc_catching_all (void *, SCM, SCM);
 
85
SCM_API SCM scm_handle_by_message (void *, SCM, SCM);
 
86
SCM_API SCM scm_handle_by_message_noexit (void *, SCM, SCM);
 
87
SCM_API SCM scm_handle_by_throw (void *, SCM, SCM);
 
88
SCM_API int scm_exit_status (SCM args);
 
89
 
 
90
SCM_API SCM scm_catch_with_pre_unwind_handler (SCM tag, SCM thunk, SCM handler, SCM lazy_handler);
 
91
SCM_API SCM scm_catch (SCM tag, SCM thunk, SCM handler);
 
92
SCM_API SCM scm_with_throw_handler (SCM tag, SCM thunk, SCM handler);
 
93
SCM_API SCM scm_lazy_catch (SCM tag, SCM thunk, SCM handler);
 
94
SCM_API SCM scm_ithrow (SCM key, SCM args, int noreturn);
 
95
 
 
96
SCM_API SCM scm_throw (SCM key, SCM args);
 
97
SCM_API void scm_init_throw (void);
 
98
 
 
99
#endif  /* SCM_THROW_H */
 
100
 
 
101
/*
 
102
  Local Variables:
 
103
  c-file-style: "gnu"
 
104
  End:
 
105
*/