From 2ddb09208b4b1ed289968b8c60868768722b1f65 Mon Sep 17 00:00:00 2001 From: Mikael Djurfeldt Date: Thu, 19 Aug 1999 19:01:19 +0000 Subject: [PATCH] * eval.c (SCM_APPLY), sort.c (closureless): Expand body when evaluating closures. --- libguile/eval.c | 20 +++++++++++++++++--- libguile/sort.c | 2 ++ 2 files changed, 19 insertions(+), 3 deletions(-) diff --git a/libguile/eval.c b/libguile/eval.c index 34c1575ea..ece36a17e 100644 --- a/libguile/eval.c +++ b/libguile/eval.c @@ -3542,9 +3542,23 @@ tail: } args = EXTEND_ENV (SCM_CAR (SCM_CODE (proc)), args, SCM_ENV (proc)); - proc = SCM_CODE (proc); - while (SCM_NNULLP (proc = SCM_CDR (proc))) - arg1 = EVALCAR (proc, args); + proc = SCM_CDR (SCM_CODE (proc)); + do + { + if (SCM_IMP (SCM_CAR (proc))) + { + if (SCM_ISYMP (SCM_CAR (proc))) + { + proc = scm_m_expand_body (proc, args); + continue; + } + arg1 = SCM_CAR (proc); + } + else + arg1 = SCM_CEVAL (SCM_CAR (proc), args); + proc = SCM_CDR (proc); + } + while (SCM_NNULLP (proc)); RETURN (arg1); case scm_tc7_contin: SCM_ASRTGO (SCM_NULLP (args), wrongnumargs); diff --git a/libguile/sort.c b/libguile/sort.c index fa30c92a5..6bdaeae14 100644 --- a/libguile/sort.c +++ b/libguile/sort.c @@ -354,6 +354,8 @@ closureless (SCM code, const void *a, const void *b) SCM_ENV (code)); /* Evaluate the closure body */ code = SCM_CDR (SCM_CODE (code)); + while (SCM_IMP (SCM_CAR (code)) && SCM_ISYMP (SCM_CAR (code))) + code = scm_m_expand_body (code, env); next = code; while (SCM_NNULLP (next = SCM_CDR (next))) {