else if (!NILP (fun) && (fun = SYMBOL_FUNCTION (fun), SYMBOLP (fun)))
fun = indirect_function (fun);
- if (SUBRP (fun))
+ if (scm_is_true (scm_procedure_p (fun)))
+ {
+ Lisp_Object args_left = original_args;
+ Lisp_Object nargs = Flength (args_left);
+ Lisp_Object *args;
+ size_t argnum = 0;
+
+ SAFE_ALLOCA_LISP (args, XINT (nargs));
+
+ while (! NILP (args_left))
+ {
+ args[argnum++] = eval_sub (Fcar (args_left));
+ args_left = Fcdr (args_left);
+ }
+ val = scm_call_n (fun, args, argnum);
+ }
+ else if (SUBRP (fun))
{
Lisp_Object numargs;
Lisp_Object argvals[8];
&& (fun = SYMBOL_FUNCTION (fun), SYMBOLP (fun)))
fun = indirect_function (fun);
- if (SUBRP (fun))
+ if (scm_is_true (scm_procedure_p (fun)))
+ {
+ val = scm_call_n (fun, args + 1, numargs);
+ }
+ else if (SUBRP (fun))
{
if (numargs < XSUBR (fun)->min_args
|| (XSUBR (fun)->max_args >= 0 && XSUBR (fun)->max_args < numargs))
return EQ (car, Qlambda) || EQ (car, Qclosure);
}
else
- return false;
+ return scm_is_true (scm_procedure_p (object));
}
INLINE_HEADER_END