- SCM inside = simple_closure_expression (expr);
- return scm_apply_1 (scm_car (inside),
- delayed_argument,
- evaluate_args (delayed_argument, scm_cdr (inside)));
+ SCM inside = sc->expression ();
+ SCM proc = !pure && Unpure_pure_container::is_smob (scm_car (inside))
+ ? Unpure_pure_container::unsmob (scm_car (inside))->unpure_part ()
+ : scm_car (inside);
+ SCM args = scm_cons (delayed_argument,
+ evaluate_args (delayed_argument, scm_cdr (inside),
+ pure, start, end));
+ if (scm_cdr (args) == SCM_UNSPECIFIED)
+ return SCM_UNSPECIFIED;
+ if (pure)
+ return call_pure_function (proc, args, start, end);
+ return scm_apply_0 (proc, args);