Replaced external use of THREAD_LOCAL variables with functions

svn: r11607
This commit is contained in:
Kevin Tew 2008-09-09 15:55:38 +00:00
parent 7535688255
commit 8fd30fa556
21 changed files with 498 additions and 271 deletions

View File

@ -1034,18 +1034,23 @@ static int check_eventspace_inactive(void *_c)
void mred_wait_eventspace(void) void mred_wait_eventspace(void)
{ {
MrEdContext *c; MrEdContext *c;
Scheme_Thread *thread;
c = MrEdGetContext(); c = MrEdGetContext();
if (c && (c->handler_running == scheme_current_thread)) { thread = scheme_get_current_thread();
if (c && (c->handler_running == thread)) {
wxDispatchEventsUntilWaitable(check_eventspace_inactive, c, NULL); wxDispatchEventsUntilWaitable(check_eventspace_inactive, c, NULL);
} }
} }
int mred_current_thread_is_handler(void *ctx) int mred_current_thread_is_handler(void *ctx)
{ {
Scheme_Thread *thread;
thread = scheme_get_current_thread();
if (!ctx) if (!ctx)
ctx = MrEdGetContext(); ctx = MrEdGetContext();
return (((MrEdContext *)ctx)->handler_running == scheme_current_thread); return (((MrEdContext *)ctx)->handler_running == thread);
} }
int mred_in_restricted_context() int mred_in_restricted_context()
@ -1053,7 +1058,7 @@ int mred_in_restricted_context()
#ifdef NEED_HET_PARAM #ifdef NEED_HET_PARAM
/* see wxHiEventTrampoline for info on mred_het_key: */ /* see wxHiEventTrampoline for info on mred_het_key: */
Scheme_Object *v; Scheme_Object *v;
if (!scheme_current_thread) if (!scheme_get_current_thread())
return 1; return 1;
if (mred_het_key) if (mred_het_key)
@ -1098,6 +1103,8 @@ static void DoTimer(wxTimer *timer)
{ {
int once; int once;
mz_jmp_buf *save, newbuf; mz_jmp_buf *save, newbuf;
Scheme_Thread *thread;
thread = scheme_get_current_thread();
if (timer->interval == -1) if (timer->interval == -1)
return; return;
@ -1105,12 +1112,14 @@ static void DoTimer(wxTimer *timer)
once = timer->one_shot; once = timer->one_shot;
timer->one_shot = -1; timer->one_shot = -1;
save = scheme_current_thread->error_buf; save = thread->error_buf;
scheme_current_thread->error_buf = &newbuf; thread->error_buf = &newbuf;
if (!scheme_setjmp(newbuf)) if (!scheme_setjmp(newbuf))
timer->Notify(); timer->Notify();
scheme_clear_escape(); scheme_clear_escape();
scheme_current_thread->error_buf = save; thread = scheme_get_current_thread();
thread->error_buf = save;
thread = NULL;
if (!once && (timer->one_shot == -1) && (timer->interval != -1) if (!once && (timer->one_shot == -1) && (timer->interval != -1)
&& !((MrEdContext *)timer->context)->killed) && !((MrEdContext *)timer->context)->killed)
@ -1159,15 +1168,19 @@ static void GoAhead(MrEdContext *c)
} else { } else {
GC_CAN_IGNORE MrEdEvent e; GC_CAN_IGNORE MrEdEvent e;
mz_jmp_buf *save, newbuf; mz_jmp_buf *save, newbuf;
Scheme_Thread *thread;
thread = scheme_get_current_thread();
memcpy(&e, &c->event, sizeof(MrEdEvent)); memcpy(&e, &c->event, sizeof(MrEdEvent));
save = scheme_current_thread->error_buf; save = thread->error_buf;
scheme_current_thread->error_buf = &newbuf; thread->error_buf = &newbuf;
if (!scheme_setjmp(newbuf)) if (!scheme_setjmp(newbuf))
MrEdDispatchEvent(&e); MrEdDispatchEvent(&e);
scheme_clear_escape(); scheme_clear_escape();
scheme_current_thread->error_buf = save; thread = scheme_get_current_thread();
thread->error_buf = save;
thread = NULL;
} }
} }
@ -1199,15 +1212,19 @@ static void DoTheEvent(MrEdContext *c)
if (p != def_dispatch) { if (p != def_dispatch) {
Scheme_Object *a[1]; Scheme_Object *a[1];
mz_jmp_buf *save, newbuf; mz_jmp_buf *save, newbuf;
Scheme_Thread *thread;
thread = scheme_get_current_thread();
a[0] = (Scheme_Object *)c; a[0] = (Scheme_Object *)c;
save = scheme_current_thread->error_buf; save = thread->error_buf;
scheme_current_thread->error_buf = &newbuf; thread->error_buf = &newbuf;
if (!scheme_setjmp(newbuf)) if (!scheme_setjmp(newbuf))
scheme_apply_multi(p, 1, a); scheme_apply_multi(p, 1, a);
scheme_clear_escape(); scheme_clear_escape();
scheme_current_thread->error_buf = save; thread = scheme_get_current_thread();
thread->error_buf = save;
thread = NULL;
#if 0 #if 0
if (c->ready_to_go) if (c->ready_to_go)
@ -1334,10 +1351,12 @@ static Scheme_Object *MrEdDoNextEvent(MrEdContext *c, wxDispatch_Check_Fun alt,
void wxDoNextEvent() void wxDoNextEvent()
{ {
MrEdContext *c; MrEdContext *c;
Scheme_Thread *thread;
c = MrEdGetContext(); c = MrEdGetContext();
thread = scheme_get_current_thread();
if (!c->ready_to_go) if (!c->ready_to_go)
if (c->handler_running == scheme_current_thread) if (c->handler_running == thread)
MrEdDoNextEvent(c, NULL, NULL, NULL); MrEdDoNextEvent(c, NULL, NULL, NULL);
} }
@ -1362,10 +1381,12 @@ int MrEdEventReady(MrEdContext *c)
int wxEventReady() int wxEventReady()
{ {
MrEdContext *c; MrEdContext *c;
Scheme_Thread *thread;
c = MrEdGetContext(); c = MrEdGetContext();
thread = scheme_get_current_thread();
return (!c->ready_to_go return (!c->ready_to_go
&& (c->handler_running == scheme_current_thread) && (c->handler_running == thread)
&& MrEdEventReady(c)); && MrEdEventReady(c));
} }
@ -1389,7 +1410,7 @@ static void WaitForAnEvent_OrDie(MrEdContext *c)
c->waiting_for_nested = 0; c->waiting_for_nested = 0;
scheme_thread_block(0); scheme_thread_block(0);
scheme_current_thread->ran_some = 1; scheme_set_current_thread_ran_some();
/* Go back to sleep: */ /* Go back to sleep: */
c->ready = 1; c->ready = 1;
@ -1435,7 +1456,7 @@ static Scheme_Object *handle_events(void *cx, int, Scheme_Object **)
fprintf(stderr, "new thread\n"); fprintf(stderr, "new thread\n");
#endif #endif
this_thread = scheme_current_thread; this_thread = scheme_get_current_thread();
if (!this_thread->name) { if (!this_thread->name) {
Scheme_Object *tn; Scheme_Object *tn;
tn = scheme_intern_symbol("handler"); tn = scheme_intern_symbol("handler");
@ -1447,7 +1468,7 @@ static Scheme_Object *handle_events(void *cx, int, Scheme_Object **)
c->suspended = 0; c->suspended = 0;
c->ready = 0; c->ready = 0;
scheme_current_thread->error_buf = &newbuf; this_thread->error_buf = &newbuf;
if (!scheme_setjmp(newbuf)) { if (!scheme_setjmp(newbuf)) {
if (!TheMrEdApp->initialized) if (!TheMrEdApp->initialized)
TheMrEdApp->RealInit(); TheMrEdApp->RealInit();
@ -1512,7 +1533,7 @@ static int try_q_callback(Scheme_Object *do_it, int hi)
return 1; return 1;
if (SCHEME_FALSEP(do_it)) if (SCHEME_FALSEP(do_it))
scheme_current_thread->ran_some = 1; scheme_set_current_thread_ran_some();
if (c == mred_main_context) if (c == mred_main_context)
check_q_callbacks(hi, MrEdSameContext, c, 0); check_q_callbacks(hi, MrEdSameContext, c, 0);
@ -1543,7 +1564,7 @@ static int try_dispatch(Scheme_Object *do_it)
if (!do_it) if (!do_it)
return 1; return 1;
if (SCHEME_FALSEP(do_it)) if (SCHEME_FALSEP(do_it))
scheme_current_thread->ran_some = 1; scheme_set_current_thread_ran_some();
c = (MrEdContext *)timer->context; c = (MrEdContext *)timer->context;
@ -1579,7 +1600,7 @@ static int try_dispatch(Scheme_Object *do_it)
return 1; return 1;
if (SCHEME_FALSEP(do_it)) if (SCHEME_FALSEP(do_it))
scheme_current_thread->ran_some = 1; scheme_set_current_thread_ran_some();
if (c) { if (c) {
memcpy(&c->event, &e, sizeof(MrEdEvent)); memcpy(&c->event, &e, sizeof(MrEdEvent));
@ -1671,14 +1692,17 @@ void wxDoEvents()
if (!try_dispatch(scheme_true)) { if (!try_dispatch(scheme_true)) {
do { do {
scheme_current_thread->block_descriptor = -1; Scheme_Thread *thread;
scheme_current_thread->blocker = NULL; thread = scheme_get_current_thread();
scheme_current_thread->block_check = CAST_BLKCHK try_dispatch; thread->block_descriptor = -1;
scheme_current_thread->block_needs_wakeup = CAST_WU wakeup_on_dispatch; thread->blocker = NULL;
thread->block_check = CAST_BLKCHK try_dispatch;
thread->block_needs_wakeup = CAST_WU wakeup_on_dispatch;
scheme_thread_block(0); scheme_thread_block(0);
scheme_current_thread->block_descriptor = 0; thread = scheme_get_current_thread();
thread->block_descriptor = 0;
/* Sets ran_some if it succeeds: */ /* Sets ran_some if it succeeds: */
if (try_dispatch(scheme_false)) if (try_dispatch(scheme_false))
break; break;
@ -1690,14 +1714,16 @@ Scheme_Object *wxDispatchEventsUntilWaitable(wxDispatch_Check_Fun f, void *data,
{ {
MrEdContext *c; MrEdContext *c;
Scheme_Object *result = scheme_void; Scheme_Object *result = scheme_void;
Scheme_Thread *thread;
c = MrEdGetContext(); c = MrEdGetContext();
#ifdef wx_mac #ifdef wx_mac
wxMouseEventHandled(); wxMouseEventHandled();
#endif #endif
thread = scheme_get_current_thread();
if (c->ready_to_go if (c->ready_to_go
|| (c->handler_running != scheme_current_thread)) { || (c->handler_running != thread)) {
/* This is not the handler thread or an event still hasn't been /* This is not the handler thread or an event still hasn't been
dispatched. Wait. */ dispatched. Wait. */
if (w) { if (w) {
@ -1956,13 +1982,16 @@ static void remove_q_callback(Q_Callback_Set *cs, Q_Callback *cb)
static void call_one_callback(Q_Callback * volatile cb) static void call_one_callback(Q_Callback * volatile cb)
{ {
mz_jmp_buf *save, newbuf; mz_jmp_buf *save, newbuf;
Scheme_Thread *thread;
thread = scheme_get_current_thread();
save = scheme_current_thread->error_buf; save = thread->error_buf;
scheme_current_thread->error_buf = &newbuf; thread->error_buf = &newbuf;
if (!scheme_setjmp(newbuf)) if (!scheme_setjmp(newbuf))
scheme_apply_multi(cb->callback, 0, NULL); scheme_apply_multi(cb->callback, 0, NULL);
scheme_clear_escape(); scheme_clear_escape();
scheme_current_thread->error_buf = save; thread = scheme_get_current_thread();
thread->error_buf = save;
} }
static MrEdContext *check_q_callbacks(int hi, int (*test)(MrEdContext *, MrEdContext *), static MrEdContext *check_q_callbacks(int hi, int (*test)(MrEdContext *, MrEdContext *),
@ -2042,7 +2071,7 @@ static void MrEdQueueWindowCallback(wxWindow *wx_window, Scheme_Closed_Prim *scp
Q_Callback *cb; Q_Callback *cb;
Scheme_Object *p; Scheme_Object *p;
if (!scheme_current_thread) { if (!scheme_get_current_thread()) {
/* Scheme hasn't started yet, so call directly. /* Scheme hasn't started yet, so call directly.
We might get here for an update to the stdio We might get here for an update to the stdio
window, for example. */ window, for example. */
@ -2637,25 +2666,30 @@ static Scheme_Object *console_reading;
static void add_console_reading() static void add_console_reading()
{ {
Scheme_Thread *thread;
thread = scheme_get_current_thread();
if (!console_reading) { if (!console_reading) {
wxREGGLOB(console_reading); wxREGGLOB(console_reading);
console_reading = scheme_null; console_reading = scheme_null;
} }
console_reading = scheme_make_pair((Scheme_Object *)scheme_current_thread, console_reading = scheme_make_pair((Scheme_Object *)thread,
console_reading); console_reading);
} }
static void remove_console_reading() static void remove_console_reading()
{ {
Scheme_Object *p, *prev = NULL; Scheme_Object *p, *prev = NULL;
Scheme_Thread *thread;
thread = scheme_get_current_thread();
if (!console_reading) if (!console_reading)
return; return;
p = console_reading; p = console_reading;
while (SCHEME_PAIRP(p)) { while (SCHEME_PAIRP(p)) {
if (SAME_OBJ(SCHEME_CAR(p), (Scheme_Object *)scheme_current_thread)) { if (SAME_OBJ(SCHEME_CAR(p), (Scheme_Object *)thread)) {
if (prev) if (prev)
SCHEME_CDR(prev) = SCHEME_CDR(p); SCHEME_CDR(prev) = SCHEME_CDR(p);
else else
@ -3234,7 +3268,11 @@ static Scheme_Env *setup_basic_env()
/* This handler_running pointer gets reset later. Do /* This handler_running pointer gets reset later. Do
we really need to set it now? */ we really need to set it now? */
mred_main_context->handler_running = scheme_current_thread; {
Scheme_Thread *thread;
thread = scheme_get_current_thread();
mred_main_context->handler_running = thread;
}
mzsleep = scheme_sleep; mzsleep = scheme_sleep;
scheme_sleep = CAST_SLEEP MrEdSleep; scheme_sleep = CAST_SLEEP MrEdSleep;
@ -3444,11 +3482,14 @@ static void on_main_killed(Scheme_Thread *p)
void MrEdApp::RealInit(void) void MrEdApp::RealInit(void)
{ {
Scheme_Thread *thread;
thread = scheme_get_current_thread();
initialized = 1; initialized = 1;
wxMediaIOCheckLSB(/* scheme_console_printf */); wxMediaIOCheckLSB(/* scheme_console_printf */);
scheme_current_thread->on_kill = CAST_TOK on_main_killed; thread->on_kill = CAST_TOK on_main_killed;
#if WINDOW_STDIO #if WINDOW_STDIO
if (!wx_in_terminal) if (!wx_in_terminal)
scheme_exit = CAST_EXIT MrEdExit; scheme_exit = CAST_EXIT MrEdExit;
@ -3463,7 +3504,7 @@ void MrEdApp::RealInit(void)
if (!exit_val) if (!exit_val)
exit_val = mred_finish_cmd_line_run(); exit_val = mred_finish_cmd_line_run();
scheme_kill_thread(scheme_current_thread); scheme_kill_thread(thread);
} }
#ifdef wx_mac #ifdef wx_mac
@ -3876,6 +3917,8 @@ static void wxDo(Scheme_Object *proc, int argc, Scheme_Object **argv)
{ {
mz_jmp_buf * volatile save, newbuf; mz_jmp_buf * volatile save, newbuf;
volatile int block_descriptor; volatile int block_descriptor;
Scheme_Thread *thread;
thread = scheme_get_current_thread();
if (!proc) { if (!proc) {
/* Oops --- too early. */ /* Oops --- too early. */
@ -3885,13 +3928,13 @@ static void wxDo(Scheme_Object *proc, int argc, Scheme_Object **argv)
/* wxDo might be called when MrEd is sleeping (i.e., /* wxDo might be called when MrEd is sleeping (i.e.,
blocked on WNE in OS X). Since we're hijacking the blocked on WNE in OS X). Since we're hijacking the
thread, save an restore block information. */ thread, save an restore block information. */
block_descriptor = scheme_current_thread->block_descriptor; block_descriptor = thread->block_descriptor;
scheme_current_thread->block_descriptor = 0; thread->block_descriptor = 0;
scheme_start_atomic(); scheme_start_atomic();
save = scheme_current_thread->error_buf; save = thread->error_buf;
scheme_current_thread->error_buf = &newbuf; thread->error_buf = &newbuf;
if (scheme_setjmp(newbuf)) { if (scheme_setjmp(newbuf)) {
scheme_clear_escape(); scheme_clear_escape();
@ -3899,8 +3942,9 @@ static void wxDo(Scheme_Object *proc, int argc, Scheme_Object **argv)
scheme_apply(proc, argc, argv); scheme_apply(proc, argc, argv);
} }
scheme_current_thread->error_buf = save; thread = scheme_get_current_thread();
scheme_current_thread->block_descriptor = block_descriptor; thread->error_buf = save;
thread->block_descriptor = block_descriptor;
scheme_end_atomic_no_swap(); scheme_end_atomic_no_swap();
} }

View File

@ -1635,7 +1635,12 @@ Bool wxMediaEdit::CheckFlow(double maxw, wxDC *dc, double Y,
hadNewline = FALSE; hadNewline = FALSE;
} }
if (scheme_current_thread) SCHEME_USE_FUEL(1); {
Scheme_Thread *thread;
thread = scheme_get_current_thread();
if (thread) SCHEME_USE_FUEL(1);
thread = NULL;
}
w = 0.0; w = 0.0;
snip->GetExtent(dc, _totalWidth, Y, &w); snip->GetExtent(dc, _totalWidth, Y, &w);

View File

@ -169,6 +169,18 @@ os_wxButton::~os_wxButton()
static Scheme_Object *os_wxButtonOnDropFile(int n, Scheme_Object *p[]); static Scheme_Object *os_wxButtonOnDropFile(int n, Scheme_Object *p[]);
#define ESCAPE_BLOCK(return_code) \
thread = scheme_get_current_thread(); \
savebuf = thread->error_buf; \
thread->error_buf = &newbuf; \
if (scheme_setjmp(newbuf)) \
{ \
thread = scheme_get_current_thread(); \
thread->error_buf = savebuf; \
scheme_clear_escape(); \
return return_code; \
}
void os_wxButton::OnDropFile(epathname x0) void os_wxButton::OnDropFile(epathname x0)
{ {
Scheme_Object *p[POFFSET+1] INIT_NULLED_ARRAY({ NULLED_OUT INA_comma NULLED_OUT }); Scheme_Object *p[POFFSET+1] INIT_NULLED_ARRAY({ NULLED_OUT INA_comma NULLED_OUT });
@ -192,12 +204,14 @@ void os_wxButton::OnDropFile(epathname x0)
READY_TO_RETURN; ASSELF wxButton::OnDropFile(x0); READY_TO_RETURN; ASSELF wxButton::OnDropFile(x0);
} else { } else {
mz_jmp_buf *savebuf, newbuf; mz_jmp_buf *savebuf, newbuf;
Scheme_Thread *thread;
p[POFFSET+0] = WITH_VAR_STACK(objscheme_bundle_pathname((char *)x0)); p[POFFSET+0] = WITH_VAR_STACK(objscheme_bundle_pathname((char *)x0));
savebuf = scheme_current_thread->error_buf; scheme_current_thread->error_buf = &newbuf; if (scheme_setjmp(newbuf)) { scheme_current_thread->error_buf = savebuf; scheme_clear_escape(); return; }
ESCAPE_BLOCK(/*empty*/)
p[0] = (Scheme_Object *) ASSELF __gc_external; p[0] = (Scheme_Object *) ASSELF __gc_external;
v = WITH_VAR_STACK(scheme_apply(method, POFFSET+1, p)); v = WITH_VAR_STACK(scheme_apply(method, POFFSET+1, p));
scheme_current_thread->error_buf = savebuf; thread->error_buf = savebuf;
READY_TO_RETURN; READY_TO_RETURN;
} }
@ -229,13 +243,14 @@ Bool os_wxButton::PreOnEvent(class wxWindow* x0, class wxMouseEvent* x1)
return FALSE; return FALSE;
} else { } else {
mz_jmp_buf *savebuf, newbuf; mz_jmp_buf *savebuf, newbuf;
Scheme_Thread *thread;
p[POFFSET+0] = WITH_VAR_STACK(objscheme_bundle_wxWindow(x0)); p[POFFSET+0] = WITH_VAR_STACK(objscheme_bundle_wxWindow(x0));
p[POFFSET+1] = WITH_VAR_STACK(objscheme_bundle_wxMouseEvent(x1)); p[POFFSET+1] = WITH_VAR_STACK(objscheme_bundle_wxMouseEvent(x1));
savebuf = scheme_current_thread->error_buf; scheme_current_thread->error_buf = &newbuf; if (scheme_setjmp(newbuf)) { scheme_current_thread->error_buf = savebuf; scheme_clear_escape(); return 1; } ESCAPE_BLOCK(1)
p[0] = (Scheme_Object *) ASSELF __gc_external; p[0] = (Scheme_Object *) ASSELF __gc_external;
v = WITH_VAR_STACK(scheme_apply(method, POFFSET+2, p)); v = WITH_VAR_STACK(scheme_apply(method, POFFSET+2, p));
scheme_current_thread->error_buf = savebuf; thread->error_buf = savebuf;
{ {
Bool resval; Bool resval;
@ -272,13 +287,14 @@ Bool os_wxButton::PreOnChar(class wxWindow* x0, class wxKeyEvent* x1)
return FALSE; return FALSE;
} else { } else {
mz_jmp_buf *savebuf, newbuf; mz_jmp_buf *savebuf, newbuf;
Scheme_Thread *thread;
p[POFFSET+0] = WITH_VAR_STACK(objscheme_bundle_wxWindow(x0)); p[POFFSET+0] = WITH_VAR_STACK(objscheme_bundle_wxWindow(x0));
p[POFFSET+1] = WITH_VAR_STACK(objscheme_bundle_wxKeyEvent(x1)); p[POFFSET+1] = WITH_VAR_STACK(objscheme_bundle_wxKeyEvent(x1));
savebuf = scheme_current_thread->error_buf; scheme_current_thread->error_buf = &newbuf; if (scheme_setjmp(newbuf)) { scheme_current_thread->error_buf = savebuf; scheme_clear_escape(); return 1; } ESCAPE_BLOCK(1)
p[0] = (Scheme_Object *) ASSELF __gc_external; p[0] = (Scheme_Object *) ASSELF __gc_external;
v = WITH_VAR_STACK(scheme_apply(method, POFFSET+2, p)); v = WITH_VAR_STACK(scheme_apply(method, POFFSET+2, p));
scheme_current_thread->error_buf = savebuf; thread->error_buf = savebuf;
{ {
Bool resval; Bool resval;
@ -349,11 +365,12 @@ void os_wxButton::OnSetFocus()
READY_TO_RETURN; ASSELF wxButton::OnSetFocus(); READY_TO_RETURN; ASSELF wxButton::OnSetFocus();
} else { } else {
mz_jmp_buf *savebuf, newbuf; mz_jmp_buf *savebuf, newbuf;
savebuf = scheme_current_thread->error_buf; scheme_current_thread->error_buf = &newbuf; if (scheme_setjmp(newbuf)) { scheme_current_thread->error_buf = savebuf; scheme_clear_escape(); return; } Scheme_Thread *thread;
ESCAPE_BLOCK(/*empty*/)
p[0] = (Scheme_Object *) ASSELF __gc_external; p[0] = (Scheme_Object *) ASSELF __gc_external;
v = WITH_VAR_STACK(scheme_apply(method, POFFSET+0, p)); v = WITH_VAR_STACK(scheme_apply(method, POFFSET+0, p));
scheme_current_thread->error_buf = savebuf; thread->error_buf = savebuf;
READY_TO_RETURN; READY_TO_RETURN;
} }
@ -383,11 +400,12 @@ void os_wxButton::OnKillFocus()
READY_TO_RETURN; ASSELF wxButton::OnKillFocus(); READY_TO_RETURN; ASSELF wxButton::OnKillFocus();
} else { } else {
mz_jmp_buf *savebuf, newbuf; mz_jmp_buf *savebuf, newbuf;
savebuf = scheme_current_thread->error_buf; scheme_current_thread->error_buf = &newbuf; if (scheme_setjmp(newbuf)) { scheme_current_thread->error_buf = savebuf; scheme_clear_escape(); return; } Scheme_Thread *thread;
ESCAPE_BLOCK(/*empty*/)
p[0] = (Scheme_Object *) ASSELF __gc_external; p[0] = (Scheme_Object *) ASSELF __gc_external;
v = WITH_VAR_STACK(scheme_apply(method, POFFSET+0, p)); v = WITH_VAR_STACK(scheme_apply(method, POFFSET+0, p));
scheme_current_thread->error_buf = savebuf; thread->error_buf = savebuf;
READY_TO_RETURN; READY_TO_RETURN;
} }
@ -853,6 +871,7 @@ static void CB_TOSCHEME(CB_REALCLASS *realobj, wxCommandEvent *event)
Scheme_Object *p[2]; Scheme_Object *p[2];
Scheme_Class_Object *obj; Scheme_Class_Object *obj;
mz_jmp_buf savebuf; mz_jmp_buf savebuf;
Scheme_Thread *thread;
SETUP_VAR_STACK(4); SETUP_VAR_STACK(4);
VAR_STACK_PUSH(0, obj); VAR_STACK_PUSH(0, obj);
VAR_STACK_PUSH(1, event); VAR_STACK_PUSH(1, event);
@ -872,12 +891,14 @@ static void CB_TOSCHEME(CB_REALCLASS *realobj, wxCommandEvent *event)
p[0] = (Scheme_Object *)obj; p[0] = (Scheme_Object *)obj;
p[1] = WITH_VAR_STACK(objscheme_bundle_wxCommandEvent(event)); p[1] = WITH_VAR_STACK(objscheme_bundle_wxCommandEvent(event));
COPY_JMPBUF(savebuf, scheme_error_buf); thread = scheme_get_current_thread();
COPY_JMPBUF(savebuf, *(thread->error_buf));
if (!scheme_setjmp(scheme_error_buf)) if (!scheme_setjmp(*(thread->error_buf)))
WITH_VAR_STACK(scheme_apply_multi(((CALLBACKCLASS *)obj->primdata)->callback_closure, 2, p)); WITH_VAR_STACK(scheme_apply_multi(((CALLBACKCLASS *)obj->primdata)->callback_closure, 2, p));
COPY_JMPBUF(scheme_error_buf, savebuf); thread = scheme_get_current_thread();
COPY_JMPBUF(*(thread->error_buf), savebuf);
READY_TO_RETURN; READY_TO_RETURN;
} }

View File

@ -315,12 +315,13 @@ void os_wxChoice::OnDropFile(epathname x0)
READY_TO_RETURN; ASSELF wxChoice::OnDropFile(x0); READY_TO_RETURN; ASSELF wxChoice::OnDropFile(x0);
} else { } else {
mz_jmp_buf *savebuf, newbuf; mz_jmp_buf *savebuf, newbuf;
Scheme_Thread *thread;
p[POFFSET+0] = WITH_VAR_STACK(objscheme_bundle_pathname((char *)x0)); p[POFFSET+0] = WITH_VAR_STACK(objscheme_bundle_pathname((char *)x0));
savebuf = scheme_current_thread->error_buf; scheme_current_thread->error_buf = &newbuf; if (scheme_setjmp(newbuf)) { scheme_current_thread->error_buf = savebuf; scheme_clear_escape(); return; } ESCAPE_BLOCK(/*empty*/)
p[0] = (Scheme_Object *) ASSELF __gc_external; p[0] = (Scheme_Object *) ASSELF __gc_external;
v = WITH_VAR_STACK(scheme_apply(method, POFFSET+1, p)); v = WITH_VAR_STACK(scheme_apply(method, POFFSET+1, p));
scheme_current_thread->error_buf = savebuf; thread->error_buf = savebuf;
READY_TO_RETURN; READY_TO_RETURN;
} }
@ -352,13 +353,14 @@ Bool os_wxChoice::PreOnEvent(class wxWindow* x0, class wxMouseEvent* x1)
return FALSE; return FALSE;
} else { } else {
mz_jmp_buf *savebuf, newbuf; mz_jmp_buf *savebuf, newbuf;
Scheme_Thread *thread;
p[POFFSET+0] = WITH_VAR_STACK(objscheme_bundle_wxWindow(x0)); p[POFFSET+0] = WITH_VAR_STACK(objscheme_bundle_wxWindow(x0));
p[POFFSET+1] = WITH_VAR_STACK(objscheme_bundle_wxMouseEvent(x1)); p[POFFSET+1] = WITH_VAR_STACK(objscheme_bundle_wxMouseEvent(x1));
savebuf = scheme_current_thread->error_buf; scheme_current_thread->error_buf = &newbuf; if (scheme_setjmp(newbuf)) { scheme_current_thread->error_buf = savebuf; scheme_clear_escape(); return 1; } ESCAPE_BLOCK(1)
p[0] = (Scheme_Object *) ASSELF __gc_external; p[0] = (Scheme_Object *) ASSELF __gc_external;
v = WITH_VAR_STACK(scheme_apply(method, POFFSET+2, p)); v = WITH_VAR_STACK(scheme_apply(method, POFFSET+2, p));
scheme_current_thread->error_buf = savebuf; thread->error_buf = savebuf;
{ {
Bool resval; Bool resval;
@ -395,13 +397,14 @@ Bool os_wxChoice::PreOnChar(class wxWindow* x0, class wxKeyEvent* x1)
return FALSE; return FALSE;
} else { } else {
mz_jmp_buf *savebuf, newbuf; mz_jmp_buf *savebuf, newbuf;
Scheme_Thread *thread;
p[POFFSET+0] = WITH_VAR_STACK(objscheme_bundle_wxWindow(x0)); p[POFFSET+0] = WITH_VAR_STACK(objscheme_bundle_wxWindow(x0));
p[POFFSET+1] = WITH_VAR_STACK(objscheme_bundle_wxKeyEvent(x1)); p[POFFSET+1] = WITH_VAR_STACK(objscheme_bundle_wxKeyEvent(x1));
savebuf = scheme_current_thread->error_buf; scheme_current_thread->error_buf = &newbuf; if (scheme_setjmp(newbuf)) { scheme_current_thread->error_buf = savebuf; scheme_clear_escape(); return 1; } ESCAPE_BLOCK(1)
p[0] = (Scheme_Object *) ASSELF __gc_external; p[0] = (Scheme_Object *) ASSELF __gc_external;
v = WITH_VAR_STACK(scheme_apply(method, POFFSET+2, p)); v = WITH_VAR_STACK(scheme_apply(method, POFFSET+2, p));
scheme_current_thread->error_buf = savebuf; thread->error_buf = savebuf;
{ {
Bool resval; Bool resval;
@ -472,11 +475,12 @@ void os_wxChoice::OnSetFocus()
READY_TO_RETURN; ASSELF wxChoice::OnSetFocus(); READY_TO_RETURN; ASSELF wxChoice::OnSetFocus();
} else { } else {
mz_jmp_buf *savebuf, newbuf; mz_jmp_buf *savebuf, newbuf;
savebuf = scheme_current_thread->error_buf; scheme_current_thread->error_buf = &newbuf; if (scheme_setjmp(newbuf)) { scheme_current_thread->error_buf = savebuf; scheme_clear_escape(); return; } Scheme_Thread *thread;
ESCAPE_BLOCK(/*empty*/)
p[0] = (Scheme_Object *) ASSELF __gc_external; p[0] = (Scheme_Object *) ASSELF __gc_external;
v = WITH_VAR_STACK(scheme_apply(method, POFFSET+0, p)); v = WITH_VAR_STACK(scheme_apply(method, POFFSET+0, p));
scheme_current_thread->error_buf = savebuf; thread->error_buf = savebuf;
READY_TO_RETURN; READY_TO_RETURN;
} }
@ -506,11 +510,12 @@ void os_wxChoice::OnKillFocus()
READY_TO_RETURN; ASSELF wxChoice::OnKillFocus(); READY_TO_RETURN; ASSELF wxChoice::OnKillFocus();
} else { } else {
mz_jmp_buf *savebuf, newbuf; mz_jmp_buf *savebuf, newbuf;
savebuf = scheme_current_thread->error_buf; scheme_current_thread->error_buf = &newbuf; if (scheme_setjmp(newbuf)) { scheme_current_thread->error_buf = savebuf; scheme_clear_escape(); return; } Scheme_Thread *thread;
ESCAPE_BLOCK(/*empty*/)
p[0] = (Scheme_Object *) ASSELF __gc_external; p[0] = (Scheme_Object *) ASSELF __gc_external;
v = WITH_VAR_STACK(scheme_apply(method, POFFSET+0, p)); v = WITH_VAR_STACK(scheme_apply(method, POFFSET+0, p));
scheme_current_thread->error_buf = savebuf; thread->error_buf = savebuf;
READY_TO_RETURN; READY_TO_RETURN;
} }
@ -988,6 +993,7 @@ static void CB_TOSCHEME(CB_REALCLASS *realobj, wxCommandEvent *event)
Scheme_Object *p[2]; Scheme_Object *p[2];
Scheme_Class_Object *obj; Scheme_Class_Object *obj;
mz_jmp_buf savebuf; mz_jmp_buf savebuf;
Scheme_Thread *thread;
SETUP_VAR_STACK(4); SETUP_VAR_STACK(4);
VAR_STACK_PUSH(0, obj); VAR_STACK_PUSH(0, obj);
VAR_STACK_PUSH(1, event); VAR_STACK_PUSH(1, event);
@ -1007,12 +1013,14 @@ static void CB_TOSCHEME(CB_REALCLASS *realobj, wxCommandEvent *event)
p[0] = (Scheme_Object *)obj; p[0] = (Scheme_Object *)obj;
p[1] = WITH_VAR_STACK(objscheme_bundle_wxCommandEvent(event)); p[1] = WITH_VAR_STACK(objscheme_bundle_wxCommandEvent(event));
COPY_JMPBUF(savebuf, scheme_error_buf); thread = scheme_get_current_thread();
COPY_JMPBUF(savebuf, *(thread->error_buf));
if (!scheme_setjmp(scheme_error_buf)) if (!scheme_setjmp(*(thread->error_buf)))
WITH_VAR_STACK(scheme_apply_multi(((CALLBACKCLASS *)obj->primdata)->callback_closure, 2, p)); WITH_VAR_STACK(scheme_apply_multi(((CALLBACKCLASS *)obj->primdata)->callback_closure, 2, p));
COPY_JMPBUF(scheme_error_buf, savebuf); thread = scheme_get_current_thread();
COPY_JMPBUF(*(thread->error_buf), savebuf);
READY_TO_RETURN; READY_TO_RETURN;
} }

View File

@ -196,12 +196,13 @@ void os_wxCheckBox::OnDropFile(epathname x0)
READY_TO_RETURN; ASSELF wxCheckBox::OnDropFile(x0); READY_TO_RETURN; ASSELF wxCheckBox::OnDropFile(x0);
} else { } else {
mz_jmp_buf *savebuf, newbuf; mz_jmp_buf *savebuf, newbuf;
Scheme_Thread *thread;
p[POFFSET+0] = WITH_VAR_STACK(objscheme_bundle_pathname((char *)x0)); p[POFFSET+0] = WITH_VAR_STACK(objscheme_bundle_pathname((char *)x0));
savebuf = scheme_current_thread->error_buf; scheme_current_thread->error_buf = &newbuf; if (scheme_setjmp(newbuf)) { scheme_current_thread->error_buf = savebuf; scheme_clear_escape(); return; } ESCAPE_BLOCK(/*empty*/)
p[0] = (Scheme_Object *) ASSELF __gc_external; p[0] = (Scheme_Object *) ASSELF __gc_external;
v = WITH_VAR_STACK(scheme_apply(method, POFFSET+1, p)); v = WITH_VAR_STACK(scheme_apply(method, POFFSET+1, p));
scheme_current_thread->error_buf = savebuf; thread->error_buf = savebuf;
READY_TO_RETURN; READY_TO_RETURN;
} }
@ -233,13 +234,14 @@ Bool os_wxCheckBox::PreOnEvent(class wxWindow* x0, class wxMouseEvent* x1)
return FALSE; return FALSE;
} else { } else {
mz_jmp_buf *savebuf, newbuf; mz_jmp_buf *savebuf, newbuf;
Scheme_Thread *thread;
p[POFFSET+0] = WITH_VAR_STACK(objscheme_bundle_wxWindow(x0)); p[POFFSET+0] = WITH_VAR_STACK(objscheme_bundle_wxWindow(x0));
p[POFFSET+1] = WITH_VAR_STACK(objscheme_bundle_wxMouseEvent(x1)); p[POFFSET+1] = WITH_VAR_STACK(objscheme_bundle_wxMouseEvent(x1));
savebuf = scheme_current_thread->error_buf; scheme_current_thread->error_buf = &newbuf; if (scheme_setjmp(newbuf)) { scheme_current_thread->error_buf = savebuf; scheme_clear_escape(); return 1; } ESCAPE_BLOCK(1)
p[0] = (Scheme_Object *) ASSELF __gc_external; p[0] = (Scheme_Object *) ASSELF __gc_external;
v = WITH_VAR_STACK(scheme_apply(method, POFFSET+2, p)); v = WITH_VAR_STACK(scheme_apply(method, POFFSET+2, p));
scheme_current_thread->error_buf = savebuf; thread->error_buf = savebuf;
{ {
Bool resval; Bool resval;
@ -276,13 +278,14 @@ Bool os_wxCheckBox::PreOnChar(class wxWindow* x0, class wxKeyEvent* x1)
return FALSE; return FALSE;
} else { } else {
mz_jmp_buf *savebuf, newbuf; mz_jmp_buf *savebuf, newbuf;
Scheme_Thread *thread;
p[POFFSET+0] = WITH_VAR_STACK(objscheme_bundle_wxWindow(x0)); p[POFFSET+0] = WITH_VAR_STACK(objscheme_bundle_wxWindow(x0));
p[POFFSET+1] = WITH_VAR_STACK(objscheme_bundle_wxKeyEvent(x1)); p[POFFSET+1] = WITH_VAR_STACK(objscheme_bundle_wxKeyEvent(x1));
savebuf = scheme_current_thread->error_buf; scheme_current_thread->error_buf = &newbuf; if (scheme_setjmp(newbuf)) { scheme_current_thread->error_buf = savebuf; scheme_clear_escape(); return 1; } ESCAPE_BLOCK(1);
p[0] = (Scheme_Object *) ASSELF __gc_external; p[0] = (Scheme_Object *) ASSELF __gc_external;
v = WITH_VAR_STACK(scheme_apply(method, POFFSET+2, p)); v = WITH_VAR_STACK(scheme_apply(method, POFFSET+2, p));
scheme_current_thread->error_buf = savebuf; thread->error_buf = savebuf;
{ {
Bool resval; Bool resval;
@ -353,11 +356,12 @@ void os_wxCheckBox::OnSetFocus()
READY_TO_RETURN; ASSELF wxCheckBox::OnSetFocus(); READY_TO_RETURN; ASSELF wxCheckBox::OnSetFocus();
} else { } else {
mz_jmp_buf *savebuf, newbuf; mz_jmp_buf *savebuf, newbuf;
savebuf = scheme_current_thread->error_buf; scheme_current_thread->error_buf = &newbuf; if (scheme_setjmp(newbuf)) { scheme_current_thread->error_buf = savebuf; scheme_clear_escape(); return; } Scheme_Thread *thread;
ESCAPE_BLOCK(/*empty*/)
p[0] = (Scheme_Object *) ASSELF __gc_external; p[0] = (Scheme_Object *) ASSELF __gc_external;
v = WITH_VAR_STACK(scheme_apply(method, POFFSET+0, p)); v = WITH_VAR_STACK(scheme_apply(method, POFFSET+0, p));
scheme_current_thread->error_buf = savebuf; thread->error_buf = savebuf;
READY_TO_RETURN; READY_TO_RETURN;
} }
@ -387,11 +391,12 @@ void os_wxCheckBox::OnKillFocus()
READY_TO_RETURN; ASSELF wxCheckBox::OnKillFocus(); READY_TO_RETURN; ASSELF wxCheckBox::OnKillFocus();
} else { } else {
mz_jmp_buf *savebuf, newbuf; mz_jmp_buf *savebuf, newbuf;
savebuf = scheme_current_thread->error_buf; scheme_current_thread->error_buf = &newbuf; if (scheme_setjmp(newbuf)) { scheme_current_thread->error_buf = savebuf; scheme_clear_escape(); return; } Scheme_Thread *thread;
ESCAPE_BLOCK(/*empty*/)
p[0] = (Scheme_Object *) ASSELF __gc_external; p[0] = (Scheme_Object *) ASSELF __gc_external;
v = WITH_VAR_STACK(scheme_apply(method, POFFSET+0, p)); v = WITH_VAR_STACK(scheme_apply(method, POFFSET+0, p));
scheme_current_thread->error_buf = savebuf; thread->error_buf = savebuf;
READY_TO_RETURN; READY_TO_RETURN;
} }
@ -878,6 +883,7 @@ static void CB_TOSCHEME(CB_REALCLASS *realobj, wxCommandEvent *event)
Scheme_Object *p[2]; Scheme_Object *p[2];
Scheme_Class_Object *obj; Scheme_Class_Object *obj;
mz_jmp_buf savebuf; mz_jmp_buf savebuf;
Scheme_Thread *thread;
SETUP_VAR_STACK(4); SETUP_VAR_STACK(4);
VAR_STACK_PUSH(0, obj); VAR_STACK_PUSH(0, obj);
VAR_STACK_PUSH(1, event); VAR_STACK_PUSH(1, event);
@ -897,12 +903,14 @@ static void CB_TOSCHEME(CB_REALCLASS *realobj, wxCommandEvent *event)
p[0] = (Scheme_Object *)obj; p[0] = (Scheme_Object *)obj;
p[1] = WITH_VAR_STACK(objscheme_bundle_wxCommandEvent(event)); p[1] = WITH_VAR_STACK(objscheme_bundle_wxCommandEvent(event));
COPY_JMPBUF(savebuf, scheme_error_buf); thread = scheme_get_current_thread();
COPY_JMPBUF(savebuf, *(thread->error_buf));
if (!scheme_setjmp(scheme_error_buf)) if (!scheme_setjmp(*(thread->error_buf)))
WITH_VAR_STACK(scheme_apply_multi(((CALLBACKCLASS *)obj->primdata)->callback_closure, 2, p)); WITH_VAR_STACK(scheme_apply_multi(((CALLBACKCLASS *)obj->primdata)->callback_closure, 2, p));
COPY_JMPBUF(scheme_error_buf, savebuf); thread = scheme_get_current_thread();
COPY_JMPBUF(*(thread->error_buf), savebuf);
READY_TO_RETURN; READY_TO_RETURN;
} }

View File

@ -266,12 +266,13 @@ void os_wxCanvas::OnDropFile(epathname x0)
READY_TO_RETURN; ASSELF wxCanvas::OnDropFile(x0); READY_TO_RETURN; ASSELF wxCanvas::OnDropFile(x0);
} else { } else {
mz_jmp_buf *savebuf, newbuf; mz_jmp_buf *savebuf, newbuf;
Scheme_Thread *thread;
p[POFFSET+0] = WITH_VAR_STACK(objscheme_bundle_pathname((char *)x0)); p[POFFSET+0] = WITH_VAR_STACK(objscheme_bundle_pathname((char *)x0));
savebuf = scheme_current_thread->error_buf; scheme_current_thread->error_buf = &newbuf; if (scheme_setjmp(newbuf)) { scheme_current_thread->error_buf = savebuf; scheme_clear_escape(); return; } ESCAPE_BLOCK(/*empty*/)
p[0] = (Scheme_Object *) ASSELF __gc_external; p[0] = (Scheme_Object *) ASSELF __gc_external;
v = WITH_VAR_STACK(scheme_apply(method, POFFSET+1, p)); v = WITH_VAR_STACK(scheme_apply(method, POFFSET+1, p));
scheme_current_thread->error_buf = savebuf; thread->error_buf = savebuf;
READY_TO_RETURN; READY_TO_RETURN;
} }
@ -303,13 +304,14 @@ Bool os_wxCanvas::PreOnEvent(class wxWindow* x0, class wxMouseEvent* x1)
return FALSE; return FALSE;
} else { } else {
mz_jmp_buf *savebuf, newbuf; mz_jmp_buf *savebuf, newbuf;
Scheme_Thread *thread;
p[POFFSET+0] = WITH_VAR_STACK(objscheme_bundle_wxWindow(x0)); p[POFFSET+0] = WITH_VAR_STACK(objscheme_bundle_wxWindow(x0));
p[POFFSET+1] = WITH_VAR_STACK(objscheme_bundle_wxMouseEvent(x1)); p[POFFSET+1] = WITH_VAR_STACK(objscheme_bundle_wxMouseEvent(x1));
savebuf = scheme_current_thread->error_buf; scheme_current_thread->error_buf = &newbuf; if (scheme_setjmp(newbuf)) { scheme_current_thread->error_buf = savebuf; scheme_clear_escape(); return 1; } ESCAPE_BLOCK(1);
p[0] = (Scheme_Object *) ASSELF __gc_external; p[0] = (Scheme_Object *) ASSELF __gc_external;
v = WITH_VAR_STACK(scheme_apply(method, POFFSET+2, p)); v = WITH_VAR_STACK(scheme_apply(method, POFFSET+2, p));
scheme_current_thread->error_buf = savebuf; thread->error_buf = savebuf;
{ {
Bool resval; Bool resval;
@ -346,13 +348,14 @@ Bool os_wxCanvas::PreOnChar(class wxWindow* x0, class wxKeyEvent* x1)
return FALSE; return FALSE;
} else { } else {
mz_jmp_buf *savebuf, newbuf; mz_jmp_buf *savebuf, newbuf;
Scheme_Thread *thread;
p[POFFSET+0] = WITH_VAR_STACK(objscheme_bundle_wxWindow(x0)); p[POFFSET+0] = WITH_VAR_STACK(objscheme_bundle_wxWindow(x0));
p[POFFSET+1] = WITH_VAR_STACK(objscheme_bundle_wxKeyEvent(x1)); p[POFFSET+1] = WITH_VAR_STACK(objscheme_bundle_wxKeyEvent(x1));
savebuf = scheme_current_thread->error_buf; scheme_current_thread->error_buf = &newbuf; if (scheme_setjmp(newbuf)) { scheme_current_thread->error_buf = savebuf; scheme_clear_escape(); return 1; } ESCAPE_BLOCK(1)
p[0] = (Scheme_Object *) ASSELF __gc_external; p[0] = (Scheme_Object *) ASSELF __gc_external;
v = WITH_VAR_STACK(scheme_apply(method, POFFSET+2, p)); v = WITH_VAR_STACK(scheme_apply(method, POFFSET+2, p));
scheme_current_thread->error_buf = savebuf; thread->error_buf = savebuf;
{ {
Bool resval; Bool resval;
@ -423,11 +426,12 @@ void os_wxCanvas::OnSetFocus()
READY_TO_RETURN; ASSELF wxCanvas::OnSetFocus(); READY_TO_RETURN; ASSELF wxCanvas::OnSetFocus();
} else { } else {
mz_jmp_buf *savebuf, newbuf; mz_jmp_buf *savebuf, newbuf;
savebuf = scheme_current_thread->error_buf; scheme_current_thread->error_buf = &newbuf; if (scheme_setjmp(newbuf)) { scheme_current_thread->error_buf = savebuf; scheme_clear_escape(); return; } Scheme_Thread *thread;
ESCAPE_BLOCK(/*empty*/)
p[0] = (Scheme_Object *) ASSELF __gc_external; p[0] = (Scheme_Object *) ASSELF __gc_external;
v = WITH_VAR_STACK(scheme_apply(method, POFFSET+0, p)); v = WITH_VAR_STACK(scheme_apply(method, POFFSET+0, p));
scheme_current_thread->error_buf = savebuf; thread->error_buf = savebuf;
READY_TO_RETURN; READY_TO_RETURN;
} }
@ -457,11 +461,12 @@ void os_wxCanvas::OnKillFocus()
READY_TO_RETURN; ASSELF wxCanvas::OnKillFocus(); READY_TO_RETURN; ASSELF wxCanvas::OnKillFocus();
} else { } else {
mz_jmp_buf *savebuf, newbuf; mz_jmp_buf *savebuf, newbuf;
savebuf = scheme_current_thread->error_buf; scheme_current_thread->error_buf = &newbuf; if (scheme_setjmp(newbuf)) { scheme_current_thread->error_buf = savebuf; scheme_clear_escape(); return; } Scheme_Thread *thread;
ESCAPE_BLOCK(/*empty*/)
p[0] = (Scheme_Object *) ASSELF __gc_external; p[0] = (Scheme_Object *) ASSELF __gc_external;
v = WITH_VAR_STACK(scheme_apply(method, POFFSET+0, p)); v = WITH_VAR_STACK(scheme_apply(method, POFFSET+0, p));
scheme_current_thread->error_buf = savebuf; thread->error_buf = savebuf;
READY_TO_RETURN; READY_TO_RETURN;
} }
@ -492,12 +497,13 @@ void os_wxCanvas::OnScroll(class wxScrollEvent* x0)
READY_TO_RETURN; ASSELF wxCanvas::OnScroll(x0); READY_TO_RETURN; ASSELF wxCanvas::OnScroll(x0);
} else { } else {
mz_jmp_buf *savebuf, newbuf; mz_jmp_buf *savebuf, newbuf;
Scheme_Thread *thread;
p[POFFSET+0] = WITH_VAR_STACK(objscheme_bundle_wxScrollEvent(x0)); p[POFFSET+0] = WITH_VAR_STACK(objscheme_bundle_wxScrollEvent(x0));
savebuf = scheme_current_thread->error_buf; scheme_current_thread->error_buf = &newbuf; if (scheme_setjmp(newbuf)) { scheme_current_thread->error_buf = savebuf; scheme_clear_escape(); return; } ESCAPE_BLOCK(/*empty*/)
p[0] = (Scheme_Object *) ASSELF __gc_external; p[0] = (Scheme_Object *) ASSELF __gc_external;
v = WITH_VAR_STACK(scheme_apply(method, POFFSET+1, p)); v = WITH_VAR_STACK(scheme_apply(method, POFFSET+1, p));
scheme_current_thread->error_buf = savebuf; thread->error_buf = savebuf;
READY_TO_RETURN; READY_TO_RETURN;
} }
@ -528,12 +534,13 @@ void os_wxCanvas::OnChar(class wxKeyEvent* x0)
READY_TO_RETURN; ASSELF wxCanvas::OnChar(x0); READY_TO_RETURN; ASSELF wxCanvas::OnChar(x0);
} else { } else {
mz_jmp_buf *savebuf, newbuf; mz_jmp_buf *savebuf, newbuf;
Scheme_Thread *thread;
p[POFFSET+0] = WITH_VAR_STACK(objscheme_bundle_wxKeyEvent(x0)); p[POFFSET+0] = WITH_VAR_STACK(objscheme_bundle_wxKeyEvent(x0));
savebuf = scheme_current_thread->error_buf; scheme_current_thread->error_buf = &newbuf; if (scheme_setjmp(newbuf)) { scheme_current_thread->error_buf = savebuf; scheme_clear_escape(); return; } ESCAPE_BLOCK(/*empty*/)
p[0] = (Scheme_Object *) ASSELF __gc_external; p[0] = (Scheme_Object *) ASSELF __gc_external;
v = WITH_VAR_STACK(scheme_apply(method, POFFSET+1, p)); v = WITH_VAR_STACK(scheme_apply(method, POFFSET+1, p));
scheme_current_thread->error_buf = savebuf; thread->error_buf = savebuf;
READY_TO_RETURN; READY_TO_RETURN;
} }
@ -564,12 +571,13 @@ void os_wxCanvas::OnEvent(class wxMouseEvent* x0)
READY_TO_RETURN; ASSELF wxCanvas::OnEvent(x0); READY_TO_RETURN; ASSELF wxCanvas::OnEvent(x0);
} else { } else {
mz_jmp_buf *savebuf, newbuf; mz_jmp_buf *savebuf, newbuf;
Scheme_Thread *thread;
p[POFFSET+0] = WITH_VAR_STACK(objscheme_bundle_wxMouseEvent(x0)); p[POFFSET+0] = WITH_VAR_STACK(objscheme_bundle_wxMouseEvent(x0));
savebuf = scheme_current_thread->error_buf; scheme_current_thread->error_buf = &newbuf; if (scheme_setjmp(newbuf)) { scheme_current_thread->error_buf = savebuf; scheme_clear_escape(); return; } ESCAPE_BLOCK(/*empty*/)
p[0] = (Scheme_Object *) ASSELF __gc_external; p[0] = (Scheme_Object *) ASSELF __gc_external;
v = WITH_VAR_STACK(scheme_apply(method, POFFSET+1, p)); v = WITH_VAR_STACK(scheme_apply(method, POFFSET+1, p));
scheme_current_thread->error_buf = savebuf; thread->error_buf = savebuf;
READY_TO_RETURN; READY_TO_RETURN;
} }
@ -599,11 +607,12 @@ void os_wxCanvas::OnPaint()
READY_TO_RETURN; ASSELF wxCanvas::OnPaint(); READY_TO_RETURN; ASSELF wxCanvas::OnPaint();
} else { } else {
mz_jmp_buf *savebuf, newbuf; mz_jmp_buf *savebuf, newbuf;
savebuf = scheme_current_thread->error_buf; scheme_current_thread->error_buf = &newbuf; if (scheme_setjmp(newbuf)) { scheme_current_thread->error_buf = savebuf; scheme_clear_escape(); return; } Scheme_Thread *thread;
ESCAPE_BLOCK(/*empty*/)
p[0] = (Scheme_Object *) ASSELF __gc_external; p[0] = (Scheme_Object *) ASSELF __gc_external;
v = WITH_VAR_STACK(scheme_apply(method, POFFSET+0, p)); v = WITH_VAR_STACK(scheme_apply(method, POFFSET+0, p));
scheme_current_thread->error_buf = savebuf; thread->error_buf = savebuf;
READY_TO_RETURN; READY_TO_RETURN;
} }

View File

@ -257,12 +257,13 @@ void os_wxFrame::OnDropFile(epathname x0)
READY_TO_RETURN; ASSELF wxFrame::OnDropFile(x0); READY_TO_RETURN; ASSELF wxFrame::OnDropFile(x0);
} else { } else {
mz_jmp_buf *savebuf, newbuf; mz_jmp_buf *savebuf, newbuf;
Scheme_Thread *thread;
p[POFFSET+0] = WITH_VAR_STACK(objscheme_bundle_pathname((char *)x0)); p[POFFSET+0] = WITH_VAR_STACK(objscheme_bundle_pathname((char *)x0));
savebuf = scheme_current_thread->error_buf; scheme_current_thread->error_buf = &newbuf; if (scheme_setjmp(newbuf)) { scheme_current_thread->error_buf = savebuf; scheme_clear_escape(); return; } ESCAPE_BLOCK(/*empty*/)
p[0] = (Scheme_Object *) ASSELF __gc_external; p[0] = (Scheme_Object *) ASSELF __gc_external;
v = WITH_VAR_STACK(scheme_apply(method, POFFSET+1, p)); v = WITH_VAR_STACK(scheme_apply(method, POFFSET+1, p));
scheme_current_thread->error_buf = savebuf; thread->error_buf = savebuf;
READY_TO_RETURN; READY_TO_RETURN;
} }
@ -294,13 +295,14 @@ Bool os_wxFrame::PreOnEvent(class wxWindow* x0, class wxMouseEvent* x1)
return FALSE; return FALSE;
} else { } else {
mz_jmp_buf *savebuf, newbuf; mz_jmp_buf *savebuf, newbuf;
Scheme_Thread *thread;
p[POFFSET+0] = WITH_VAR_STACK(objscheme_bundle_wxWindow(x0)); p[POFFSET+0] = WITH_VAR_STACK(objscheme_bundle_wxWindow(x0));
p[POFFSET+1] = WITH_VAR_STACK(objscheme_bundle_wxMouseEvent(x1)); p[POFFSET+1] = WITH_VAR_STACK(objscheme_bundle_wxMouseEvent(x1));
savebuf = scheme_current_thread->error_buf; scheme_current_thread->error_buf = &newbuf; if (scheme_setjmp(newbuf)) { scheme_current_thread->error_buf = savebuf; scheme_clear_escape(); return 1; } ESCAPE_BLOCK(1)
p[0] = (Scheme_Object *) ASSELF __gc_external; p[0] = (Scheme_Object *) ASSELF __gc_external;
v = WITH_VAR_STACK(scheme_apply(method, POFFSET+2, p)); v = WITH_VAR_STACK(scheme_apply(method, POFFSET+2, p));
scheme_current_thread->error_buf = savebuf; thread->error_buf = savebuf;
{ {
Bool resval; Bool resval;
@ -337,13 +339,14 @@ Bool os_wxFrame::PreOnChar(class wxWindow* x0, class wxKeyEvent* x1)
return FALSE; return FALSE;
} else { } else {
mz_jmp_buf *savebuf, newbuf; mz_jmp_buf *savebuf, newbuf;
Scheme_Thread *thread;
p[POFFSET+0] = WITH_VAR_STACK(objscheme_bundle_wxWindow(x0)); p[POFFSET+0] = WITH_VAR_STACK(objscheme_bundle_wxWindow(x0));
p[POFFSET+1] = WITH_VAR_STACK(objscheme_bundle_wxKeyEvent(x1)); p[POFFSET+1] = WITH_VAR_STACK(objscheme_bundle_wxKeyEvent(x1));
savebuf = scheme_current_thread->error_buf; scheme_current_thread->error_buf = &newbuf; if (scheme_setjmp(newbuf)) { scheme_current_thread->error_buf = savebuf; scheme_clear_escape(); return 1; } ESCAPE_BLOCK(1)
p[0] = (Scheme_Object *) ASSELF __gc_external; p[0] = (Scheme_Object *) ASSELF __gc_external;
v = WITH_VAR_STACK(scheme_apply(method, POFFSET+2, p)); v = WITH_VAR_STACK(scheme_apply(method, POFFSET+2, p));
scheme_current_thread->error_buf = savebuf; thread->error_buf = savebuf;
{ {
Bool resval; Bool resval;
@ -414,11 +417,12 @@ void os_wxFrame::OnSetFocus()
READY_TO_RETURN; ASSELF wxFrame::OnSetFocus(); READY_TO_RETURN; ASSELF wxFrame::OnSetFocus();
} else { } else {
mz_jmp_buf *savebuf, newbuf; mz_jmp_buf *savebuf, newbuf;
savebuf = scheme_current_thread->error_buf; scheme_current_thread->error_buf = &newbuf; if (scheme_setjmp(newbuf)) { scheme_current_thread->error_buf = savebuf; scheme_clear_escape(); return; } Scheme_Thread *thread;
ESCAPE_BLOCK(/*empty*/)
p[0] = (Scheme_Object *) ASSELF __gc_external; p[0] = (Scheme_Object *) ASSELF __gc_external;
v = WITH_VAR_STACK(scheme_apply(method, POFFSET+0, p)); v = WITH_VAR_STACK(scheme_apply(method, POFFSET+0, p));
scheme_current_thread->error_buf = savebuf; thread->error_buf = savebuf;
READY_TO_RETURN; READY_TO_RETURN;
} }
@ -448,11 +452,12 @@ void os_wxFrame::OnKillFocus()
READY_TO_RETURN; ASSELF wxFrame::OnKillFocus(); READY_TO_RETURN; ASSELF wxFrame::OnKillFocus();
} else { } else {
mz_jmp_buf *savebuf, newbuf; mz_jmp_buf *savebuf, newbuf;
savebuf = scheme_current_thread->error_buf; scheme_current_thread->error_buf = &newbuf; if (scheme_setjmp(newbuf)) { scheme_current_thread->error_buf = savebuf; scheme_clear_escape(); return; } Scheme_Thread *thread;
ESCAPE_BLOCK(/*empty*/)
p[0] = (Scheme_Object *) ASSELF __gc_external; p[0] = (Scheme_Object *) ASSELF __gc_external;
v = WITH_VAR_STACK(scheme_apply(method, POFFSET+0, p)); v = WITH_VAR_STACK(scheme_apply(method, POFFSET+0, p));
scheme_current_thread->error_buf = savebuf; thread->error_buf = savebuf;
READY_TO_RETURN; READY_TO_RETURN;
} }
@ -620,11 +625,12 @@ Bool os_wxFrame::OnClose()
READY_TO_RETURN; return ASSELF wxFrame::OnClose(); READY_TO_RETURN; return ASSELF wxFrame::OnClose();
} else { } else {
mz_jmp_buf *savebuf, newbuf; mz_jmp_buf *savebuf, newbuf;
savebuf = scheme_current_thread->error_buf; scheme_current_thread->error_buf = &newbuf; if (scheme_setjmp(newbuf)) { scheme_current_thread->error_buf = savebuf; scheme_clear_escape(); return 0; } Scheme_Thread *thread;
ESCAPE_BLOCK(0)
p[0] = (Scheme_Object *) ASSELF __gc_external; p[0] = (Scheme_Object *) ASSELF __gc_external;
v = WITH_VAR_STACK(scheme_apply(method, POFFSET+0, p)); v = WITH_VAR_STACK(scheme_apply(method, POFFSET+0, p));
scheme_current_thread->error_buf = savebuf; thread->error_buf = savebuf;
{ {
Bool resval; Bool resval;
@ -659,12 +665,13 @@ void os_wxFrame::OnActivate(Bool x0)
READY_TO_RETURN; ASSELF wxFrame::OnActivate(x0); READY_TO_RETURN; ASSELF wxFrame::OnActivate(x0);
} else { } else {
mz_jmp_buf *savebuf, newbuf; mz_jmp_buf *savebuf, newbuf;
Scheme_Thread *thread;
p[POFFSET+0] = (x0 ? scheme_true : scheme_false); p[POFFSET+0] = (x0 ? scheme_true : scheme_false);
savebuf = scheme_current_thread->error_buf; scheme_current_thread->error_buf = &newbuf; if (scheme_setjmp(newbuf)) { scheme_current_thread->error_buf = savebuf; scheme_clear_escape(); return; } ESCAPE_BLOCK(/*empty*/)
p[0] = (Scheme_Object *) ASSELF __gc_external; p[0] = (Scheme_Object *) ASSELF __gc_external;
v = WITH_VAR_STACK(scheme_apply(method, POFFSET+1, p)); v = WITH_VAR_STACK(scheme_apply(method, POFFSET+1, p));
scheme_current_thread->error_buf = savebuf; thread->error_buf = savebuf;
READY_TO_RETURN; READY_TO_RETURN;
} }

View File

@ -202,12 +202,13 @@ void os_wxsGauge::OnDropFile(epathname x0)
READY_TO_RETURN; ASSELF wxsGauge::OnDropFile(x0); READY_TO_RETURN; ASSELF wxsGauge::OnDropFile(x0);
} else { } else {
mz_jmp_buf *savebuf, newbuf; mz_jmp_buf *savebuf, newbuf;
Scheme_Thread *thread;
p[POFFSET+0] = WITH_VAR_STACK(objscheme_bundle_pathname((char *)x0)); p[POFFSET+0] = WITH_VAR_STACK(objscheme_bundle_pathname((char *)x0));
savebuf = scheme_current_thread->error_buf; scheme_current_thread->error_buf = &newbuf; if (scheme_setjmp(newbuf)) { scheme_current_thread->error_buf = savebuf; scheme_clear_escape(); return; } ESCAPE_BLOCK(/*empty*/)
p[0] = (Scheme_Object *) ASSELF __gc_external; p[0] = (Scheme_Object *) ASSELF __gc_external;
v = WITH_VAR_STACK(scheme_apply(method, POFFSET+1, p)); v = WITH_VAR_STACK(scheme_apply(method, POFFSET+1, p));
scheme_current_thread->error_buf = savebuf; thread->error_buf = savebuf;
READY_TO_RETURN; READY_TO_RETURN;
} }
@ -239,13 +240,14 @@ Bool os_wxsGauge::PreOnEvent(class wxWindow* x0, class wxMouseEvent* x1)
return FALSE; return FALSE;
} else { } else {
mz_jmp_buf *savebuf, newbuf; mz_jmp_buf *savebuf, newbuf;
Scheme_Thread *thread;
p[POFFSET+0] = WITH_VAR_STACK(objscheme_bundle_wxWindow(x0)); p[POFFSET+0] = WITH_VAR_STACK(objscheme_bundle_wxWindow(x0));
p[POFFSET+1] = WITH_VAR_STACK(objscheme_bundle_wxMouseEvent(x1)); p[POFFSET+1] = WITH_VAR_STACK(objscheme_bundle_wxMouseEvent(x1));
savebuf = scheme_current_thread->error_buf; scheme_current_thread->error_buf = &newbuf; if (scheme_setjmp(newbuf)) { scheme_current_thread->error_buf = savebuf; scheme_clear_escape(); return 1; } ESCAPE_BLOCK(1)
p[0] = (Scheme_Object *) ASSELF __gc_external; p[0] = (Scheme_Object *) ASSELF __gc_external;
v = WITH_VAR_STACK(scheme_apply(method, POFFSET+2, p)); v = WITH_VAR_STACK(scheme_apply(method, POFFSET+2, p));
scheme_current_thread->error_buf = savebuf; thread->error_buf = savebuf;
{ {
Bool resval; Bool resval;
@ -282,13 +284,14 @@ Bool os_wxsGauge::PreOnChar(class wxWindow* x0, class wxKeyEvent* x1)
return FALSE; return FALSE;
} else { } else {
mz_jmp_buf *savebuf, newbuf; mz_jmp_buf *savebuf, newbuf;
Scheme_Thread *thread;
p[POFFSET+0] = WITH_VAR_STACK(objscheme_bundle_wxWindow(x0)); p[POFFSET+0] = WITH_VAR_STACK(objscheme_bundle_wxWindow(x0));
p[POFFSET+1] = WITH_VAR_STACK(objscheme_bundle_wxKeyEvent(x1)); p[POFFSET+1] = WITH_VAR_STACK(objscheme_bundle_wxKeyEvent(x1));
savebuf = scheme_current_thread->error_buf; scheme_current_thread->error_buf = &newbuf; if (scheme_setjmp(newbuf)) { scheme_current_thread->error_buf = savebuf; scheme_clear_escape(); return 1; } ESCAPE_BLOCK(1)
p[0] = (Scheme_Object *) ASSELF __gc_external; p[0] = (Scheme_Object *) ASSELF __gc_external;
v = WITH_VAR_STACK(scheme_apply(method, POFFSET+2, p)); v = WITH_VAR_STACK(scheme_apply(method, POFFSET+2, p));
scheme_current_thread->error_buf = savebuf; thread->error_buf = savebuf;
{ {
Bool resval; Bool resval;
@ -359,11 +362,12 @@ void os_wxsGauge::OnSetFocus()
READY_TO_RETURN; ASSELF wxsGauge::OnSetFocus(); READY_TO_RETURN; ASSELF wxsGauge::OnSetFocus();
} else { } else {
mz_jmp_buf *savebuf, newbuf; mz_jmp_buf *savebuf, newbuf;
savebuf = scheme_current_thread->error_buf; scheme_current_thread->error_buf = &newbuf; if (scheme_setjmp(newbuf)) { scheme_current_thread->error_buf = savebuf; scheme_clear_escape(); return; } Scheme_Thread *thread;
ESCAPE_BLOCK(/*empty*/)
p[0] = (Scheme_Object *) ASSELF __gc_external; p[0] = (Scheme_Object *) ASSELF __gc_external;
v = WITH_VAR_STACK(scheme_apply(method, POFFSET+0, p)); v = WITH_VAR_STACK(scheme_apply(method, POFFSET+0, p));
scheme_current_thread->error_buf = savebuf; thread->error_buf = savebuf;
READY_TO_RETURN; READY_TO_RETURN;
} }
@ -393,11 +397,12 @@ void os_wxsGauge::OnKillFocus()
READY_TO_RETURN; ASSELF wxsGauge::OnKillFocus(); READY_TO_RETURN; ASSELF wxsGauge::OnKillFocus();
} else { } else {
mz_jmp_buf *savebuf, newbuf; mz_jmp_buf *savebuf, newbuf;
savebuf = scheme_current_thread->error_buf; scheme_current_thread->error_buf = &newbuf; if (scheme_setjmp(newbuf)) { scheme_current_thread->error_buf = savebuf; scheme_clear_escape(); return; } Scheme_Thread *thread;
ESCAPE_BLOCK(/*empty*/)
p[0] = (Scheme_Object *) ASSELF __gc_external; p[0] = (Scheme_Object *) ASSELF __gc_external;
v = WITH_VAR_STACK(scheme_apply(method, POFFSET+0, p)); v = WITH_VAR_STACK(scheme_apply(method, POFFSET+0, p));
scheme_current_thread->error_buf = savebuf; thread->error_buf = savebuf;
READY_TO_RETURN; READY_TO_RETURN;
} }

View File

@ -396,12 +396,13 @@ void os_wxMessage::OnDropFile(epathname x0)
READY_TO_RETURN; ASSELF wxMessage::OnDropFile(x0); READY_TO_RETURN; ASSELF wxMessage::OnDropFile(x0);
} else { } else {
mz_jmp_buf *savebuf, newbuf; mz_jmp_buf *savebuf, newbuf;
Scheme_Thread *thread;
p[POFFSET+0] = WITH_VAR_STACK(objscheme_bundle_pathname((char *)x0)); p[POFFSET+0] = WITH_VAR_STACK(objscheme_bundle_pathname((char *)x0));
savebuf = scheme_current_thread->error_buf; scheme_current_thread->error_buf = &newbuf; if (scheme_setjmp(newbuf)) { scheme_current_thread->error_buf = savebuf; scheme_clear_escape(); return; } ESCAPE_BLOCK(/*empty*/)
p[0] = (Scheme_Object *) ASSELF __gc_external; p[0] = (Scheme_Object *) ASSELF __gc_external;
v = WITH_VAR_STACK(scheme_apply(method, POFFSET+1, p)); v = WITH_VAR_STACK(scheme_apply(method, POFFSET+1, p));
scheme_current_thread->error_buf = savebuf; thread->error_buf = savebuf;
READY_TO_RETURN; READY_TO_RETURN;
} }
@ -433,13 +434,14 @@ Bool os_wxMessage::PreOnEvent(class wxWindow* x0, class wxMouseEvent* x1)
return FALSE; return FALSE;
} else { } else {
mz_jmp_buf *savebuf, newbuf; mz_jmp_buf *savebuf, newbuf;
Scheme_Thread *thread;
p[POFFSET+0] = WITH_VAR_STACK(objscheme_bundle_wxWindow(x0)); p[POFFSET+0] = WITH_VAR_STACK(objscheme_bundle_wxWindow(x0));
p[POFFSET+1] = WITH_VAR_STACK(objscheme_bundle_wxMouseEvent(x1)); p[POFFSET+1] = WITH_VAR_STACK(objscheme_bundle_wxMouseEvent(x1));
savebuf = scheme_current_thread->error_buf; scheme_current_thread->error_buf = &newbuf; if (scheme_setjmp(newbuf)) { scheme_current_thread->error_buf = savebuf; scheme_clear_escape(); return 1; } ESCAPE_BLOCK(1)
p[0] = (Scheme_Object *) ASSELF __gc_external; p[0] = (Scheme_Object *) ASSELF __gc_external;
v = WITH_VAR_STACK(scheme_apply(method, POFFSET+2, p)); v = WITH_VAR_STACK(scheme_apply(method, POFFSET+2, p));
scheme_current_thread->error_buf = savebuf; thread->error_buf = savebuf;
{ {
Bool resval; Bool resval;
@ -476,13 +478,14 @@ Bool os_wxMessage::PreOnChar(class wxWindow* x0, class wxKeyEvent* x1)
return FALSE; return FALSE;
} else { } else {
mz_jmp_buf *savebuf, newbuf; mz_jmp_buf *savebuf, newbuf;
Scheme_Thread *thread;
p[POFFSET+0] = WITH_VAR_STACK(objscheme_bundle_wxWindow(x0)); p[POFFSET+0] = WITH_VAR_STACK(objscheme_bundle_wxWindow(x0));
p[POFFSET+1] = WITH_VAR_STACK(objscheme_bundle_wxKeyEvent(x1)); p[POFFSET+1] = WITH_VAR_STACK(objscheme_bundle_wxKeyEvent(x1));
savebuf = scheme_current_thread->error_buf; scheme_current_thread->error_buf = &newbuf; if (scheme_setjmp(newbuf)) { scheme_current_thread->error_buf = savebuf; scheme_clear_escape(); return 1; } ESCAPE_BLOCK(1)
p[0] = (Scheme_Object *) ASSELF __gc_external; p[0] = (Scheme_Object *) ASSELF __gc_external;
v = WITH_VAR_STACK(scheme_apply(method, POFFSET+2, p)); v = WITH_VAR_STACK(scheme_apply(method, POFFSET+2, p));
scheme_current_thread->error_buf = savebuf; thread->error_buf = savebuf;
{ {
Bool resval; Bool resval;
@ -553,11 +556,12 @@ void os_wxMessage::OnSetFocus()
READY_TO_RETURN; ASSELF wxMessage::OnSetFocus(); READY_TO_RETURN; ASSELF wxMessage::OnSetFocus();
} else { } else {
mz_jmp_buf *savebuf, newbuf; mz_jmp_buf *savebuf, newbuf;
savebuf = scheme_current_thread->error_buf; scheme_current_thread->error_buf = &newbuf; if (scheme_setjmp(newbuf)) { scheme_current_thread->error_buf = savebuf; scheme_clear_escape(); return; } Scheme_Thread *thread;
ESCAPE_BLOCK(/*empty*/)
p[0] = (Scheme_Object *) ASSELF __gc_external; p[0] = (Scheme_Object *) ASSELF __gc_external;
v = WITH_VAR_STACK(scheme_apply(method, POFFSET+0, p)); v = WITH_VAR_STACK(scheme_apply(method, POFFSET+0, p));
scheme_current_thread->error_buf = savebuf; thread->error_buf = savebuf;
READY_TO_RETURN; READY_TO_RETURN;
} }
@ -587,11 +591,12 @@ void os_wxMessage::OnKillFocus()
READY_TO_RETURN; ASSELF wxMessage::OnKillFocus(); READY_TO_RETURN; ASSELF wxMessage::OnKillFocus();
} else { } else {
mz_jmp_buf *savebuf, newbuf; mz_jmp_buf *savebuf, newbuf;
savebuf = scheme_current_thread->error_buf; scheme_current_thread->error_buf = &newbuf; if (scheme_setjmp(newbuf)) { scheme_current_thread->error_buf = savebuf; scheme_clear_escape(); return; } Scheme_Thread *thread;
ESCAPE_BLOCK(/*empty*/)
p[0] = (Scheme_Object *) ASSELF __gc_external; p[0] = (Scheme_Object *) ASSELF __gc_external;
v = WITH_VAR_STACK(scheme_apply(method, POFFSET+0, p)); v = WITH_VAR_STACK(scheme_apply(method, POFFSET+0, p));
scheme_current_thread->error_buf = savebuf; thread->error_buf = savebuf;
READY_TO_RETURN; READY_TO_RETURN;
} }

View File

@ -353,12 +353,13 @@ void os_wxListBox::OnDropFile(epathname x0)
READY_TO_RETURN; ASSELF wxListBox::OnDropFile(x0); READY_TO_RETURN; ASSELF wxListBox::OnDropFile(x0);
} else { } else {
mz_jmp_buf *savebuf, newbuf; mz_jmp_buf *savebuf, newbuf;
Scheme_Thread *thread;
p[POFFSET+0] = WITH_VAR_STACK(objscheme_bundle_pathname((char *)x0)); p[POFFSET+0] = WITH_VAR_STACK(objscheme_bundle_pathname((char *)x0));
savebuf = scheme_current_thread->error_buf; scheme_current_thread->error_buf = &newbuf; if (scheme_setjmp(newbuf)) { scheme_current_thread->error_buf = savebuf; scheme_clear_escape(); return; } ESCAPE_BLOCK(/*empty*/)
p[0] = (Scheme_Object *) ASSELF __gc_external; p[0] = (Scheme_Object *) ASSELF __gc_external;
v = WITH_VAR_STACK(scheme_apply(method, POFFSET+1, p)); v = WITH_VAR_STACK(scheme_apply(method, POFFSET+1, p));
scheme_current_thread->error_buf = savebuf; thread->error_buf = savebuf;
READY_TO_RETURN; READY_TO_RETURN;
} }
@ -390,13 +391,14 @@ Bool os_wxListBox::PreOnEvent(class wxWindow* x0, class wxMouseEvent* x1)
return FALSE; return FALSE;
} else { } else {
mz_jmp_buf *savebuf, newbuf; mz_jmp_buf *savebuf, newbuf;
Scheme_Thread *thread;
p[POFFSET+0] = WITH_VAR_STACK(objscheme_bundle_wxWindow(x0)); p[POFFSET+0] = WITH_VAR_STACK(objscheme_bundle_wxWindow(x0));
p[POFFSET+1] = WITH_VAR_STACK(objscheme_bundle_wxMouseEvent(x1)); p[POFFSET+1] = WITH_VAR_STACK(objscheme_bundle_wxMouseEvent(x1));
savebuf = scheme_current_thread->error_buf; scheme_current_thread->error_buf = &newbuf; if (scheme_setjmp(newbuf)) { scheme_current_thread->error_buf = savebuf; scheme_clear_escape(); return 1; } ESCAPE_BLOCK(1)
p[0] = (Scheme_Object *) ASSELF __gc_external; p[0] = (Scheme_Object *) ASSELF __gc_external;
v = WITH_VAR_STACK(scheme_apply(method, POFFSET+2, p)); v = WITH_VAR_STACK(scheme_apply(method, POFFSET+2, p));
scheme_current_thread->error_buf = savebuf; thread->error_buf = savebuf;
{ {
Bool resval; Bool resval;
@ -433,13 +435,14 @@ Bool os_wxListBox::PreOnChar(class wxWindow* x0, class wxKeyEvent* x1)
return FALSE; return FALSE;
} else { } else {
mz_jmp_buf *savebuf, newbuf; mz_jmp_buf *savebuf, newbuf;
Scheme_Thread *thread;
p[POFFSET+0] = WITH_VAR_STACK(objscheme_bundle_wxWindow(x0)); p[POFFSET+0] = WITH_VAR_STACK(objscheme_bundle_wxWindow(x0));
p[POFFSET+1] = WITH_VAR_STACK(objscheme_bundle_wxKeyEvent(x1)); p[POFFSET+1] = WITH_VAR_STACK(objscheme_bundle_wxKeyEvent(x1));
savebuf = scheme_current_thread->error_buf; scheme_current_thread->error_buf = &newbuf; if (scheme_setjmp(newbuf)) { scheme_current_thread->error_buf = savebuf; scheme_clear_escape(); return 1; } ESCAPE_BLOCK(1)
p[0] = (Scheme_Object *) ASSELF __gc_external; p[0] = (Scheme_Object *) ASSELF __gc_external;
v = WITH_VAR_STACK(scheme_apply(method, POFFSET+2, p)); v = WITH_VAR_STACK(scheme_apply(method, POFFSET+2, p));
scheme_current_thread->error_buf = savebuf; thread->error_buf = savebuf;
{ {
Bool resval; Bool resval;
@ -510,11 +513,12 @@ void os_wxListBox::OnSetFocus()
READY_TO_RETURN; ASSELF wxListBox::OnSetFocus(); READY_TO_RETURN; ASSELF wxListBox::OnSetFocus();
} else { } else {
mz_jmp_buf *savebuf, newbuf; mz_jmp_buf *savebuf, newbuf;
savebuf = scheme_current_thread->error_buf; scheme_current_thread->error_buf = &newbuf; if (scheme_setjmp(newbuf)) { scheme_current_thread->error_buf = savebuf; scheme_clear_escape(); return; } Scheme_Thread *thread;
ESCAPE_BLOCK(/*empty*/)
p[0] = (Scheme_Object *) ASSELF __gc_external; p[0] = (Scheme_Object *) ASSELF __gc_external;
v = WITH_VAR_STACK(scheme_apply(method, POFFSET+0, p)); v = WITH_VAR_STACK(scheme_apply(method, POFFSET+0, p));
scheme_current_thread->error_buf = savebuf; thread->error_buf = savebuf;
READY_TO_RETURN; READY_TO_RETURN;
} }
@ -544,11 +548,12 @@ void os_wxListBox::OnKillFocus()
READY_TO_RETURN; ASSELF wxListBox::OnKillFocus(); READY_TO_RETURN; ASSELF wxListBox::OnKillFocus();
} else { } else {
mz_jmp_buf *savebuf, newbuf; mz_jmp_buf *savebuf, newbuf;
savebuf = scheme_current_thread->error_buf; scheme_current_thread->error_buf = &newbuf; if (scheme_setjmp(newbuf)) { scheme_current_thread->error_buf = savebuf; scheme_clear_escape(); return; } Scheme_Thread *thread;
ESCAPE_BLOCK(/*empty*/)
p[0] = (Scheme_Object *) ASSELF __gc_external; p[0] = (Scheme_Object *) ASSELF __gc_external;
v = WITH_VAR_STACK(scheme_apply(method, POFFSET+0, p)); v = WITH_VAR_STACK(scheme_apply(method, POFFSET+0, p));
scheme_current_thread->error_buf = savebuf; thread->error_buf = savebuf;
READY_TO_RETURN; READY_TO_RETURN;
} }
@ -1320,6 +1325,7 @@ static void CB_TOSCHEME(CB_REALCLASS *realobj, wxCommandEvent *event)
Scheme_Object *p[2]; Scheme_Object *p[2];
Scheme_Class_Object *obj; Scheme_Class_Object *obj;
mz_jmp_buf savebuf; mz_jmp_buf savebuf;
Scheme_Thread *thread;
SETUP_VAR_STACK(4); SETUP_VAR_STACK(4);
VAR_STACK_PUSH(0, obj); VAR_STACK_PUSH(0, obj);
VAR_STACK_PUSH(1, event); VAR_STACK_PUSH(1, event);
@ -1339,12 +1345,14 @@ static void CB_TOSCHEME(CB_REALCLASS *realobj, wxCommandEvent *event)
p[0] = (Scheme_Object *)obj; p[0] = (Scheme_Object *)obj;
p[1] = WITH_VAR_STACK(objscheme_bundle_wxCommandEvent(event)); p[1] = WITH_VAR_STACK(objscheme_bundle_wxCommandEvent(event));
COPY_JMPBUF(savebuf, scheme_error_buf); thread = scheme_get_current_thread();
COPY_JMPBUF(savebuf, *(thread->error_buf));
if (!scheme_setjmp(scheme_error_buf)) if (!scheme_setjmp(*(thread->error_buf)))
WITH_VAR_STACK(scheme_apply_multi(((CALLBACKCLASS *)obj->primdata)->callback_closure, 2, p)); WITH_VAR_STACK(scheme_apply_multi(((CALLBACKCLASS *)obj->primdata)->callback_closure, 2, p));
COPY_JMPBUF(scheme_error_buf, savebuf); thread = scheme_get_current_thread();
COPY_JMPBUF(*(thread->error_buf), savebuf);
READY_TO_RETURN; READY_TO_RETURN;
} }

View File

@ -308,12 +308,13 @@ void os_wxMediaCanvas::OnChar(class wxKeyEvent* x0)
READY_TO_RETURN; ASSELF wxMediaCanvas::OnChar(x0); READY_TO_RETURN; ASSELF wxMediaCanvas::OnChar(x0);
} else { } else {
mz_jmp_buf *savebuf, newbuf; mz_jmp_buf *savebuf, newbuf;
Scheme_Thread *thread;
p[POFFSET+0] = WITH_VAR_STACK(objscheme_bundle_wxKeyEvent(x0)); p[POFFSET+0] = WITH_VAR_STACK(objscheme_bundle_wxKeyEvent(x0));
savebuf = scheme_current_thread->error_buf; scheme_current_thread->error_buf = &newbuf; if (scheme_setjmp(newbuf)) { scheme_current_thread->error_buf = savebuf; scheme_clear_escape(); return; } ESCAPE_BLOCK(/*empty*/)
p[0] = (Scheme_Object *) ASSELF __gc_external; p[0] = (Scheme_Object *) ASSELF __gc_external;
v = WITH_VAR_STACK(scheme_apply(method, POFFSET+1, p)); v = WITH_VAR_STACK(scheme_apply(method, POFFSET+1, p));
scheme_current_thread->error_buf = savebuf; thread->error_buf = savebuf;
READY_TO_RETURN; READY_TO_RETURN;
} }
@ -344,12 +345,13 @@ void os_wxMediaCanvas::OnEvent(class wxMouseEvent* x0)
READY_TO_RETURN; ASSELF wxMediaCanvas::OnEvent(x0); READY_TO_RETURN; ASSELF wxMediaCanvas::OnEvent(x0);
} else { } else {
mz_jmp_buf *savebuf, newbuf; mz_jmp_buf *savebuf, newbuf;
Scheme_Thread *thread;
p[POFFSET+0] = WITH_VAR_STACK(objscheme_bundle_wxMouseEvent(x0)); p[POFFSET+0] = WITH_VAR_STACK(objscheme_bundle_wxMouseEvent(x0));
savebuf = scheme_current_thread->error_buf; scheme_current_thread->error_buf = &newbuf; if (scheme_setjmp(newbuf)) { scheme_current_thread->error_buf = savebuf; scheme_clear_escape(); return; } ESCAPE_BLOCK(/*empty*/)
p[0] = (Scheme_Object *) ASSELF __gc_external; p[0] = (Scheme_Object *) ASSELF __gc_external;
v = WITH_VAR_STACK(scheme_apply(method, POFFSET+1, p)); v = WITH_VAR_STACK(scheme_apply(method, POFFSET+1, p));
scheme_current_thread->error_buf = savebuf; thread->error_buf = savebuf;
READY_TO_RETURN; READY_TO_RETURN;
} }
@ -379,11 +381,12 @@ void os_wxMediaCanvas::OnPaint()
READY_TO_RETURN; ASSELF wxMediaCanvas::OnPaint(); READY_TO_RETURN; ASSELF wxMediaCanvas::OnPaint();
} else { } else {
mz_jmp_buf *savebuf, newbuf; mz_jmp_buf *savebuf, newbuf;
savebuf = scheme_current_thread->error_buf; scheme_current_thread->error_buf = &newbuf; if (scheme_setjmp(newbuf)) { scheme_current_thread->error_buf = savebuf; scheme_clear_escape(); return; } Scheme_Thread *thread;
ESCAPE_BLOCK(/*empty*/)
p[0] = (Scheme_Object *) ASSELF __gc_external; p[0] = (Scheme_Object *) ASSELF __gc_external;
v = WITH_VAR_STACK(scheme_apply(method, POFFSET+0, p)); v = WITH_VAR_STACK(scheme_apply(method, POFFSET+0, p));
scheme_current_thread->error_buf = savebuf; thread->error_buf = savebuf;
READY_TO_RETURN; READY_TO_RETURN;
} }
@ -414,12 +417,13 @@ void os_wxMediaCanvas::OnDropFile(epathname x0)
READY_TO_RETURN; ASSELF wxMediaCanvas::OnDropFile(x0); READY_TO_RETURN; ASSELF wxMediaCanvas::OnDropFile(x0);
} else { } else {
mz_jmp_buf *savebuf, newbuf; mz_jmp_buf *savebuf, newbuf;
Scheme_Thread *thread;
p[POFFSET+0] = WITH_VAR_STACK(objscheme_bundle_pathname((char *)x0)); p[POFFSET+0] = WITH_VAR_STACK(objscheme_bundle_pathname((char *)x0));
savebuf = scheme_current_thread->error_buf; scheme_current_thread->error_buf = &newbuf; if (scheme_setjmp(newbuf)) { scheme_current_thread->error_buf = savebuf; scheme_clear_escape(); return; } ESCAPE_BLOCK(/*empty*/)
p[0] = (Scheme_Object *) ASSELF __gc_external; p[0] = (Scheme_Object *) ASSELF __gc_external;
v = WITH_VAR_STACK(scheme_apply(method, POFFSET+1, p)); v = WITH_VAR_STACK(scheme_apply(method, POFFSET+1, p));
scheme_current_thread->error_buf = savebuf; thread->error_buf = savebuf;
READY_TO_RETURN; READY_TO_RETURN;
} }
@ -451,13 +455,14 @@ Bool os_wxMediaCanvas::PreOnEvent(class wxWindow* x0, class wxMouseEvent* x1)
return FALSE; return FALSE;
} else { } else {
mz_jmp_buf *savebuf, newbuf; mz_jmp_buf *savebuf, newbuf;
Scheme_Thread *thread;
p[POFFSET+0] = WITH_VAR_STACK(objscheme_bundle_wxWindow(x0)); p[POFFSET+0] = WITH_VAR_STACK(objscheme_bundle_wxWindow(x0));
p[POFFSET+1] = WITH_VAR_STACK(objscheme_bundle_wxMouseEvent(x1)); p[POFFSET+1] = WITH_VAR_STACK(objscheme_bundle_wxMouseEvent(x1));
savebuf = scheme_current_thread->error_buf; scheme_current_thread->error_buf = &newbuf; if (scheme_setjmp(newbuf)) { scheme_current_thread->error_buf = savebuf; scheme_clear_escape(); return 1; } ESCAPE_BLOCK(1)
p[0] = (Scheme_Object *) ASSELF __gc_external; p[0] = (Scheme_Object *) ASSELF __gc_external;
v = WITH_VAR_STACK(scheme_apply(method, POFFSET+2, p)); v = WITH_VAR_STACK(scheme_apply(method, POFFSET+2, p));
scheme_current_thread->error_buf = savebuf; thread->error_buf = savebuf;
{ {
Bool resval; Bool resval;
@ -494,13 +499,14 @@ Bool os_wxMediaCanvas::PreOnChar(class wxWindow* x0, class wxKeyEvent* x1)
return FALSE; return FALSE;
} else { } else {
mz_jmp_buf *savebuf, newbuf; mz_jmp_buf *savebuf, newbuf;
Scheme_Thread *thread;
p[POFFSET+0] = WITH_VAR_STACK(objscheme_bundle_wxWindow(x0)); p[POFFSET+0] = WITH_VAR_STACK(objscheme_bundle_wxWindow(x0));
p[POFFSET+1] = WITH_VAR_STACK(objscheme_bundle_wxKeyEvent(x1)); p[POFFSET+1] = WITH_VAR_STACK(objscheme_bundle_wxKeyEvent(x1));
savebuf = scheme_current_thread->error_buf; scheme_current_thread->error_buf = &newbuf; if (scheme_setjmp(newbuf)) { scheme_current_thread->error_buf = savebuf; scheme_clear_escape(); return 1; } ESCAPE_BLOCK(1)
p[0] = (Scheme_Object *) ASSELF __gc_external; p[0] = (Scheme_Object *) ASSELF __gc_external;
v = WITH_VAR_STACK(scheme_apply(method, POFFSET+2, p)); v = WITH_VAR_STACK(scheme_apply(method, POFFSET+2, p));
scheme_current_thread->error_buf = savebuf; thread->error_buf = savebuf;
{ {
Bool resval; Bool resval;
@ -571,11 +577,12 @@ void os_wxMediaCanvas::OnSetFocus()
READY_TO_RETURN; ASSELF wxMediaCanvas::OnSetFocus(); READY_TO_RETURN; ASSELF wxMediaCanvas::OnSetFocus();
} else { } else {
mz_jmp_buf *savebuf, newbuf; mz_jmp_buf *savebuf, newbuf;
savebuf = scheme_current_thread->error_buf; scheme_current_thread->error_buf = &newbuf; if (scheme_setjmp(newbuf)) { scheme_current_thread->error_buf = savebuf; scheme_clear_escape(); return; } Scheme_Thread *thread;
ESCAPE_BLOCK(/*empty*/)
p[0] = (Scheme_Object *) ASSELF __gc_external; p[0] = (Scheme_Object *) ASSELF __gc_external;
v = WITH_VAR_STACK(scheme_apply(method, POFFSET+0, p)); v = WITH_VAR_STACK(scheme_apply(method, POFFSET+0, p));
scheme_current_thread->error_buf = savebuf; thread->error_buf = savebuf;
READY_TO_RETURN; READY_TO_RETURN;
} }
@ -605,11 +612,12 @@ void os_wxMediaCanvas::OnKillFocus()
READY_TO_RETURN; ASSELF wxMediaCanvas::OnKillFocus(); READY_TO_RETURN; ASSELF wxMediaCanvas::OnKillFocus();
} else { } else {
mz_jmp_buf *savebuf, newbuf; mz_jmp_buf *savebuf, newbuf;
savebuf = scheme_current_thread->error_buf; scheme_current_thread->error_buf = &newbuf; if (scheme_setjmp(newbuf)) { scheme_current_thread->error_buf = savebuf; scheme_clear_escape(); return; } Scheme_Thread *thread;
ESCAPE_BLOCK(/*empty*/)
p[0] = (Scheme_Object *) ASSELF __gc_external; p[0] = (Scheme_Object *) ASSELF __gc_external;
v = WITH_VAR_STACK(scheme_apply(method, POFFSET+0, p)); v = WITH_VAR_STACK(scheme_apply(method, POFFSET+0, p));
scheme_current_thread->error_buf = savebuf; thread->error_buf = savebuf;
READY_TO_RETURN; READY_TO_RETURN;
} }

View File

@ -643,6 +643,7 @@ static void CB_TOSCHEME(CB_REALCLASS *realobj, wxCommandEvent *event)
Scheme_Object *p[2]; Scheme_Object *p[2];
Scheme_Class_Object *obj; Scheme_Class_Object *obj;
mz_jmp_buf savebuf; mz_jmp_buf savebuf;
Scheme_Thread *thread;
SETUP_VAR_STACK(4); SETUP_VAR_STACK(4);
VAR_STACK_PUSH(0, obj); VAR_STACK_PUSH(0, obj);
VAR_STACK_PUSH(1, event); VAR_STACK_PUSH(1, event);
@ -662,12 +663,14 @@ static void CB_TOSCHEME(CB_REALCLASS *realobj, wxCommandEvent *event)
p[0] = (Scheme_Object *)obj; p[0] = (Scheme_Object *)obj;
p[1] = WITH_VAR_STACK(objscheme_bundle_wxCommandEvent(event)); p[1] = WITH_VAR_STACK(objscheme_bundle_wxCommandEvent(event));
COPY_JMPBUF(savebuf, scheme_error_buf); thread = scheme_get_current_thread();
COPY_JMPBUF(savebuf, *(thread->error_buf));
if (!scheme_setjmp(scheme_error_buf)) if (!scheme_setjmp(*(thread->error_buf)))
WITH_VAR_STACK(scheme_apply_multi(((CALLBACKCLASS *)obj->primdata)->callback_closure, 2, p)); WITH_VAR_STACK(scheme_apply_multi(((CALLBACKCLASS *)obj->primdata)->callback_closure, 2, p));
COPY_JMPBUF(scheme_error_buf, savebuf); thread = scheme_get_current_thread();
COPY_JMPBUF(*(thread->error_buf), savebuf);
READY_TO_RETURN; READY_TO_RETURN;
} }

