diff --git a/src/mzscheme/src/eval.c b/src/mzscheme/src/eval.c index 6db15d030c..cee23766b3 100644 --- a/src/mzscheme/src/eval.c +++ b/src/mzscheme/src/eval.c @@ -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) diff --git a/src/mzscheme/src/fun.c b/src/mzscheme/src/fun.c index 452b2b349d..67659f7efd 100644 --- a/src/mzscheme/src/fun.c +++ b/src/mzscheme/src/fun.c @@ -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);