fix 3m GC interaction with mred -z
svn: r6124
This commit is contained in:
parent
78e128b380
commit
d9cc602520
|
@ -1055,7 +1055,12 @@ int mred_in_restricted_context()
|
|||
Scheme_Object *v;
|
||||
if (!scheme_current_thread)
|
||||
return 1;
|
||||
v = scheme_extract_one_cc_mark(NULL, mred_het_key);
|
||||
|
||||
if (mred_het_key)
|
||||
v = scheme_extract_one_cc_mark(NULL, mred_het_key);
|
||||
else
|
||||
v = NULL;
|
||||
|
||||
if (v && SCHEME_BOX_VAL(v))
|
||||
return 1;
|
||||
#endif
|
||||
|
@ -1230,12 +1235,8 @@ static Scheme_Object *MrEdDoNextEvent(MrEdContext *c, wxDispatch_Check_Fun alt,
|
|||
|
||||
#ifdef NEED_HET_PARAM
|
||||
/* see wxHiEventTrampoline for info on mred_het_key: */
|
||||
{
|
||||
Scheme_Object *v;
|
||||
v = scheme_extract_one_cc_mark(NULL, mred_het_key);
|
||||
if (v && SCHEME_BOX_VAL(v))
|
||||
restricted = 1;
|
||||
}
|
||||
if (mred_in_restricted_context())
|
||||
restricted = 1;
|
||||
#endif
|
||||
|
||||
if (alt) {
|
||||
|
@ -1346,12 +1347,8 @@ int MrEdEventReady(MrEdContext *c)
|
|||
|
||||
#ifdef NEED_HET_PARAM
|
||||
/* see wxHiEventTrampoline for info on mred_het_key: */
|
||||
{
|
||||
Scheme_Object *v;
|
||||
v = scheme_extract_one_cc_mark(NULL, mred_het_key);
|
||||
if (v && SCHEME_BOX_VAL(v))
|
||||
restricted = 1;
|
||||
}
|
||||
if (mred_in_restricted_context())
|
||||
restricted = 1;
|
||||
#endif
|
||||
|
||||
return (c->nested_avail
|
||||
|
@ -2044,6 +2041,14 @@ static void MrEdQueueWindowCallback(wxWindow *wx_window, Scheme_Closed_Prim *scp
|
|||
Q_Callback *cb;
|
||||
Scheme_Object *p;
|
||||
|
||||
if (!scheme_current_thread) {
|
||||
/* Scheme hasn't started yet, so call directly.
|
||||
We might get here for an update to the stdio
|
||||
window, for example. */
|
||||
scp(data, 0, NULL);
|
||||
return;
|
||||
}
|
||||
|
||||
#ifdef wx_mac
|
||||
c = MrEdGetContext(wx_window->GetRootFrame());
|
||||
#else
|
||||
|
@ -3286,10 +3291,6 @@ wxFrame *MrEdApp::OnInit(void)
|
|||
mred_eventspace_param = scheme_new_param();
|
||||
mred_event_dispatch_param = scheme_new_param();
|
||||
mred_ps_setup_param = scheme_new_param();
|
||||
#ifdef NEED_HET_PARAM
|
||||
wxREGGLOB(mred_het_key);
|
||||
mred_het_key = scheme_make_symbol("het"); /* uninterned */
|
||||
#endif
|
||||
|
||||
wxInitSnips(); /* and snip classes */
|
||||
|
||||
|
@ -3314,6 +3315,11 @@ wxFrame *MrEdApp::OnInit(void)
|
|||
1, 0);
|
||||
#endif
|
||||
|
||||
#ifdef NEED_HET_PARAM
|
||||
wxREGGLOB(mred_het_key);
|
||||
mred_het_key = scheme_make_symbol("het"); /* uninterned */
|
||||
#endif
|
||||
|
||||
#ifdef MZ_PRECISE_GC
|
||||
mmc = (MrEdContext *)GC_malloc_one_tagged(sizeof(MrEdContext));
|
||||
#else
|
||||
|
|
|
@ -67,6 +67,8 @@ void scheme_set_stack_base(void *base, int no_auto_statics)
|
|||
scheme_pair_type, scheme_weak_box_type,
|
||||
scheme_ephemeron_type, scheme_rt_weak_array,
|
||||
scheme_cust_box_type);
|
||||
/* We want to be able to allocate symbols early. */
|
||||
scheme_register_traversers();
|
||||
#endif
|
||||
#if defined(MZ_PRECISE_GC) || defined(USE_SENORA_GC)
|
||||
GC_set_stack_base(base);
|
||||
|
|
Loading…
Reference in New Issue
Block a user