View File

@ -223,13 +223,14 @@ void os_wxPanel::OnDropFile(epathname x0)
SET_VAR_STACK(); SET_VAR_STACK();
READY_TO_RETURN; ASSELF wxPanel::OnDropFile(x0); READY_TO_RETURN; ASSELF wxPanel::OnDropFile(x0);
} else { } else {
Scheme_Thread *thread;
mz_jmp_buf *savebuf, newbuf; mz_jmp_buf *savebuf, newbuf;
p[POFFSET+0] = WITH_VAR_STACK(objscheme_bundle_pathname((char *)x0)); p[POFFSET+0] = WITH_VAR_STACK(objscheme_bundle_pathname((char *)x0));
savebuf = scheme_current_thread->error_buf; scheme_current_thread->error_buf = &newbuf; if (scheme_setjmp(newbuf)) { scheme_current_thread->error_buf = savebuf; scheme_clear_escape(); return; } ESCAPE_BLOCK(/*empty*/)
p[0] = (Scheme_Object *) ASSELF __gc_external; p[0] = (Scheme_Object *) ASSELF __gc_external;
v = WITH_VAR_STACK(scheme_apply(method, POFFSET+1, p)); v = WITH_VAR_STACK(scheme_apply(method, POFFSET+1, p));
scheme_current_thread->error_buf = savebuf; thread->error_buf = savebuf;
READY_TO_RETURN; READY_TO_RETURN;
} }
@ -261,13 +262,14 @@ Bool os_wxPanel::PreOnEvent(class wxWindow* x0, class wxMouseEvent* x1)
return FALSE; return FALSE;
} else { } else {
mz_jmp_buf *savebuf, newbuf; mz_jmp_buf *savebuf, newbuf;
Scheme_Thread *thread;
p[POFFSET+0] = WITH_VAR_STACK(objscheme_bundle_wxWindow(x0)); p[POFFSET+0] = WITH_VAR_STACK(objscheme_bundle_wxWindow(x0));
p[POFFSET+1] = WITH_VAR_STACK(objscheme_bundle_wxMouseEvent(x1)); p[POFFSET+1] = WITH_VAR_STACK(objscheme_bundle_wxMouseEvent(x1));
savebuf = scheme_current_thread->error_buf; scheme_current_thread->error_buf = &newbuf; if (scheme_setjmp(newbuf)) { scheme_current_thread->error_buf = savebuf; scheme_clear_escape(); return 1; } ESCAPE_BLOCK(1)
p[0] = (Scheme_Object *) ASSELF __gc_external; p[0] = (Scheme_Object *) ASSELF __gc_external;
v = WITH_VAR_STACK(scheme_apply(method, POFFSET+2, p)); v = WITH_VAR_STACK(scheme_apply(method, POFFSET+2, p));
scheme_current_thread->error_buf = savebuf; thread->error_buf = savebuf;
{ {
Bool resval; Bool resval;
@ -304,13 +306,14 @@ Bool os_wxPanel::PreOnChar(class wxWindow* x0, class wxKeyEvent* x1)
return FALSE; return FALSE;
} else { } else {
mz_jmp_buf *savebuf, newbuf; mz_jmp_buf *savebuf, newbuf;
Scheme_Thread *thread;
p[POFFSET+0] = WITH_VAR_STACK(objscheme_bundle_wxWindow(x0)); p[POFFSET+0] = WITH_VAR_STACK(objscheme_bundle_wxWindow(x0));
p[POFFSET+1] = WITH_VAR_STACK(objscheme_bundle_wxKeyEvent(x1)); p[POFFSET+1] = WITH_VAR_STACK(objscheme_bundle_wxKeyEvent(x1));
savebuf = scheme_current_thread->error_buf; scheme_current_thread->error_buf = &newbuf; if (scheme_setjmp(newbuf)) { scheme_current_thread->error_buf = savebuf; scheme_clear_escape(); return 1; } ESCAPE_BLOCK(1)
p[0] = (Scheme_Object *) ASSELF __gc_external; p[0] = (Scheme_Object *) ASSELF __gc_external;
v = WITH_VAR_STACK(scheme_apply(method, POFFSET+2, p)); v = WITH_VAR_STACK(scheme_apply(method, POFFSET+2, p));
scheme_current_thread->error_buf = savebuf; thread->error_buf = savebuf;
{ {
Bool resval; Bool resval;
@ -381,11 +384,12 @@ void os_wxPanel::OnSetFocus()
READY_TO_RETURN; ASSELF wxPanel::OnSetFocus(); READY_TO_RETURN; ASSELF wxPanel::OnSetFocus();
} else { } else {
mz_jmp_buf *savebuf, newbuf; mz_jmp_buf *savebuf, newbuf;
savebuf = scheme_current_thread->error_buf; scheme_current_thread->error_buf = &newbuf; if (scheme_setjmp(newbuf)) { scheme_current_thread->error_buf = savebuf; scheme_clear_escape(); return; } Scheme_Thread *thread;
ESCAPE_BLOCK(/*empty*/)
p[0] = (Scheme_Object *) ASSELF __gc_external; p[0] = (Scheme_Object *) ASSELF __gc_external;
v = WITH_VAR_STACK(scheme_apply(method, POFFSET+0, p)); v = WITH_VAR_STACK(scheme_apply(method, POFFSET+0, p));
scheme_current_thread->error_buf = savebuf; thread->error_buf = savebuf;
READY_TO_RETURN; READY_TO_RETURN;
} }
@ -415,11 +419,12 @@ void os_wxPanel::OnKillFocus()
READY_TO_RETURN; ASSELF wxPanel::OnKillFocus(); READY_TO_RETURN; ASSELF wxPanel::OnKillFocus();
} else { } else {
mz_jmp_buf *savebuf, newbuf; mz_jmp_buf *savebuf, newbuf;
savebuf = scheme_current_thread->error_buf; scheme_current_thread->error_buf = &newbuf; if (scheme_setjmp(newbuf)) { scheme_current_thread->error_buf = savebuf; scheme_clear_escape(); return; } Scheme_Thread *thread;
ESCAPE_BLOCK(/*empty*/)
p[0] = (Scheme_Object *) ASSELF __gc_external; p[0] = (Scheme_Object *) ASSELF __gc_external;
v = WITH_VAR_STACK(scheme_apply(method, POFFSET+0, p)); v = WITH_VAR_STACK(scheme_apply(method, POFFSET+0, p));
scheme_current_thread->error_buf = savebuf; thread->error_buf = savebuf;
READY_TO_RETURN; READY_TO_RETURN;
} }
@ -1158,12 +1163,13 @@ void os_wxDialogBox::OnDropFile(epathname x0)
READY_TO_RETURN; ASSELF wxDialogBox::OnDropFile(x0); READY_TO_RETURN; ASSELF wxDialogBox::OnDropFile(x0);
} else { } else {
mz_jmp_buf *savebuf, newbuf; mz_jmp_buf *savebuf, newbuf;
Scheme_Thread *thread;
p[POFFSET+0] = WITH_VAR_STACK(objscheme_bundle_pathname((char *)x0)); p[POFFSET+0] = WITH_VAR_STACK(objscheme_bundle_pathname((char *)x0));
savebuf = scheme_current_thread->error_buf; scheme_current_thread->error_buf = &newbuf; if (scheme_setjmp(newbuf)) { scheme_current_thread->error_buf = savebuf; scheme_clear_escape(); return; } ESCAPE_BLOCK(/*empty*/)
p[0] = (Scheme_Object *) ASSELF __gc_external; p[0] = (Scheme_Object *) ASSELF __gc_external;
v = WITH_VAR_STACK(scheme_apply(method, POFFSET+1, p)); v = WITH_VAR_STACK(scheme_apply(method, POFFSET+1, p));
scheme_current_thread->error_buf = savebuf; thread->error_buf = savebuf;
READY_TO_RETURN; READY_TO_RETURN;
} }
@ -1195,13 +1201,14 @@ Bool os_wxDialogBox::PreOnEvent(class wxWindow* x0, class wxMouseEvent* x1)
return FALSE; return FALSE;
} else { } else {
mz_jmp_buf *savebuf, newbuf; mz_jmp_buf *savebuf, newbuf;
Scheme_Thread *thread;
p[POFFSET+0] = WITH_VAR_STACK(objscheme_bundle_wxWindow(x0)); p[POFFSET+0] = WITH_VAR_STACK(objscheme_bundle_wxWindow(x0));
p[POFFSET+1] = WITH_VAR_STACK(objscheme_bundle_wxMouseEvent(x1)); p[POFFSET+1] = WITH_VAR_STACK(objscheme_bundle_wxMouseEvent(x1));
savebuf = scheme_current_thread->error_buf; scheme_current_thread->error_buf = &newbuf; if (scheme_setjmp(newbuf)) { scheme_current_thread->error_buf = savebuf; scheme_clear_escape(); return 1; } ESCAPE_BLOCK(1)
p[0] = (Scheme_Object *) ASSELF __gc_external; p[0] = (Scheme_Object *) ASSELF __gc_external;
v = WITH_VAR_STACK(scheme_apply(method, POFFSET+2, p)); v = WITH_VAR_STACK(scheme_apply(method, POFFSET+2, p));
scheme_current_thread->error_buf = savebuf; thread->error_buf = savebuf;
{ {
Bool resval; Bool resval;
@ -1238,13 +1245,14 @@ Bool os_wxDialogBox::PreOnChar(class wxWindow* x0, class wxKeyEvent* x1)
return FALSE; return FALSE;
} else { } else {
mz_jmp_buf *savebuf, newbuf; mz_jmp_buf *savebuf, newbuf;
Scheme_Thread *thread;
p[POFFSET+0] = WITH_VAR_STACK(objscheme_bundle_wxWindow(x0)); p[POFFSET+0] = WITH_VAR_STACK(objscheme_bundle_wxWindow(x0));
p[POFFSET+1] = WITH_VAR_STACK(objscheme_bundle_wxKeyEvent(x1)); p[POFFSET+1] = WITH_VAR_STACK(objscheme_bundle_wxKeyEvent(x1));
savebuf = scheme_current_thread->error_buf; scheme_current_thread->error_buf = &newbuf; if (scheme_setjmp(newbuf)) { scheme_current_thread->error_buf = savebuf; scheme_clear_escape(); return 1; } ESCAPE_BLOCK(1)
p[0] = (Scheme_Object *) ASSELF __gc_external; p[0] = (Scheme_Object *) ASSELF __gc_external;
v = WITH_VAR_STACK(scheme_apply(method, POFFSET+2, p)); v = WITH_VAR_STACK(scheme_apply(method, POFFSET+2, p));
scheme_current_thread->error_buf = savebuf; thread->error_buf = savebuf;
{ {
Bool resval; Bool resval;
@ -1315,11 +1323,12 @@ void os_wxDialogBox::OnSetFocus()
READY_TO_RETURN; ASSELF wxDialogBox::OnSetFocus(); READY_TO_RETURN; ASSELF wxDialogBox::OnSetFocus();
} else { } else {
mz_jmp_buf *savebuf, newbuf; mz_jmp_buf *savebuf, newbuf;
savebuf = scheme_current_thread->error_buf; scheme_current_thread->error_buf = &newbuf; if (scheme_setjmp(newbuf)) { scheme_current_thread->error_buf = savebuf; scheme_clear_escape(); return; } Scheme_Thread *thread;
ESCAPE_BLOCK(/*empty*/)
p[0] = (Scheme_Object *) ASSELF __gc_external; p[0] = (Scheme_Object *) ASSELF __gc_external;
v = WITH_VAR_STACK(scheme_apply(method, POFFSET+0, p)); v = WITH_VAR_STACK(scheme_apply(method, POFFSET+0, p));
scheme_current_thread->error_buf = savebuf; thread->error_buf = savebuf;
READY_TO_RETURN; READY_TO_RETURN;
} }
@ -1349,11 +1358,12 @@ void os_wxDialogBox::OnKillFocus()
READY_TO_RETURN; ASSELF wxDialogBox::OnKillFocus(); READY_TO_RETURN; ASSELF wxDialogBox::OnKillFocus();
} else { } else {
mz_jmp_buf *savebuf, newbuf; mz_jmp_buf *savebuf, newbuf;
savebuf = scheme_current_thread->error_buf; scheme_current_thread->error_buf = &newbuf; if (scheme_setjmp(newbuf)) { scheme_current_thread->error_buf = savebuf; scheme_clear_escape(); return; } Scheme_Thread *thread;
ESCAPE_BLOCK(/*empty*/)
p[0] = (Scheme_Object *) ASSELF __gc_external; p[0] = (Scheme_Object *) ASSELF __gc_external;
v = WITH_VAR_STACK(scheme_apply(method, POFFSET+0, p)); v = WITH_VAR_STACK(scheme_apply(method, POFFSET+0, p));
scheme_current_thread->error_buf = savebuf; thread->error_buf = savebuf;
READY_TO_RETURN; READY_TO_RETURN;
} }
@ -1383,11 +1393,12 @@ Bool os_wxDialogBox::OnClose()
READY_TO_RETURN; return ASSELF wxDialogBox::OnClose(); READY_TO_RETURN; return ASSELF wxDialogBox::OnClose();
} else { } else {
mz_jmp_buf *savebuf, newbuf; mz_jmp_buf *savebuf, newbuf;
savebuf = scheme_current_thread->error_buf; scheme_current_thread->error_buf = &newbuf; if (scheme_setjmp(newbuf)) { scheme_current_thread->error_buf = savebuf; scheme_clear_escape(); return 0; } Scheme_Thread *thread;
ESCAPE_BLOCK(0)
p[0] = (Scheme_Object *) ASSELF __gc_external; p[0] = (Scheme_Object *) ASSELF __gc_external;
v = WITH_VAR_STACK(scheme_apply(method, POFFSET+0, p)); v = WITH_VAR_STACK(scheme_apply(method, POFFSET+0, p));
scheme_current_thread->error_buf = savebuf; thread->error_buf = savebuf;
{ {
Bool resval; Bool resval;
@ -1422,12 +1433,13 @@ void os_wxDialogBox::OnActivate(Bool x0)
READY_TO_RETURN; ASSELF wxDialogBox::OnActivate(x0); READY_TO_RETURN; ASSELF wxDialogBox::OnActivate(x0);
} else { } else {
mz_jmp_buf *savebuf, newbuf; mz_jmp_buf *savebuf, newbuf;
Scheme_Thread *thread;
p[POFFSET+0] = (x0 ? scheme_true : scheme_false); p[POFFSET+0] = (x0 ? scheme_true : scheme_false);
savebuf = scheme_current_thread->error_buf; scheme_current_thread->error_buf = &newbuf; if (scheme_setjmp(newbuf)) { scheme_current_thread->error_buf = savebuf; scheme_clear_escape(); return; } ESCAPE_BLOCK(/*empty*/)
p[0] = (Scheme_Object *) ASSELF __gc_external; p[0] = (Scheme_Object *) ASSELF __gc_external;
v = WITH_VAR_STACK(scheme_apply(method, POFFSET+1, p)); v = WITH_VAR_STACK(scheme_apply(method, POFFSET+1, p));
scheme_current_thread->error_buf = savebuf; thread->error_buf = savebuf;
READY_TO_RETURN; READY_TO_RETURN;
} }

View File

@ -419,12 +419,13 @@ void os_wxRadioBox::OnDropFile(epathname x0)
READY_TO_RETURN; ASSELF wxRadioBox::OnDropFile(x0); READY_TO_RETURN; ASSELF wxRadioBox::OnDropFile(x0);
} else { } else {
mz_jmp_buf *savebuf, newbuf; mz_jmp_buf *savebuf, newbuf;
Scheme_Thread *thread;
p[POFFSET+0] = WITH_VAR_STACK(objscheme_bundle_pathname((char *)x0)); p[POFFSET+0] = WITH_VAR_STACK(objscheme_bundle_pathname((char *)x0));
savebuf = scheme_current_thread->error_buf; scheme_current_thread->error_buf = &newbuf; if (scheme_setjmp(newbuf)) { scheme_current_thread->error_buf = savebuf; scheme_clear_escape(); return; } ESCAPE_BLOCK(/*empty*/)
p[0] = (Scheme_Object *) ASSELF __gc_external; p[0] = (Scheme_Object *) ASSELF __gc_external;
v = WITH_VAR_STACK(scheme_apply(method, POFFSET+1, p)); v = WITH_VAR_STACK(scheme_apply(method, POFFSET+1, p));
scheme_current_thread->error_buf = savebuf; thread->error_buf = savebuf;
READY_TO_RETURN; READY_TO_RETURN;
} }
@ -456,13 +457,14 @@ Bool os_wxRadioBox::PreOnEvent(class wxWindow* x0, class wxMouseEvent* x1)
return FALSE; return FALSE;
} else { } else {
mz_jmp_buf *savebuf, newbuf; mz_jmp_buf *savebuf, newbuf;
Scheme_Thread *thread;
p[POFFSET+0] = WITH_VAR_STACK(objscheme_bundle_wxWindow(x0)); p[POFFSET+0] = WITH_VAR_STACK(objscheme_bundle_wxWindow(x0));
p[POFFSET+1] = WITH_VAR_STACK(objscheme_bundle_wxMouseEvent(x1)); p[POFFSET+1] = WITH_VAR_STACK(objscheme_bundle_wxMouseEvent(x1));
savebuf = scheme_current_thread->error_buf; scheme_current_thread->error_buf = &newbuf; if (scheme_setjmp(newbuf)) { scheme_current_thread->error_buf = savebuf; scheme_clear_escape(); return 1; } ESCAPE_BLOCK(1)
p[0] = (Scheme_Object *) ASSELF __gc_external; p[0] = (Scheme_Object *) ASSELF __gc_external;
v = WITH_VAR_STACK(scheme_apply(method, POFFSET+2, p)); v = WITH_VAR_STACK(scheme_apply(method, POFFSET+2, p));
scheme_current_thread->error_buf = savebuf; thread->error_buf = savebuf;
{ {
Bool resval; Bool resval;
@ -499,13 +501,14 @@ Bool os_wxRadioBox::PreOnChar(class wxWindow* x0, class wxKeyEvent* x1)
return FALSE; return FALSE;
} else { } else {
mz_jmp_buf *savebuf, newbuf; mz_jmp_buf *savebuf, newbuf;
Scheme_Thread *thread;
p[POFFSET+0] = WITH_VAR_STACK(objscheme_bundle_wxWindow(x0)); p[POFFSET+0] = WITH_VAR_STACK(objscheme_bundle_wxWindow(x0));
p[POFFSET+1] = WITH_VAR_STACK(objscheme_bundle_wxKeyEvent(x1)); p[POFFSET+1] = WITH_VAR_STACK(objscheme_bundle_wxKeyEvent(x1));
savebuf = scheme_current_thread->error_buf; scheme_current_thread->error_buf = &newbuf; if (scheme_setjmp(newbuf)) { scheme_current_thread->error_buf = savebuf; scheme_clear_escape(); return 1; } ESCAPE_BLOCK(1)
p[0] = (Scheme_Object *) ASSELF __gc_external; p[0] = (Scheme_Object *) ASSELF __gc_external;
v = WITH_VAR_STACK(scheme_apply(method, POFFSET+2, p)); v = WITH_VAR_STACK(scheme_apply(method, POFFSET+2, p));
scheme_current_thread->error_buf = savebuf; thread->error_buf = savebuf;
{ {
Bool resval; Bool resval;
@ -576,11 +579,12 @@ void os_wxRadioBox::OnSetFocus()
READY_TO_RETURN; ASSELF wxRadioBox::OnSetFocus(); READY_TO_RETURN; ASSELF wxRadioBox::OnSetFocus();
} else { } else {
mz_jmp_buf *savebuf, newbuf; mz_jmp_buf *savebuf, newbuf;
savebuf = scheme_current_thread->error_buf; scheme_current_thread->error_buf = &newbuf; if (scheme_setjmp(newbuf)) { scheme_current_thread->error_buf = savebuf; scheme_clear_escape(); return; } Scheme_Thread *thread;
ESCAPE_BLOCK(/*empty*/)
p[0] = (Scheme_Object *) ASSELF __gc_external; p[0] = (Scheme_Object *) ASSELF __gc_external;
v = WITH_VAR_STACK(scheme_apply(method, POFFSET+0, p)); v = WITH_VAR_STACK(scheme_apply(method, POFFSET+0, p));
scheme_current_thread->error_buf = savebuf; thread->error_buf = savebuf;
READY_TO_RETURN; READY_TO_RETURN;
} }
@ -610,11 +614,12 @@ void os_wxRadioBox::OnKillFocus()
READY_TO_RETURN; ASSELF wxRadioBox::OnKillFocus(); READY_TO_RETURN; ASSELF wxRadioBox::OnKillFocus();
} else { } else {
mz_jmp_buf *savebuf, newbuf; mz_jmp_buf *savebuf, newbuf;
savebuf = scheme_current_thread->error_buf; scheme_current_thread->error_buf = &newbuf; if (scheme_setjmp(newbuf)) { scheme_current_thread->error_buf = savebuf; scheme_clear_escape(); return; } Scheme_Thread *thread;
ESCAPE_BLOCK(/*empty*/)
p[0] = (Scheme_Object *) ASSELF __gc_external; p[0] = (Scheme_Object *) ASSELF __gc_external;
v = WITH_VAR_STACK(scheme_apply(method, POFFSET+0, p)); v = WITH_VAR_STACK(scheme_apply(method, POFFSET+0, p));
scheme_current_thread->error_buf = savebuf; thread->error_buf = savebuf;
READY_TO_RETURN; READY_TO_RETURN;
} }
@ -1156,6 +1161,7 @@ static void CB_TOSCHEME(CB_REALCLASS *realobj, wxCommandEvent *event)
Scheme_Object *p[2]; Scheme_Object *p[2];
Scheme_Class_Object *obj; Scheme_Class_Object *obj;
mz_jmp_buf savebuf; mz_jmp_buf savebuf;
Scheme_Thread *thread;
SETUP_VAR_STACK(4); SETUP_VAR_STACK(4);
VAR_STACK_PUSH(0, obj); VAR_STACK_PUSH(0, obj);
VAR_STACK_PUSH(1, event); VAR_STACK_PUSH(1, event);
@ -1175,12 +1181,14 @@ static void CB_TOSCHEME(CB_REALCLASS *realobj, wxCommandEvent *event)
p[0] = (Scheme_Object *)obj; p[0] = (Scheme_Object *)obj;
p[1] = WITH_VAR_STACK(objscheme_bundle_wxCommandEvent(event)); p[1] = WITH_VAR_STACK(objscheme_bundle_wxCommandEvent(event));
COPY_JMPBUF(savebuf, scheme_error_buf); thread = scheme_get_current_thread();
COPY_JMPBUF(savebuf, *(thread->error_buf));
if (!scheme_setjmp(scheme_error_buf)) if (!scheme_setjmp(*(thread->error_buf)))
WITH_VAR_STACK(scheme_apply_multi(((CALLBACKCLASS *)obj->primdata)->callback_closure, 2, p)); WITH_VAR_STACK(scheme_apply_multi(((CALLBACKCLASS *)obj->primdata)->callback_closure, 2, p));
COPY_JMPBUF(scheme_error_buf, savebuf); thread = scheme_get_current_thread();
COPY_JMPBUF(*(thread->error_buf), savebuf);
READY_TO_RETURN; READY_TO_RETURN;
} }

