fix bytecode compiler bug related to 3-D code and delayed closure-body loading

svn: r8222
This commit is contained in:
Matthew Flatt 2008-01-05 16:05:05 +00:00
parent 652715c2d5
commit 8cbe9a6da9
2 changed files with 12 additions and 11 deletions

View File

@ -1031,6 +1031,17 @@ static Scheme_Object *try_apply(Scheme_Object *f, Scheme_Object *args)
return result;
}
static int foldable_body(Scheme_Object *f)
{
Scheme_Closure_Data *d;
d = SCHEME_COMPILED_CLOS_CODE(f);
scheme_delay_load_closure(d);
return (SCHEME_TYPE(d->code) > _scheme_values_types_);
}
static Scheme_Object *make_application(Scheme_Object *v)
{
Scheme_Object *o;
@ -1060,8 +1071,7 @@ static Scheme_Object *make_application(Scheme_Object *v)
|| (SCHEME_CLSD_PRIMP(f)
&& (((Scheme_Closed_Primitive_Proc *)f)->pp.flags & SCHEME_PRIM_IS_FOLDING))
|| (SAME_TYPE(SCHEME_TYPE(f), scheme_closure_type)
&& ((SCHEME_CLOSURE_DATA_FLAGS(SCHEME_COMPILED_CLOS_CODE(f)))
& CLOS_FOLDABLE))) {
&& (foldable_body(f)))) {
f = try_apply(f, SCHEME_CDR(v));
if (f)

View File

@ -1408,9 +1408,6 @@ scheme_resolve_closure_compilation(Scheme_Object *_data, Resolve_Info *info,
data->code = bcode;
}
}
if (SCHEME_TYPE(data->code) > _scheme_compiled_values_types_)
SCHEME_CLOSURE_DATA_FLAGS(data) |= CLOS_FOLDABLE;
}
if ((closure_size == 1)
@ -8068,12 +8065,6 @@ static Scheme_Object *read_compiled_closure(Scheme_Object *obj)
data->closure_size = SCHEME_SVEC_LEN(v);
data->closure_map = SCHEME_SVEC_VEC(v);
if (SCHEME_CLOSURE_DATA_FLAGS(data) & CLOS_FOLDABLE)
SCHEME_CLOSURE_DATA_FLAGS(data) -= CLOS_FOLDABLE;
if (SCHEME_TYPE(data->code) > _scheme_values_types_)
SCHEME_CLOSURE_DATA_FLAGS(data) |= CLOS_FOLDABLE;
/* If the closure is empty, create the closure now */
if (!data->closure_size)
return scheme_make_closure(NULL, (Scheme_Object *)data, 0);