fixed crash from breaking mred too early
svn: r285
This commit is contained in:
parent
f2f6a71402
commit
051db368f1
|
@ -3766,35 +3766,16 @@ static unsigned long get_deeper_base()
|
||||||
/****************************************************************************/
|
/****************************************************************************/
|
||||||
|
|
||||||
#if defined(wx_mac) || defined(wx_msw)
|
#if defined(wx_mac) || defined(wx_msw)
|
||||||
void wxDrop_Runtime(char **argv, int argc)
|
static void wxDo(Scheme_Object *proc, int argc, Scheme_Object **argv)
|
||||||
{
|
|
||||||
int i;
|
|
||||||
mz_jmp_buf *save, newbuf;
|
|
||||||
|
|
||||||
save = scheme_current_thread->error_buf;
|
|
||||||
scheme_current_thread->error_buf = &newbuf;
|
|
||||||
|
|
||||||
if (scheme_setjmp(newbuf)) {
|
|
||||||
/* give up on rest */
|
|
||||||
scheme_clear_escape();
|
|
||||||
} else {
|
|
||||||
for (i = 0; i < argc; i++) {
|
|
||||||
Scheme_Object *p[1];
|
|
||||||
p[0] = scheme_make_path(argv[i]);
|
|
||||||
scheme_apply(wxs_app_file_proc, 1, p);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
scheme_current_thread->error_buf = save;
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#if defined(wx_mac) || defined(wx_msw)
|
|
||||||
static void wxDo(Scheme_Object *proc)
|
|
||||||
{
|
{
|
||||||
mz_jmp_buf * volatile save, newbuf;
|
mz_jmp_buf * volatile save, newbuf;
|
||||||
volatile int block_descriptor;
|
volatile int block_descriptor;
|
||||||
|
|
||||||
|
if (!proc) {
|
||||||
|
/* Oops --- too early. */
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
/* 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. */
|
||||||
|
@ -3809,7 +3790,7 @@ static void wxDo(Scheme_Object *proc)
|
||||||
if (scheme_setjmp(newbuf)) {
|
if (scheme_setjmp(newbuf)) {
|
||||||
scheme_clear_escape();
|
scheme_clear_escape();
|
||||||
} else {
|
} else {
|
||||||
scheme_apply(proc, 0, NULL);
|
scheme_apply(proc, argc, argv);
|
||||||
}
|
}
|
||||||
|
|
||||||
scheme_current_thread->error_buf = save;
|
scheme_current_thread->error_buf = save;
|
||||||
|
@ -3818,6 +3799,18 @@ static void wxDo(Scheme_Object *proc)
|
||||||
scheme_end_atomic_no_swap();
|
scheme_end_atomic_no_swap();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if defined(wx_mac) || defined(wx_msw)
|
||||||
|
void wxDrop_Runtime(char **argv, int argc)
|
||||||
|
{
|
||||||
|
int i;
|
||||||
|
|
||||||
|
for (i = 0; i < argc; i++) {
|
||||||
|
Scheme_Object *p[1];
|
||||||
|
wxDo(wxs_app_file_proc, 1, p);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
void wxDrop_Quit()
|
void wxDrop_Quit()
|
||||||
{
|
{
|
||||||
if (ioFrame) {
|
if (ioFrame) {
|
||||||
|
@ -3825,20 +3818,20 @@ void wxDrop_Quit()
|
||||||
ioFrame->Show(FALSE);
|
ioFrame->Show(FALSE);
|
||||||
}
|
}
|
||||||
|
|
||||||
wxDo(wxs_app_quit_proc);
|
wxDo(wxs_app_quit_proc, 0, NULL);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef wx_mac
|
#ifdef wx_mac
|
||||||
void wxDo_About()
|
void wxDo_About()
|
||||||
{
|
{
|
||||||
wxDo(wxs_app_about_proc);
|
wxDo(wxs_app_about_proc, 0, NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
void wxDo_Pref()
|
void wxDo_Pref()
|
||||||
{
|
{
|
||||||
if (!SCHEME_FALSEP(wxs_app_pref_proc))
|
if (!SCHEME_FALSEP(wxs_app_pref_proc))
|
||||||
wxDo(wxs_app_pref_proc);
|
wxDo(wxs_app_pref_proc, 0, NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
int wxCan_Do_Pref()
|
int wxCan_Do_Pref()
|
||||||
|
|
|
@ -226,7 +226,14 @@ static int do_main_loop(FinishArgs *fa)
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
wxDoMainLoop();
|
{
|
||||||
|
mz_jmp_buf * volatile save, newbuf;
|
||||||
|
save = scheme_current_thread->error_buf;
|
||||||
|
scheme_current_thread->error_buf = &newbuf;
|
||||||
|
if (!scheme_setjmp(newbuf))
|
||||||
|
wxDoMainLoop();
|
||||||
|
scheme_current_thread->error_buf = save;
|
||||||
|
}
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
|
@ -303,14 +303,31 @@ static int finish_cmd_line_run(FinishArgs *fa, Repl_Proc repl)
|
||||||
#ifndef DONT_RUN_REP
|
#ifndef DONT_RUN_REP
|
||||||
if (!fa->no_rep && !fa->script_mode) {
|
if (!fa->no_rep && !fa->script_mode) {
|
||||||
/* enter read-eval-print loop */
|
/* enter read-eval-print loop */
|
||||||
repl(fa->global_env);
|
mz_jmp_buf * volatile save, newbuf;
|
||||||
exit_val = 0;
|
save = scheme_current_thread->error_buf;
|
||||||
|
scheme_current_thread->error_buf = &newbuf;
|
||||||
|
if (!scheme_setjmp(newbuf)) {
|
||||||
|
repl(fa->global_env);
|
||||||
|
exit_val = 0;
|
||||||
|
} else {
|
||||||
|
exit_val = 1;
|
||||||
|
#ifdef VERSION_YIELD_FLAG
|
||||||
|
fa->add_yield = 0;
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
scheme_current_thread->error_buf = save;
|
||||||
}
|
}
|
||||||
#endif /* DONT_RUN_REP */
|
#endif /* DONT_RUN_REP */
|
||||||
|
|
||||||
#ifdef VERSION_YIELD_FLAG
|
#ifdef VERSION_YIELD_FLAG
|
||||||
if (fa->add_yield) {
|
if (fa->add_yield) {
|
||||||
yield_indefinitely();
|
mz_jmp_buf * volatile save, newbuf;
|
||||||
|
save = scheme_current_thread->error_buf;
|
||||||
|
scheme_current_thread->error_buf = &newbuf;
|
||||||
|
if (!scheme_setjmp(newbuf)) {
|
||||||
|
yield_indefinitely();
|
||||||
|
}
|
||||||
|
scheme_current_thread->error_buf = save;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue
Block a user