summaryrefslogtreecommitdiff
path: root/libguile
diff options
context:
space:
mode:
authorAndy Wingo <wingo@pobox.com>2009-12-03 15:55:54 +0100
committerAndy Wingo <wingo@pobox.com>2009-12-03 15:55:54 +0100
commita941cde9e595ab13f4d1804a2734967a89ead03a (patch)
tree400cb3696a6766202d9403ab34fd1a255aa5639d /libguile
parentd389e9661a682855e8313b37a4f08dd2d7735acc (diff)
downloadguile-a941cde9e595ab13f4d1804a2734967a89ead03a.tar.gz
simplify apply_foreign
* libguile/vm.c (apply_foreign): Simplify.
Diffstat (limited to 'libguile')
-rw-r--r--libguile/vm.c34
1 files changed, 8 insertions, 26 deletions
diff --git a/libguile/vm.c b/libguile/vm.c
index 67b5614a8..fdfae0082 100644
--- a/libguile/vm.c
+++ b/libguile/vm.c
@@ -265,27 +265,8 @@ resolve_variable (SCM what, SCM program_module)
static SCM
apply_foreign (SCM proc, SCM *args, int nargs, int headroom)
{
- SCM arg1, arg2, arg3;
-
SCM_ASRTGO (SCM_NIMP (proc), badproc);
- /* Parse args. */
- switch (nargs)
- {
- case 0:
- arg1 = SCM_UNDEFINED; arg2 = SCM_UNDEFINED; arg3 = SCM_UNDEFINED;
- break;
- case 1:
- arg1 = args[0]; arg2 = SCM_UNDEFINED; arg3 = SCM_UNDEFINED;
- break;
- case 2:
- arg1 = args[0]; arg2 = args[1]; arg3 = SCM_UNDEFINED;
- break;
- default:
- arg1 = args[0]; arg2 = args[1]; arg3 = args[2];
- break;
- }
-
switch (SCM_TYP7 (proc))
{
case scm_tcs_closures:
@@ -298,15 +279,16 @@ apply_foreign (SCM proc, SCM *args, int nargs, int headroom)
}
case scm_tc7_cxr:
if (nargs != 1) scm_wrong_num_args (proc);
- return scm_i_chase_pairs (arg1, (scm_t_bits) SCM_SUBRF (proc));
+ return scm_i_chase_pairs (args[0], (scm_t_bits) SCM_SUBRF (proc));
case scm_tc7_asubr:
if (nargs < 2)
- return SCM_SUBRF (proc) (arg1, SCM_UNDEFINED);
+ return SCM_SUBRF (proc) (args[0], SCM_UNDEFINED);
{
+ SCM x = args[0];
int idx = 1;
while (nargs-- > 1)
- arg1 = SCM_SUBRF (proc) (arg1, args[idx++]);
- return arg1;
+ x = SCM_SUBRF (proc) (x, args[idx++]);
+ return x;
}
case scm_tc7_rpsubr:
{
@@ -326,15 +308,15 @@ apply_foreign (SCM proc, SCM *args, int nargs, int headroom)
case 0:
return SCM_SMOB_APPLY_0 (proc);
case 1:
- return SCM_SMOB_APPLY_1 (proc, arg1);
+ return SCM_SMOB_APPLY_1 (proc, args[0]);
case 2:
- return SCM_SMOB_APPLY_2 (proc, arg1, arg2);
+ return SCM_SMOB_APPLY_2 (proc, args[0], args[1]);
default:
{
SCM arglist = SCM_EOL;
while (nargs-- > 2)
arglist = scm_cons (args[nargs], arglist);
- return SCM_SMOB_APPLY_3 (proc, arg1, arg2, arglist);
+ return SCM_SMOB_APPLY_3 (proc, args[0], args[1], arglist);
}
}
case scm_tc7_gsubr: