fix bytecode compiler bug related to 3-D code and delayed closure-body loading
svn: r8222
This commit is contained in:
parent
652715c2d5
commit
8cbe9a6da9
|
@ -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)
|
||||
|
|
|
@ -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);
|
||||
|
|
Loading…
Reference in New Issue
Block a user