View File

@ -190,12 +190,13 @@ void os_wxSlider::OnDropFile(epathname x0)
READY_TO_RETURN; ASSELF wxSlider::OnDropFile(x0); READY_TO_RETURN; ASSELF wxSlider::OnDropFile(x0);
} else { } else {
mz_jmp_buf *savebuf, newbuf; mz_jmp_buf *savebuf, newbuf;
Scheme_Thread *thread;
p[POFFSET+0] = WITH_VAR_STACK(objscheme_bundle_pathname((char *)x0)); p[POFFSET+0] = WITH_VAR_STACK(objscheme_bundle_pathname((char *)x0));
savebuf = scheme_current_thread->error_buf; scheme_current_thread->error_buf = &newbuf; if (scheme_setjmp(newbuf)) { scheme_current_thread->error_buf = savebuf; scheme_clear_escape(); return; } ESCAPE_BLOCK(/*empty*/)
p[0] = (Scheme_Object *) ASSELF __gc_external; p[0] = (Scheme_Object *) ASSELF __gc_external;
v = WITH_VAR_STACK(scheme_apply(method, POFFSET+1, p)); v = WITH_VAR_STACK(scheme_apply(method, POFFSET+1, p));
scheme_current_thread->error_buf = savebuf; thread->error_buf = savebuf;
READY_TO_RETURN; READY_TO_RETURN;
} }
@ -227,13 +228,14 @@ Bool os_wxSlider::PreOnEvent(class wxWindow* x0, class wxMouseEvent* x1)
return FALSE; return FALSE;
} else { } else {
mz_jmp_buf *savebuf, newbuf; mz_jmp_buf *savebuf, newbuf;
Scheme_Thread *thread;
p[POFFSET+0] = WITH_VAR_STACK(objscheme_bundle_wxWindow(x0)); p[POFFSET+0] = WITH_VAR_STACK(objscheme_bundle_wxWindow(x0));
p[POFFSET+1] = WITH_VAR_STACK(objscheme_bundle_wxMouseEvent(x1)); p[POFFSET+1] = WITH_VAR_STACK(objscheme_bundle_wxMouseEvent(x1));
savebuf = scheme_current_thread->error_buf; scheme_current_thread->error_buf = &newbuf; if (scheme_setjmp(newbuf)) { scheme_current_thread->error_buf = savebuf; scheme_clear_escape(); return 1; } ESCAPE_BLOCK(1)
p[0] = (Scheme_Object *) ASSELF __gc_external; p[0] = (Scheme_Object *) ASSELF __gc_external;
v = WITH_VAR_STACK(scheme_apply(method, POFFSET+2, p)); v = WITH_VAR_STACK(scheme_apply(method, POFFSET+2, p));
scheme_current_thread->error_buf = savebuf; thread->error_buf = savebuf;
{ {
Bool resval; Bool resval;
@ -270,13 +272,14 @@ Bool os_wxSlider::PreOnChar(class wxWindow* x0, class wxKeyEvent* x1)
return FALSE; return FALSE;
} else { } else {
mz_jmp_buf *savebuf, newbuf; mz_jmp_buf *savebuf, newbuf;
Scheme_Thread *thread;
p[POFFSET+0] = WITH_VAR_STACK(objscheme_bundle_wxWindow(x0)); p[POFFSET+0] = WITH_VAR_STACK(objscheme_bundle_wxWindow(x0));
p[POFFSET+1] = WITH_VAR_STACK(objscheme_bundle_wxKeyEvent(x1)); p[POFFSET+1] = WITH_VAR_STACK(objscheme_bundle_wxKeyEvent(x1));
savebuf = scheme_current_thread->error_buf; scheme_current_thread->error_buf = &newbuf; if (scheme_setjmp(newbuf)) { scheme_current_thread->error_buf = savebuf; scheme_clear_escape(); return 1; } ESCAPE_BLOCK(1)
p[0] = (Scheme_Object *) ASSELF __gc_external; p[0] = (Scheme_Object *) ASSELF __gc_external;
v = WITH_VAR_STACK(scheme_apply(method, POFFSET+2, p)); v = WITH_VAR_STACK(scheme_apply(method, POFFSET+2, p));
scheme_current_thread->error_buf = savebuf; thread->error_buf = savebuf;
{ {
Bool resval; Bool resval;
@ -347,11 +350,12 @@ void os_wxSlider::OnSetFocus()
READY_TO_RETURN; ASSELF wxSlider::OnSetFocus(); READY_TO_RETURN; ASSELF wxSlider::OnSetFocus();
} else { } else {
mz_jmp_buf *savebuf, newbuf; mz_jmp_buf *savebuf, newbuf;
savebuf = scheme_current_thread->error_buf; scheme_current_thread->error_buf = &newbuf; if (scheme_setjmp(newbuf)) { scheme_current_thread->error_buf = savebuf; scheme_clear_escape(); return; } Scheme_Thread *thread;
ESCAPE_BLOCK(/*empty*/)
p[0] = (Scheme_Object *) ASSELF __gc_external; p[0] = (Scheme_Object *) ASSELF __gc_external;
v = WITH_VAR_STACK(scheme_apply(method, POFFSET+0, p)); v = WITH_VAR_STACK(scheme_apply(method, POFFSET+0, p));
scheme_current_thread->error_buf = savebuf; thread->error_buf = savebuf;
READY_TO_RETURN; READY_TO_RETURN;
} }
@ -381,11 +385,12 @@ void os_wxSlider::OnKillFocus()
READY_TO_RETURN; ASSELF wxSlider::OnKillFocus(); READY_TO_RETURN; ASSELF wxSlider::OnKillFocus();
} else { } else {
mz_jmp_buf *savebuf, newbuf; mz_jmp_buf *savebuf, newbuf;
savebuf = scheme_current_thread->error_buf; scheme_current_thread->error_buf = &newbuf; if (scheme_setjmp(newbuf)) { scheme_current_thread->error_buf = savebuf; scheme_clear_escape(); return; } Scheme_Thread *thread;
ESCAPE_BLOCK(/*empty*/)
p[0] = (Scheme_Object *) ASSELF __gc_external; p[0] = (Scheme_Object *) ASSELF __gc_external;
v = WITH_VAR_STACK(scheme_apply(method, POFFSET+0, p)); v = WITH_VAR_STACK(scheme_apply(method, POFFSET+0, p));
scheme_current_thread->error_buf = savebuf; thread->error_buf = savebuf;
READY_TO_RETURN; READY_TO_RETURN;
} }
@ -754,6 +759,7 @@ static void CB_TOSCHEME(CB_REALCLASS *realobj, wxCommandEvent *event)
Scheme_Object *p[2]; Scheme_Object *p[2];
Scheme_Class_Object *obj; Scheme_Class_Object *obj;
mz_jmp_buf savebuf; mz_jmp_buf savebuf;
Scheme_Thread *thread;
SETUP_VAR_STACK(4); SETUP_VAR_STACK(4);
VAR_STACK_PUSH(0, obj); VAR_STACK_PUSH(0, obj);
VAR_STACK_PUSH(1, event); VAR_STACK_PUSH(1, event);
@ -773,12 +779,14 @@ static void CB_TOSCHEME(CB_REALCLASS *realobj, wxCommandEvent *event)
p[0] = (Scheme_Object *)obj; p[0] = (Scheme_Object *)obj;
p[1] = WITH_VAR_STACK(objscheme_bundle_wxCommandEvent(event)); p[1] = WITH_VAR_STACK(objscheme_bundle_wxCommandEvent(event));
COPY_JMPBUF(savebuf, scheme_error_buf); thread = scheme_get_current_thread();
COPY_JMPBUF(savebuf, *(thread->error_buf));
if (!scheme_setjmp(scheme_error_buf)) if (!scheme_setjmp(*(thread->error_buf)))
WITH_VAR_STACK(scheme_apply_multi(((CALLBACKCLASS *)obj->primdata)->callback_closure, 2, p)); WITH_VAR_STACK(scheme_apply_multi(((CALLBACKCLASS *)obj->primdata)->callback_closure, 2, p));
COPY_JMPBUF(scheme_error_buf, savebuf); thread = scheme_get_current_thread();
COPY_JMPBUF(*(thread->error_buf), savebuf);
READY_TO_RETURN; READY_TO_RETURN;
} }

