Remove GOOPS random state
[bpt/guile.git] / libguile / continuations.h
CommitLineData
0f2d19dd
JB
1/* classes: h_files */
2
b29058ff
DH
3#ifndef SCM_CONTINUATIONS_H
4#define SCM_CONTINUATIONS_H
5
3b14dd2f 6/* Copyright (C) 1995,1996,2000,2001, 2006, 2008, 2009, 2010, 2012, 2013, 2014 Free Software Foundation, Inc.
b29058ff 7 *
73be1d9e 8 * This library is free software; you can redistribute it and/or
53befeb7
NJ
9 * modify it under the terms of the GNU Lesser General Public License
10 * as published by the Free Software Foundation; either version 3 of
11 * the License, or (at your option) any later version.
b29058ff 12 *
53befeb7
NJ
13 * This library is distributed in the hope that it will be useful, but
14 * WITHOUT ANY WARRANTY; without even the implied warranty of
73be1d9e
MV
15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
16 * Lesser General Public License for more details.
b29058ff 17 *
73be1d9e
MV
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
53befeb7
NJ
20 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
21 * 02110-1301 USA
73be1d9e 22 */
b29058ff 23
0f2d19dd 24\f
b29058ff 25
b4309c3c 26#include "libguile/__scm.h"
0f2d19dd 27
766c5eaf 28#ifdef __ia64__
6a535440 29#include <signal.h>
78b6566e 30#include <ucontext.h>
87855fa2 31#endif /* __ia64__ */
0f2d19dd
JB
32\f
33
1d1cae0e 34#define SCM_CONTINUATIONP(x) \
d798a895 35 (SCM_PROGRAM_P (x) && SCM_PROGRAM_IS_CONTINUATION (x))
1d1cae0e 36
5f144b10 37/* a continuation SCM is a non-immediate pointing to a heap cell with:
2dbec7b5
GH
38 word 0: bits 0-15: smob type tag: scm_tc16_continuation.
39 bits 16-31: unused.
92c2555f 40 word 1: malloc block containing an scm_t_contregs structure with a
5f144b10
GH
41 tail array of SCM_STACKITEM. the size of the array is stored
42 in the num_stack_items field of the structure.
43*/
44
0f2d19dd
JB
45typedef struct
46{
a4dbe1ac 47 scm_i_jmp_buf jmpbuf;
766c5eaf 48#ifdef __ia64__
766c5eaf
RB
49 void *backing_store;
50 unsigned long backing_store_size;
51#endif /* __ia64__ */
c014a02e 52 size_t num_stack_items; /* size of the saved stack. */
9de87eea 53 SCM root; /* continuation root identifier. */
796e54a7 54 struct scm_vm *vp; /* vm */
269479e3 55 SCM vm_cont; /* vm's stack and regs */
0f2d19dd 56
9de87eea 57 /* The offset from the live stack location to this copy. This is
5c5c27dc
MV
58 used to adjust pointers from within the copied stack to the stack
59 itself.
60
61 Thus, when you read a pointer from the copied stack that points
62 into the live stack, you need to add OFFSET so that it points
63 into the copy.
64 */
65 scm_t_ptrdiff offset;
66
5f144b10 67 SCM_STACKITEM stack[1]; /* copied stack of size num_stack_items. */
92c2555f 68} scm_t_contregs;
1be6b49c 69
0f2d19dd
JB
70
71\f
72
796e54a7
AW
73SCM_INTERNAL SCM scm_i_make_continuation (int *first,
74 struct scm_vm *vp,
75 SCM vm_cont);
d8873dfe
AW
76SCM_INTERNAL void scm_i_check_continuation (SCM cont);
77SCM_INTERNAL void scm_i_reinstate_continuation (SCM cont);
78
3b14dd2f
AW
79struct scm_frame;
80SCM_INTERNAL int scm_i_continuation_to_frame (SCM cont,
81 struct scm_frame *frame);
82
796e54a7 83SCM_INTERNAL struct scm_vm* scm_i_contregs_vp (SCM contregs);
d8873dfe 84SCM_INTERNAL SCM scm_i_contregs_vm_cont (SCM contregs);
9de87eea
MV
85
86SCM_API void *scm_c_with_continuation_barrier (void *(*func)(void*), void *);
87SCM_API SCM scm_with_continuation_barrier (SCM proc);
88
102dbb6f
LC
89SCM_INTERNAL SCM
90scm_i_with_continuation_barrier (scm_t_catch_body body,
91 void *body_data,
92 scm_t_catch_handler handler,
93 void *handler_data,
94 scm_t_catch_handler pre_unwind_handler,
95 void *pre_unwind_handler_data);
9de87eea 96
102dbb6f 97SCM_INTERNAL void scm_init_continuations (void);
0f2d19dd 98
b29058ff 99#endif /* SCM_CONTINUATIONS_H */
89e00824
ML
100
101/*
102 Local Variables:
103 c-file-style: "gnu"
104 End:
105*/