162
162
#define TAG_RAISE 0x6
163
163
#define TAG_THROW 0x7
164
164
#define TAG_FATAL 0x8
165
#define TAG_CONTCALL 0x9
166
#define TAG_THREAD 0xa
167
165
#define TAG_MASK 0xf
167
#define NEW_THROW_OBJECT(val, pt, st) \
168
((VALUE)NEW_NODE(NODE_LIT, (val), (pt), (st)))
169
#define SET_THROWOBJ_CATCH_POINT(obj, val) \
170
(RNODE((obj))->u2.value = (val))
171
#define SET_THROWOBJ_STATE(obj, val) \
172
(RNODE((obj))->u3.value = (val))
174
#define GET_THROWOBJ_VAL(obj) ((VALUE)RNODE((obj))->u1.value)
175
#define GET_THROWOBJ_CATCH_POINT(obj) ((VALUE*)RNODE((obj))->u2.value)
176
#define GET_THROWOBJ_STATE(obj) ((int)RNODE((obj))->u3.value)
169
178
#define SCOPE_TEST(f) \
170
179
(ruby_cref()->nd_visi & (f))
177
186
ruby_cref()->nd_visi = (f); \
180
void rb_thread_cleanup _((void));
181
void rb_thread_wait_other_threads _((void));
189
#define CHECK_STACK_OVERFLOW(cfp, margin) do \
190
if (((VALUE *)(cfp)->sp) + (margin) + sizeof(rb_control_frame_t) >= ((VALUE *)cfp)) { \
191
rb_exc_raise(sysstack_error); \
195
void rb_thread_cleanup(void);
196
void rb_thread_wait_other_threads(void);
183
198
int thread_set_raised(rb_thread_t *th);
184
199
int thread_reset_raised(rb_thread_t *th);
186
201
VALUE rb_f_eval(int argc, VALUE *argv, VALUE self);
187
VALUE rb_make_exception _((int argc, VALUE *argv));
202
VALUE rb_make_exception(int argc, VALUE *argv);
189
204
NORETURN(void rb_fiber_start(void));
191
NORETURN(void rb_raise_jump _((VALUE)));
192
NORETURN(void print_undef _((VALUE, ID)));
206
NORETURN(void rb_raise_jump(VALUE));
207
NORETURN(void rb_print_undef(VALUE, ID, int));
193
208
NORETURN(void vm_localjump_error(const char *, VALUE, int));
194
209
NORETURN(void vm_jump_tag_but_local_jump(int, VALUE));