View File

@ -338,12 +338,13 @@ void os_wxTabChoice::OnDropFile(epathname x0)
READY_TO_RETURN; ASSELF wxTabChoice::OnDropFile(x0); READY_TO_RETURN; ASSELF wxTabChoice::OnDropFile(x0);
} else { } else {
mz_jmp_buf *savebuf, newbuf; mz_jmp_buf *savebuf, newbuf;
Scheme_Thread *thread;
p[POFFSET+0] = WITH_VAR_STACK(objscheme_bundle_pathname((char *)x0)); p[POFFSET+0] = WITH_VAR_STACK(objscheme_bundle_pathname((char *)x0));
savebuf = scheme_current_thread->error_buf; scheme_current_thread->error_buf = &newbuf; if (scheme_setjmp(newbuf)) { scheme_current_thread->error_buf = savebuf; scheme_clear_escape(); return; } ESCAPE_BLOCK(/*empty*/)
p[0] = (Scheme_Object *) ASSELF __gc_external; p[0] = (Scheme_Object *) ASSELF __gc_external;
v = WITH_VAR_STACK(scheme_apply(method, POFFSET+1, p)); v = WITH_VAR_STACK(scheme_apply(method, POFFSET+1, p));
scheme_current_thread->error_buf = savebuf; thread->error_buf = savebuf;
READY_TO_RETURN; READY_TO_RETURN;
} }
@ -375,13 +376,14 @@ Bool os_wxTabChoice::PreOnEvent(class wxWindow* x0, class wxMouseEvent* x1)
return FALSE; return FALSE;
} else { } else {
mz_jmp_buf *savebuf, newbuf; mz_jmp_buf *savebuf, newbuf;
Scheme_Thread *thread;
p[POFFSET+0] = WITH_VAR_STACK(objscheme_bundle_wxWindow(x0)); p[POFFSET+0] = WITH_VAR_STACK(objscheme_bundle_wxWindow(x0));
p[POFFSET+1] = WITH_VAR_STACK(objscheme_bundle_wxMouseEvent(x1)); p[POFFSET+1] = WITH_VAR_STACK(objscheme_bundle_wxMouseEvent(x1));
savebuf = scheme_current_thread->error_buf; scheme_current_thread->error_buf = &newbuf; if (scheme_setjmp(newbuf)) { scheme_current_thread->error_buf = savebuf; scheme_clear_escape(); return 1; } ESCAPE_BLOCK(1)
p[0] = (Scheme_Object *) ASSELF __gc_external; p[0] = (Scheme_Object *) ASSELF __gc_external;
v = WITH_VAR_STACK(scheme_apply(method, POFFSET+2, p)); v = WITH_VAR_STACK(scheme_apply(method, POFFSET+2, p));
scheme_current_thread->error_buf = savebuf; thread->error_buf = savebuf;
{ {
Bool resval; Bool resval;
@ -418,13 +420,14 @@ Bool os_wxTabChoice::PreOnChar(class wxWindow* x0, class wxKeyEvent* x1)
return FALSE; return FALSE;
} else { } else {
mz_jmp_buf *savebuf, newbuf; mz_jmp_buf *savebuf, newbuf;
Scheme_Thread *thread;
p[POFFSET+0] = WITH_VAR_STACK(objscheme_bundle_wxWindow(x0)); p[POFFSET+0] = WITH_VAR_STACK(objscheme_bundle_wxWindow(x0));
p[POFFSET+1] = WITH_VAR_STACK(objscheme_bundle_wxKeyEvent(x1)); p[POFFSET+1] = WITH_VAR_STACK(objscheme_bundle_wxKeyEvent(x1));
savebuf = scheme_current_thread->error_buf; scheme_current_thread->error_buf = &newbuf; if (scheme_setjmp(newbuf)) { scheme_current_thread->error_buf = savebuf; scheme_clear_escape(); return 1; } ESCAPE_BLOCK(1)
p[0] = (Scheme_Object *) ASSELF __gc_external; p[0] = (Scheme_Object *) ASSELF __gc_external;
v = WITH_VAR_STACK(scheme_apply(method, POFFSET+2, p)); v = WITH_VAR_STACK(scheme_apply(method, POFFSET+2, p));
scheme_current_thread->error_buf = savebuf; thread->error_buf = savebuf;
{ {
Bool resval; Bool resval;
@ -495,11 +498,12 @@ void os_wxTabChoice::OnSetFocus()
READY_TO_RETURN; ASSELF wxTabChoice::OnSetFocus(); READY_TO_RETURN; ASSELF wxTabChoice::OnSetFocus();
} else { } else {
mz_jmp_buf *savebuf, newbuf; mz_jmp_buf *savebuf, newbuf;
savebuf = scheme_current_thread->error_buf; scheme_current_thread->error_buf = &newbuf; if (scheme_setjmp(newbuf)) { scheme_current_thread->error_buf = savebuf; scheme_clear_escape(); return; } Scheme_Thread *thread;
ESCAPE_BLOCK(/*empty*/)
p[0] = (Scheme_Object *) ASSELF __gc_external; p[0] = (Scheme_Object *) ASSELF __gc_external;
v = WITH_VAR_STACK(scheme_apply(method, POFFSET+0, p)); v = WITH_VAR_STACK(scheme_apply(method, POFFSET+0, p));
scheme_current_thread->error_buf = savebuf; thread->error_buf = savebuf;
READY_TO_RETURN; READY_TO_RETURN;
} }
@ -529,11 +533,12 @@ void os_wxTabChoice::OnKillFocus()
READY_TO_RETURN; ASSELF wxTabChoice::OnKillFocus(); READY_TO_RETURN; ASSELF wxTabChoice::OnKillFocus();
} else { } else {
mz_jmp_buf *savebuf, newbuf; mz_jmp_buf *savebuf, newbuf;
savebuf = scheme_current_thread->error_buf; scheme_current_thread->error_buf = &newbuf; if (scheme_setjmp(newbuf)) { scheme_current_thread->error_buf = savebuf; scheme_clear_escape(); return; } Scheme_Thread *thread;
ESCAPE_BLOCK(/*empty*/)
p[0] = (Scheme_Object *) ASSELF __gc_external; p[0] = (Scheme_Object *) ASSELF __gc_external;
v = WITH_VAR_STACK(scheme_apply(method, POFFSET+0, p)); v = WITH_VAR_STACK(scheme_apply(method, POFFSET+0, p));
scheme_current_thread->error_buf = savebuf; thread->error_buf = savebuf;
READY_TO_RETURN; READY_TO_RETURN;
} }
@ -1055,6 +1060,7 @@ static void CB_TOSCHEME(CB_REALCLASS *realobj, wxCommandEvent *event)
Scheme_Object *p[2]; Scheme_Object *p[2];
Scheme_Class_Object *obj; Scheme_Class_Object *obj;
mz_jmp_buf savebuf; mz_jmp_buf savebuf;
Scheme_Thread *thread;
SETUP_VAR_STACK(4); SETUP_VAR_STACK(4);
VAR_STACK_PUSH(0, obj); VAR_STACK_PUSH(0, obj);
VAR_STACK_PUSH(1, event); VAR_STACK_PUSH(1, event);
@ -1074,12 +1080,14 @@ static void CB_TOSCHEME(CB_REALCLASS *realobj, wxCommandEvent *event)
p[0] = (Scheme_Object *)obj; p[0] = (Scheme_Object *)obj;
p[1] = WITH_VAR_STACK(objscheme_bundle_wxCommandEvent(event)); p[1] = WITH_VAR_STACK(objscheme_bundle_wxCommandEvent(event));
COPY_JMPBUF(savebuf, scheme_error_buf); thread = scheme_get_current_thread();
COPY_JMPBUF(savebuf, *(thread->error_buf));
if (!scheme_setjmp(scheme_error_buf)) if (!scheme_setjmp(*(thread->error_buf)))
WITH_VAR_STACK(scheme_apply_multi(((CALLBACKCLASS *)obj->primdata)->callback_closure, 2, p)); WITH_VAR_STACK(scheme_apply_multi(((CALLBACKCLASS *)obj->primdata)->callback_closure, 2, p));
COPY_JMPBUF(scheme_error_buf, savebuf); thread = scheme_get_current_thread();
COPY_JMPBUF(*(thread->error_buf), savebuf);
READY_TO_RETURN; READY_TO_RETURN;
} }
@ -1184,12 +1192,13 @@ void os_wxGroupBox::OnDropFile(epathname x0)
READY_TO_RETURN; ASSELF wxGroupBox::OnDropFile(x0); READY_TO_RETURN; ASSELF wxGroupBox::OnDropFile(x0);
} else { } else {
mz_jmp_buf *savebuf, newbuf; mz_jmp_buf *savebuf, newbuf;
Scheme_Thread *thread;
p[POFFSET+0] = WITH_VAR_STACK(objscheme_bundle_pathname((char *)x0)); p[POFFSET+0] = WITH_VAR_STACK(objscheme_bundle_pathname((char *)x0));
savebuf = scheme_current_thread->error_buf; scheme_current_thread->error_buf = &newbuf; if (scheme_setjmp(newbuf)) { scheme_current_thread->error_buf = savebuf; scheme_clear_escape(); return; } ESCAPE_BLOCK(/*empty*/)
p[0] = (Scheme_Object *) ASSELF __gc_external; p[0] = (Scheme_Object *) ASSELF __gc_external;
v = WITH_VAR_STACK(scheme_apply(method, POFFSET+1, p)); v = WITH_VAR_STACK(scheme_apply(method, POFFSET+1, p));
scheme_current_thread->error_buf = savebuf; thread->error_buf = savebuf;
READY_TO_RETURN; READY_TO_RETURN;
} }
@ -1221,13 +1230,14 @@ Bool os_wxGroupBox::PreOnEvent(class wxWindow* x0, class wxMouseEvent* x1)
return FALSE; return FALSE;
} else { } else {
mz_jmp_buf *savebuf, newbuf; mz_jmp_buf *savebuf, newbuf;
Scheme_Thread *thread;
p[POFFSET+0] = WITH_VAR_STACK(objscheme_bundle_wxWindow(x0)); p[POFFSET+0] = WITH_VAR_STACK(objscheme_bundle_wxWindow(x0));
p[POFFSET+1] = WITH_VAR_STACK(objscheme_bundle_wxMouseEvent(x1)); p[POFFSET+1] = WITH_VAR_STACK(objscheme_bundle_wxMouseEvent(x1));
savebuf = scheme_current_thread->error_buf; scheme_current_thread->error_buf = &newbuf; if (scheme_setjmp(newbuf)) { scheme_current_thread->error_buf = savebuf; scheme_clear_escape(); return 1; } ESCAPE_BLOCK(1)
p[0] = (Scheme_Object *) ASSELF __gc_external; p[0] = (Scheme_Object *) ASSELF __gc_external;
v = WITH_VAR_STACK(scheme_apply(method, POFFSET+2, p)); v = WITH_VAR_STACK(scheme_apply(method, POFFSET+2, p));
scheme_current_thread->error_buf = savebuf; thread->error_buf = savebuf;
{ {
Bool resval; Bool resval;
@ -1264,13 +1274,14 @@ Bool os_wxGroupBox::PreOnChar(class wxWindow* x0, class wxKeyEvent* x1)
return FALSE; return FALSE;
} else { } else {
mz_jmp_buf *savebuf, newbuf; mz_jmp_buf *savebuf, newbuf;
Scheme_Thread *thread;
p[POFFSET+0] = WITH_VAR_STACK(objscheme_bundle_wxWindow(x0)); p[POFFSET+0] = WITH_VAR_STACK(objscheme_bundle_wxWindow(x0));
p[POFFSET+1] = WITH_VAR_STACK(objscheme_bundle_wxKeyEvent(x1)); p[POFFSET+1] = WITH_VAR_STACK(objscheme_bundle_wxKeyEvent(x1));
savebuf = scheme_current_thread->error_buf; scheme_current_thread->error_buf = &newbuf; if (scheme_setjmp(newbuf)) { scheme_current_thread->error_buf = savebuf; scheme_clear_escape(); return 1; } ESCAPE_BLOCK(1)
p[0] = (Scheme_Object *) ASSELF __gc_external; p[0] = (Scheme_Object *) ASSELF __gc_external;
v = WITH_VAR_STACK(scheme_apply(method, POFFSET+2, p)); v = WITH_VAR_STACK(scheme_apply(method, POFFSET+2, p));
scheme_current_thread->error_buf = savebuf; thread->error_buf = savebuf;
{ {
Bool resval; Bool resval;
@ -1341,11 +1352,12 @@ void os_wxGroupBox::OnSetFocus()
READY_TO_RETURN; ASSELF wxGroupBox::OnSetFocus(); READY_TO_RETURN; ASSELF wxGroupBox::OnSetFocus();
} else { } else {
mz_jmp_buf *savebuf, newbuf; mz_jmp_buf *savebuf, newbuf;
savebuf = scheme_current_thread->error_buf; scheme_current_thread->error_buf = &newbuf; if (scheme_setjmp(newbuf)) { scheme_current_thread->error_buf = savebuf; scheme_clear_escape(); return; } Scheme_Thread *thread;
ESCAPE_BLOCK(/*empty*/)
p[0] = (Scheme_Object *) ASSELF __gc_external; p[0] = (Scheme_Object *) ASSELF __gc_external;
v = WITH_VAR_STACK(scheme_apply(method, POFFSET+0, p)); v = WITH_VAR_STACK(scheme_apply(method, POFFSET+0, p));
scheme_current_thread->error_buf = savebuf; thread->error_buf = savebuf;
READY_TO_RETURN; READY_TO_RETURN;
} }
@ -1375,11 +1387,12 @@ void os_wxGroupBox::OnKillFocus()
READY_TO_RETURN; ASSELF wxGroupBox::OnKillFocus(); READY_TO_RETURN; ASSELF wxGroupBox::OnKillFocus();
} else { } else {
mz_jmp_buf *savebuf, newbuf; mz_jmp_buf *savebuf, newbuf;
savebuf = scheme_current_thread->error_buf; scheme_current_thread->error_buf = &newbuf; if (scheme_setjmp(newbuf)) { scheme_current_thread->error_buf = savebuf; scheme_clear_escape(); return; } Scheme_Thread *thread;
ESCAPE_BLOCK(/*empty*/)
p[0] = (Scheme_Object *) ASSELF __gc_external; p[0] = (Scheme_Object *) ASSELF __gc_external;
v = WITH_VAR_STACK(scheme_apply(method, POFFSET+0, p)); v = WITH_VAR_STACK(scheme_apply(method, POFFSET+0, p));
scheme_current_thread->error_buf = savebuf; thread->error_buf = savebuf;
READY_TO_RETURN; READY_TO_RETURN;
} }

View File

@ -254,12 +254,13 @@ void os_wxWindow::OnDropFile(epathname x0)
{ READY_TO_RETURN; return; } { READY_TO_RETURN; return; }
} else { } else {
mz_jmp_buf *savebuf, newbuf; mz_jmp_buf *savebuf, newbuf;
Scheme_Thread *thread;
p[POFFSET+0] = WITH_VAR_STACK(objscheme_bundle_pathname((char *)x0)); p[POFFSET+0] = WITH_VAR_STACK(objscheme_bundle_pathname((char *)x0));
savebuf = scheme_current_thread->error_buf; scheme_current_thread->error_buf = &newbuf; if (scheme_setjmp(newbuf)) { scheme_current_thread->error_buf = savebuf; scheme_clear_escape(); return; } ESCAPE_BLOCK(/*empty*/)
p[0] = (Scheme_Object *) ASSELF __gc_external; p[0] = (Scheme_Object *) ASSELF __gc_external;
v = WITH_VAR_STACK(scheme_apply(method, POFFSET+1, p)); v = WITH_VAR_STACK(scheme_apply(method, POFFSET+1, p));
scheme_current_thread->error_buf = savebuf; thread->error_buf = savebuf;
READY_TO_RETURN; READY_TO_RETURN;
} }
@ -291,13 +292,14 @@ Bool os_wxWindow::PreOnEvent(class wxWindow* x0, class wxMouseEvent* x1)
return FALSE; return FALSE;
} else { } else {
mz_jmp_buf *savebuf, newbuf; mz_jmp_buf *savebuf, newbuf;
Scheme_Thread *thread;
p[POFFSET+0] = WITH_VAR_STACK(objscheme_bundle_wxWindow(x0)); p[POFFSET+0] = WITH_VAR_STACK(objscheme_bundle_wxWindow(x0));
p[POFFSET+1] = WITH_VAR_STACK(objscheme_bundle_wxMouseEvent(x1)); p[POFFSET+1] = WITH_VAR_STACK(objscheme_bundle_wxMouseEvent(x1));
savebuf = scheme_current_thread->error_buf; scheme_current_thread->error_buf = &newbuf; if (scheme_setjmp(newbuf)) { scheme_current_thread->error_buf = savebuf; scheme_clear_escape(); return 1; } ESCAPE_BLOCK(1)
p[0] = (Scheme_Object *) ASSELF __gc_external; p[0] = (Scheme_Object *) ASSELF __gc_external;
v = WITH_VAR_STACK(scheme_apply(method, POFFSET+2, p)); v = WITH_VAR_STACK(scheme_apply(method, POFFSET+2, p));
scheme_current_thread->error_buf = savebuf; thread->error_buf = savebuf;
{ {
Bool resval; Bool resval;
@ -334,13 +336,14 @@ Bool os_wxWindow::PreOnChar(class wxWindow* x0, class wxKeyEvent* x1)
return FALSE; return FALSE;
} else { } else {
mz_jmp_buf *savebuf, newbuf; mz_jmp_buf *savebuf, newbuf;
Scheme_Thread *thread;
p[POFFSET+0] = WITH_VAR_STACK(objscheme_bundle_wxWindow(x0)); p[POFFSET+0] = WITH_VAR_STACK(objscheme_bundle_wxWindow(x0));
p[POFFSET+1] = WITH_VAR_STACK(objscheme_bundle_wxKeyEvent(x1)); p[POFFSET+1] = WITH_VAR_STACK(objscheme_bundle_wxKeyEvent(x1));
savebuf = scheme_current_thread->error_buf; scheme_current_thread->error_buf = &newbuf; if (scheme_setjmp(newbuf)) { scheme_current_thread->error_buf = savebuf; scheme_clear_escape(); return 1; } ESCAPE_BLOCK(1)
p[0] = (Scheme_Object *) ASSELF __gc_external; p[0] = (Scheme_Object *) ASSELF __gc_external;
v = WITH_VAR_STACK(scheme_apply(method, POFFSET+2, p)); v = WITH_VAR_STACK(scheme_apply(method, POFFSET+2, p));
scheme_current_thread->error_buf = savebuf; thread->error_buf = savebuf;
{ {
Bool resval; Bool resval;
@ -411,11 +414,12 @@ void os_wxWindow::OnSetFocus()
{ READY_TO_RETURN; return; } { READY_TO_RETURN; return; }
} else { } else {
mz_jmp_buf *savebuf, newbuf; mz_jmp_buf *savebuf, newbuf;
savebuf = scheme_current_thread->error_buf; scheme_current_thread->error_buf = &newbuf; if (scheme_setjmp(newbuf)) { scheme_current_thread->error_buf = savebuf; scheme_clear_escape(); return; } Scheme_Thread *thread;
ESCAPE_BLOCK(/*empty*/)
p[0] = (Scheme_Object *) ASSELF __gc_external; p[0] = (Scheme_Object *) ASSELF __gc_external;
v = WITH_VAR_STACK(scheme_apply(method, POFFSET+0, p)); v = WITH_VAR_STACK(scheme_apply(method, POFFSET+0, p));
scheme_current_thread->error_buf = savebuf; thread->error_buf = savebuf;
READY_TO_RETURN; READY_TO_RETURN;
} }
@ -445,11 +449,12 @@ void os_wxWindow::OnKillFocus()
{ READY_TO_RETURN; return; } { READY_TO_RETURN; return; }
} else { } else {
mz_jmp_buf *savebuf, newbuf; mz_jmp_buf *savebuf, newbuf;
savebuf = scheme_current_thread->error_buf; scheme_current_thread->error_buf = &newbuf; if (scheme_setjmp(newbuf)) { scheme_current_thread->error_buf = savebuf; scheme_clear_escape(); return; } Scheme_Thread *thread;
ESCAPE_BLOCK(/*empty*/)
p[0] = (Scheme_Object *) ASSELF __gc_external; p[0] = (Scheme_Object *) ASSELF __gc_external;
v = WITH_VAR_STACK(scheme_apply(method, POFFSET+0, p)); v = WITH_VAR_STACK(scheme_apply(method, POFFSET+0, p));
scheme_current_thread->error_buf = savebuf; thread->error_buf = savebuf;
READY_TO_RETURN; READY_TO_RETURN;
} }

View File

@ -485,6 +485,7 @@ static void release_context_lock(void *c)
void *wxWithGLContext(wxGL *gl, void *thunk, void *alt_evt, int eb) void *wxWithGLContext(wxGL *gl, void *thunk, void *alt_evt, int eb)
{ {
Scheme_Object **a, *wa[3], *glo, *v; Scheme_Object **a, *wa[3], *glo, *v;
Scheme_Thread *thread;
int evts; int evts;
if (!context_sema) { if (!context_sema) {
@ -494,8 +495,9 @@ void *wxWithGLContext(wxGL *gl, void *thunk, void *alt_evt, int eb)
context_sema = scheme_make_sema(1); context_sema = scheme_make_sema(1);
} }
thread = scheme_get_current_thread();
if ((gl == context_lock_holder) if ((gl == context_lock_holder)
&& (context_lock_thread == scheme_current_thread)) { && (context_lock_thread == thread)) {
/* The lock is already held by this GL context. */ /* The lock is already held by this GL context. */
return _scheme_apply_multi((Scheme_Object *)thunk, 0, NULL); return _scheme_apply_multi((Scheme_Object *)thunk, 0, NULL);
} }
@ -530,7 +532,7 @@ void *wxWithGLContext(wxGL *gl, void *thunk, void *alt_evt, int eb)
if (v == context_sema) { if (v == context_sema) {
context_lock_holder = gl; context_lock_holder = gl;
context_lock_thread = scheme_current_thread; context_lock_thread = scheme_get_current_thread();
a[0] = (Scheme_Object *)thunk; a[0] = (Scheme_Object *)thunk;
a[1] = glo; a[1] = glo;
@ -1384,6 +1386,8 @@ extern void wxPostScriptGetTextExtent(const char *fontname,
int sym_map) int sym_map)
{ {
if (ps_get_text_extent) { if (ps_get_text_extent) {
long multiple_count;
Scheme_Object **multiple_array;
Scheme_Object *a[5], *v; Scheme_Object *a[5], *v;
v = scheme_make_utf8_string(fontname); v = scheme_make_utf8_string(fontname);
@ -1399,24 +1403,27 @@ extern void wxPostScriptGetTextExtent(const char *fontname,
v = scheme_apply_multi(ps_get_text_extent, 5, a); v = scheme_apply_multi(ps_get_text_extent, 5, a);
multiple_count = scheme_get_multiple_count();
multiple_array = scheme_get_multiple_array();
if (SAME_OBJ(v, SCHEME_MULTIPLE_VALUES) if (SAME_OBJ(v, SCHEME_MULTIPLE_VALUES)
&& (scheme_multiple_count == 4)) { && (multiple_count == 4)) {
if (SCHEME_FLTP(scheme_multiple_array[0])) if (SCHEME_FLTP(multiple_array[0]))
*x = SCHEME_FLT_VAL(scheme_multiple_array[0]); *x = SCHEME_FLT_VAL(multiple_array[0]);
if (SCHEME_FLTP(scheme_multiple_array[1])) if (SCHEME_FLTP(multiple_array[1]))
*y = SCHEME_FLT_VAL(scheme_multiple_array[1]); *y = SCHEME_FLT_VAL(multiple_array[1]);
if (descent) if (descent)
if (SCHEME_FLTP(scheme_multiple_array[2])) if (SCHEME_FLTP(multiple_array[2]))
*descent = SCHEME_FLT_VAL(scheme_multiple_array[2]); *descent = SCHEME_FLT_VAL(multiple_array[2]);
if (topSpace) if (topSpace)
if (SCHEME_FLTP(scheme_multiple_array[3])) if (SCHEME_FLTP(multiple_array[3]))
*topSpace = SCHEME_FLT_VAL(scheme_multiple_array[3]); *topSpace = SCHEME_FLT_VAL(multiple_array[3]);
} else { } else {
*x = 0; *x = 0;
*y = 0; *y = 0;
if (descent) *descent = 0; if (descent) *descent = 0;
if (topSpace) *topSpace = 0; if (topSpace) *topSpace = 0;
} }
multiple_array = NULL;
} }
} }

View File

@ -1099,20 +1099,34 @@ typedef struct Scheme_Thread {
#endif #endif
typedef void (*Scheme_Kill_Action_Func)(void *); typedef void (*Scheme_Kill_Action_Func)(void *);
#define ESCAPE_BLOCK(return_code) \
thread = scheme_get_current_thread(); \
savebuf = thread->error_buf; \
thread->error_buf = &newbuf; \
if (scheme_setjmp(newbuf)) \
{ \
thread = scheme_get_current_thread(); \
thread->error_buf = savebuf; \
scheme_clear_escape(); \
return return_code; \
}
# define BEGIN_ESCAPEABLE(func, data) \ # define BEGIN_ESCAPEABLE(func, data) \
{ mz_jmp_buf * volatile savebuf, newbuf; \ { mz_jmp_buf * volatile savebuf, newbuf; \
Scheme_Thread *thread; \
thread = scheme_get_current_thread(); \
scheme_push_kill_action((Scheme_Kill_Action_Func)func, (void *)data); \ scheme_push_kill_action((Scheme_Kill_Action_Func)func, (void *)data); \
savebuf = scheme_current_thread->error_buf; \ savebuf = thread->error_buf; \
scheme_current_thread->error_buf = &newbuf; \ thread->error_buf = &newbuf; \
if (scheme_setjmp(newbuf)) { \ if (scheme_setjmp(newbuf)) { \
scheme_pop_kill_action(); \ scheme_pop_kill_action(); \
func(data); \ func(data); \
scheme_longjmp(*savebuf, 1); \ scheme_longjmp(*savebuf, 1); \
} else { } else {
# define END_ESCAPEABLE() \ # define END_ESCAPEABLE() \
thread = scheme_get_current_thread(); \
scheme_pop_kill_action(); \ scheme_pop_kill_action(); \
scheme_current_thread->error_buf = savebuf; } } thread->error_buf = savebuf; } }
/*========================================================================*/ /*========================================================================*/
@ -1390,6 +1404,7 @@ typedef void (*Scheme_Invoke_Proc)(Scheme_Env *env, long phase_shift,
#define SCHEME_ASSERT(expr,msg) ((expr) ? 1 : (scheme_signal_error(msg), 0)) #define SCHEME_ASSERT(expr,msg) ((expr) ? 1 : (scheme_signal_error(msg), 0))
#ifndef MZ_USE_PLACES
#define scheme_eval_wait_expr (scheme_current_thread->ku.eval.wait_expr) #define scheme_eval_wait_expr (scheme_current_thread->ku.eval.wait_expr)
#define scheme_tail_rator (scheme_current_thread->ku.apply.tail_rator) #define scheme_tail_rator (scheme_current_thread->ku.apply.tail_rator)
#define scheme_tail_num_rands (scheme_current_thread->ku.apply.tail_num_rands) #define scheme_tail_num_rands (scheme_current_thread->ku.apply.tail_num_rands)
@ -1401,6 +1416,7 @@ typedef void (*Scheme_Invoke_Proc)(Scheme_Env *env, long phase_shift,
#define scheme_multiple_count (scheme_current_thread->ku.multiple.count) #define scheme_multiple_count (scheme_current_thread->ku.multiple.count)
#define scheme_multiple_array (scheme_current_thread->ku.multiple.array) #define scheme_multiple_array (scheme_current_thread->ku.multiple.array)
#endif
#define scheme_setjmpup(b, base, s) scheme_setjmpup_relative(b, base, s, NULL) #define scheme_setjmpup(b, base, s) scheme_setjmpup_relative(b, base, s, NULL)
@ -1436,11 +1452,21 @@ typedef void (*Scheme_Invoke_Proc)(Scheme_Env *env, long phase_shift,
#define _scheme_force_value(v) ((v == SCHEME_TAIL_CALL_WAITING) ? scheme_force_value(v) : v) #define _scheme_force_value(v) ((v == SCHEME_TAIL_CALL_WAITING) ? scheme_force_value(v) : v)
#define scheme_tail_apply_buffer_wp(n, p) ((p)->tail_buffer) #define scheme_tail_apply_buffer_wp(n, p) ((p)->tail_buffer)
#define scheme_tail_apply_buffer(n) scheme_tail_apply_buffer_wp(n, scheme_current_thread) #define scheme_tail_apply_buffer(n) \
{ \
Scheme_Thread *thread; \
thread = scheme_get_current_thread(); \
scheme_tail_apply_buffer_wp(n, thread);\
}
#define _scheme_tail_apply_no_copy_wp_tcw(f, n, args, p, tcw) (p->ku.apply.tail_rator = f, p->ku.apply.tail_rands = args, p->ku.apply.tail_num_rands = n, tcw) #define _scheme_tail_apply_no_copy_wp_tcw(f, n, args, p, tcw) (p->ku.apply.tail_rator = f, p->ku.apply.tail_rands = args, p->ku.apply.tail_num_rands = n, tcw)
#define _scheme_tail_apply_no_copy_wp(f, n, args, p) _scheme_tail_apply_no_copy_wp_tcw(f, n, args, p, SCHEME_TAIL_CALL_WAITING) #define _scheme_tail_apply_no_copy_wp(f, n, args, p) _scheme_tail_apply_no_copy_wp_tcw(f, n, args, p, SCHEME_TAIL_CALL_WAITING)
#define _scheme_tail_apply_no_copy(f, n, args) _scheme_tail_apply_no_copy_wp(f, n, args, scheme_current_thread) #define _scheme_tail_apply_no_copy(f, n, args) \
{ \
Scheme_Thread *thread; \
thread = scheme_get_current_thread(); \
_scheme_tail_apply_no_copy_wp(f, n, args, thread) \
}
#define scheme_thread_block_w_thread(t,p) scheme_thread_block(t) #define scheme_thread_block_w_thread(t,p) scheme_thread_block(t)
@ -1661,6 +1687,11 @@ MZ_EXTERN int scheme_get_allow_set_undefined();
MZ_EXTERN THREAD_LOCAL Scheme_Thread *scheme_current_thread; MZ_EXTERN THREAD_LOCAL Scheme_Thread *scheme_current_thread;
MZ_EXTERN THREAD_LOCAL Scheme_Thread *scheme_first_thread; MZ_EXTERN THREAD_LOCAL Scheme_Thread *scheme_first_thread;
#endif #endif
MZ_EXTERN Scheme_Thread *scheme_get_current_thread();
MZ_EXTERN long scheme_get_multiple_count();
MZ_EXTERN Scheme_Object **scheme_get_multiple_array();
MZ_EXTERN void scheme_set_current_thread_ran_some();
/* Set these global hooks (optionally): */ /* Set these global hooks (optionally): */
typedef void (*Scheme_Exit_Proc)(int v); typedef void (*Scheme_Exit_Proc)(int v);

View File

@ -339,6 +339,15 @@ extern THREAD_LOCAL Scheme_Thread *scheme_main_thread;
#ifdef MZ_USE_PLACES #ifdef MZ_USE_PLACES
extern THREAD_LOCAL Scheme_Thread *scheme_current_thread; extern THREAD_LOCAL Scheme_Thread *scheme_current_thread;
extern THREAD_LOCAL Scheme_Thread *scheme_first_thread; extern THREAD_LOCAL Scheme_Thread *scheme_first_thread;
#define scheme_eval_wait_expr (scheme_current_thread->ku.eval.wait_expr)
#define scheme_tail_rator (scheme_current_thread->ku.apply.tail_rator)
#define scheme_tail_num_rands (scheme_current_thread->ku.apply.tail_num_rands)
#define scheme_tail_rands (scheme_current_thread->ku.apply.tail_rands)
#define scheme_overflow_reply (scheme_current_thread->overflow_reply)
#define scheme_error_buf *(scheme_current_thread->error_buf)
#define scheme_jumping_to_continuation (scheme_current_thread->cjs.jumping_to_continuation)
#define scheme_multiple_count (scheme_current_thread->ku.multiple.count)
#define scheme_multiple_array (scheme_current_thread->ku.multiple.array)
#endif #endif
typedef struct Scheme_Thread_Set { typedef struct Scheme_Thread_Set {

View File

@ -147,6 +147,9 @@ THREAD_LOCAL Scheme_Thread *scheme_main_thread = NULL;
THREAD_LOCAL Scheme_Thread *scheme_first_thread = NULL; THREAD_LOCAL Scheme_Thread *scheme_first_thread = NULL;
Scheme_Thread *scheme_get_current_thread() { return scheme_current_thread; } Scheme_Thread *scheme_get_current_thread() { return scheme_current_thread; }
long scheme_get_multiple_count() { return scheme_current_thread->ku.multiple.count; }
Scheme_Object **scheme_get_multiple_array() { return scheme_current_thread->ku.multiple.array; }
void scheme_set_current_thread_ran_some() { scheme_current_thread->ran_some = 1; }
THREAD_LOCAL Scheme_Thread_Set *scheme_thread_set_top; THREAD_LOCAL Scheme_Thread_Set *scheme_thread_set_top;