fix 3m GC interaction with mred -z

svn: r6124
This commit is contained in:
Matthew Flatt 2007-05-03 06:59:10 +00:00
parent 78e128b380
commit d9cc602520
2 changed files with 25 additions and 17 deletions

View File

@ -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

View File

@ -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);